我已经发布了这个问题:
Jenkins 升级到 Git 客户端插件 2.1.0 后无法读取 Github 密码
简而言之,我已经克隆了 Jenkins 1.650 的生产实例,并在 Windows 2012 上将克隆的实例升级到了 2.25。
作为其中的一部分,Git Client 插件已从 1.19.6 升级到 2.1.0,现在它无法进行身份验证。
如果我再次降级此插件,我的作业可以完美运行,但是当使用升级的插件运行它们时,作业会失败。
我现在注意到我可以看到的一个区别是,在作业输出中,在它工作的实例上有一条消息using .gitcredentials to set credentials
,而在克隆的实例上using GIT_ASKPASS to set credentials
。
我怀疑这是问题所在,或者至少是相关的,但我找不到改变它的方法。以下失败作业的完整输出:
08:18:40 Cloning the remote Git repository
08:18:40 Cloning repository https://github.com/mycompany/myrepo.git
08:18:40 > C:\Program Files\Git\cmd\git.exe init C:\Program Files (x86)\Jenkins\workspace\project # timeout=10
08:18:40 Fetching upstream changes from https://github.com/mycompany/myrepo.git
08:18:40 > C:\Program Files\Git\cmd\git.exe --version # timeout=10
08:18:40 using GIT_ASKPASS to set credentials
08:18:40 > C:\Program Files\Git\cmd\git.exe fetch --tags --progress https://github.com/mycompany/myrepo.git +refs/heads/*:refs/remotes/origin/*
08:18:41 ERROR: Error cloning remote repo 'origin'
08:18:41 hudson.plugins.git.GitException: Command "C:\Program Files\Git\cmd\git.exe fetch --tags --progress https://github.com/mycompany/myrepo.git +refs/heads/*:refs/remotes/origin/*" returned status code 128:
08:18:41 stdout:
08:18:41 stderr: '*dds23' is not recognized as an internal or external command,
08:18:41 operable program or batch file.
08:18:41 error: unable to read askpass response from 'C:\Windows\TEMP\pass6274847349411211542.bat'
08:18:41 bash: /dev/tty: No such device or address
08:18:41 error: failed to execute prompt script (exit code 1)
08:18:41 fatal: could not read Password for 'https://[email protected]': No error
08:18:41
08:18:41 at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1745)
08:18:41 at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1489)
08:18:41 at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$300(CliGitAPIImpl.java:64)
08:18:41 at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:315)
08:18:41 at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$2.execute(CliGitAPIImpl.java:512)
08:18:41 at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:1054)
08:18:41 at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1094)
08:18:41 at hudson.scm.SCM.checkout(SCM.java:495)
08:18:41 at hudson.model.AbstractProject.checkout(AbstractProject.java:1278)
08:18:41 at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:604)
08:18:41 at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
08:18:41 at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:529)
08:18:41 at hudson.model.Run.execute(Run.java:1720)
08:18:41 at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:531)
08:18:41 at hudson.model.ResourceController.execute(ResourceController.java:98)
08:18:41 at hudson.model.Executor.run(Executor.java:401)
08:18:41 ERROR: null
08:18:41 Archiving artifacts
08:18:41 [htmlpublisher] Archiving HTML reports...
08:18:41 [htmlpublisher] Archiving at PROJECT level C:\Program Files (x86)\Jenkins\workspace\project\server.project\server.distribution\target\htmldocs\documentation to C:\Program Files (x86)\Jenkins\jobs\project\htmlreports\documentation
08:18:41 ERROR: Specified HTML directory 'C:\Program Files (x86)\Jenkins\workspace\project\server.project\server.distribution\target\htmldocs\documentation' does not exist.
08:18:41 [BFA] Scanning build for known causes...
08:18:41 [BFA] No failure causes found
08:18:41 [BFA] Done. 0s
08:18:41 Started calculate disk usage of build
08:18:41 Finished Calculation of disk usage of build in 0 seconds
08:18:41 Started calculate disk usage of workspace
08:18:41 Finished Calculation of disk usage of workspace in 0 seconds
08:18:42 Sending e-mails to: bob@yeah
08:18:43 Finished: FAILURE
编辑
根据鲍勃的建议,我已经成功运行了这些命令。
del c:\users\user-name\.gitconfig
git config --global credential.helper manager
git fetch --tags --progress https://stash/myproj/proj.git +refs/heads/*:refs/remotes/origin/*
但是,运行我的工作时的输出完全相同。仍在使用 GIT_ASKPASS。必须有一种方法可以恢复为 .gitcredentials。
您无法将 Jenkins git 客户端插件从使用 ASKPASS 更改为使用 .gitcredentials。该插件没有可选择的密码提示方法。
它在 2.0 之前的版本中使用 .gitcredentials,并在 2.0 及更高版本中切换到 ASKPASS。进行了该更改,以便可以在 git 客户端插件 2.0 中添加子模块身份验证。
有一些开放的错误报告描述了基于 Windows 的用户名/密码设置不再适用于基于 https 的对 git 存储库的访问的情况。其中一些场景包括:
在修复这些开放错误之前的一些临时替代方案包括:
在 Git 客户端插件2.1.0 -> 2.2.0和 Git 插件2.5.2 -> 3.0.1之后,我也发生了同样的事情。在恢复那些没有修复它之后,我从这个文件中删除了所有 [credential] 条目:(
c:\users\user\.gitconfig
即全局:)git config --global --list
然后重置(添加?)这个然后做了一个示例 git fetch,现在弹出窗口输入 ID/PW,它与管理器缓存它。随后的调用工作。
我认为凭据被其中一个插件更新弄乱了,所以我基本上清除了所有以前的设置并重置它。这就是我所做的,一个命令一个命令:
完毕。现在,当我运行任何 git 命令(包括使用此 ID 构建的詹金斯)时,它不再提示输入密码,就像我更新插件之前一样。
这对我有用。
似乎当您尝试连接到存储库时,它不使用提供的凭据,而是使用为提供的存储库 url 存储的 windowscredentials。
因此,我完成这项工作的方式是:
使用相同的用户登录 de slave 服务器,使 jenkins 节点运行(在我的情况下是运行该服务的用户)
使用 git 客户端在任何你想要的地方创建一个 git 存储库并创建一个 git 克隆。将提示您输入凭据。放置正确的凭据并确保您将存储库中的文件放到所选位置。
通过控制面板\用户帐户\凭据管理器-> Windows 凭据检查存储的凭据。(一般来说应该是与您的 URL 相关的一个)
配置要从 GIT 下载的任务。放上网址,应该没有红色的警告信息。我已经测试过这项工作没有在詹金斯中提供凭据。
你完成了!