Windows-Server-2012

如何將 Jenkins Git 外掛從使用 GIT_ASKPASS 更改為 .gitcredentials

  • August 13, 2020

我已經發布了這個問題:

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 儲存庫的訪問的情況。其中一些場景包括:

在修復這些開放錯誤之前的一些臨時替代方案包括:

  • 保持目前版本(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

引用自:https://serverfault.com/questions/823152