我已经发布过这个问题:
自升级到 Git 客户端插件 2.1.0 以来,Jenkins 无法读取 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
编辑
根据bobs的建议,我已成功运行这些命令。
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。
答案1
您无法将 Jenkins git 客户端插件从使用 ASKPASS 更改为使用 .gitcredentials。该插件没有可选择的密码提示方法。
在 2.0 之前的版本中,它使用 .gitcredentials,而在 2.0 及更高版本中则改用 ASKPASS。进行此更改是为了在 git 客户端插件 2.0 中添加子模块身份验证。
有未解决的错误报告描述了一些情况,在这些情况下,基于 Windows 的用户名/密码设置不再适用于基于 https 的 git 存储库访问。 其中一些情况包括:
- 密码包含需要 Windows 转义的字符,但插件无法正确转义密码(JENKINS-40166、JENKINS-38194 和 JENKINS-38179)
- TFS 2015 的未知故障模式JENKINS-38138
在修复这些未解决的错误之前,一些临时的替代方案包括:
- 保留当前版本(git 客户端插件 1.19.6 和 git 插件 2.x)
- 下载并安装 git 客户端插件 1.21.0 和 git 插件 2.6.1,这样您就可以在凭据更改之前使用 git 客户端插件。您需要从 URL updates.jenkins-ci.org/download/plugins/git 和 updates.jenkins-ca.org/download/plugins/git-client 下载,然后使用 Jenkins 插件管理器的“高级”选项卡上传较新(但不是最新)版本的 git 客户端插件和 git 插件
- 协助评估待处理的 git 客户端插件拉取请求,该请求可调整插件中的 Windows 密码转义。拉取请求是 github 上的 PR231
答案2
我使用 Git 客户端插件后也遇到了同样的问题2.1.0->2.2.0和 Git 插件2.5.2->3.0.1。还原这些后仍未解决问题,我从此文件中删除了所有 [credential] 条目:(c:\users\user\.gitconfig
即全局变量git config --global --list
:),然后重置(添加?)此
git config --global credential.helper manager
然后执行了一个示例 git fetch,现在会弹出窗口输入 ID/PW,然后将其缓存到管理器中。后续调用有效。
答案3
我认为某个插件更新弄乱了凭据,所以我基本上清除了所有以前的设置并重置了它。这是我逐个命令执行的操作:
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/*
在弹出的对话框中输入ID/PW
完成。现在,当我运行任何 git 命令(包括在使用此 ID 的 jenkins 构建中)时,它不再提示输入密码,就像在我更新插件之前一样。
答案4
这对我有用。
似乎当您尝试连接到存储库时,它并不需要提供的凭据,而是需要为提供的存储库 URL 存储的 windowscredentials。
因此,我遵循的方法是:
使用与运行 Jenkins 节点相同的用户登录从属服务器(在我的情况下是运行该服务的用户)
使用 git 客户端在您想要的任何地方创建 git 存储库并进行 git 克隆。在那里您将被提示输入凭据。输入正确的凭据并确保您将存储库中的文件放到所选位置。
通过控制面板\用户帐户\凭据管理器--> Windows 凭据检查存储的凭据。(一般来说,应该是与您的 URL 相关的凭据)
配置从 GIT 下载的任务。输入 URL,应该不会出现红色警告消息。我已经测试过,此操作无需在 jenkins 中提供凭据即可完成。
你完成了!