Windows-Server-2012
如何將 Jenkins Git 外掛從使用 GIT_ASKPASS 更改為 .gitcredentials
我已經發布了這個問題:
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://user@github.com': 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 儲存庫的訪問的情況。其中一些場景包括:
- 密碼包含需要 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