web-dev-qa-db-ja.com

Jenkins GitプラグインをGIT_ASKPASSから.gitcredentialsに変更する方法

私はすでにこの質問を投稿しました:

Gitクライアントプラグイン2.1.0にアップグレードしたため、JenkinsはGithubパスワードを読み取ることができません

つまり、Jenkins 1.650の本番インスタンスのクローンを作成し、そのクローンインスタンスをWindows 2012で2.25にアップグレードしました。

この一環として、Gitクライアントプラグインが1.19.6から2.1.0にアップグレードされ、認証できなくなりました。

このプラグインを再度ダウングレードすると完全に実行されるジョブがありますが、アップグレードされたプラグインを使用して実行するとジョブが失敗します。

今、私が確認できる1つの違いは、ジョブの出力で、それが機能するインスタンスにメッセージ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に戻す方法が必要です。

1
shaneoh

Jenkins gitクライアントプラグインをASKPASSから.gitcredentialsに変更することはできません。プラグインには、選択可能なパスワードプロンプト方法がありません。

2.0より前のリリースでは.gitcredentialsを使用し、リリース2.0以降ではASKPASSに切り替えました。この変更は、git client plugin 2.0でサブモジュール認証を追加できるように行われました。

Windowsベースのユーザー名/パスワードの設定がgitリポジトリへのhttpsベースのアクセスで機能しないシナリオを説明する未解決のバグレポートがあります。これらのシナリオの一部は次のとおりです。

  • パスワードにWindowsエスケープが必要な文字が含まれていますが、プラグインはパスワードを正しくエスケープしません( JENKINS-40166 、JENKINS-38194、およびJENKINS-38179)
  • TFS 2105での不明な障害モード 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プラグインの新しい(ただし最新ではない)バージョン
  • プラグイン内のパスワードのWindowsエスケープを調整する保留中のgitクライアントプラグインプルリクエストの評価を支援します。プルリクエストはgithub上のPR231です
1
Mark Waite

プラグインの更新の1つによって認証情報がめちゃくちゃになったと思うので、基本的に以前の設定をすべてクリアしてリセットしました。これは私がやったことです、コマンドごとに:

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ビルドを含む)を実行すると、プラグインを更新する前のように、パスワードを要求されなくなりました。

0
bobs

Gitクライアントプラグイン2.1.-> 2.2.およびGitプラグイン2.5.2-> の後も同じことが起こりました。 3.0.1。それらを元に戻した後、修正されなかったため、このファイルからすべての[資格情報]エントリを削除しました:c:\users\user\.gitconfig(つまり、グローバル:git config --global --list)次に、これをリセット(追加?)します

git config --global credential.helper manager

次に、サンプルのgit fetchを実行しました。これにより、ポップアップウィンドウが表示され、ID/PWを入力します。ID/ PWは、それをマネージャーにキャッシュします。後続の呼び出しは機能します。

0
bobs

これは私のために働いたものです。

リポジトリに接続しようとすると、提供された資格情報を取得しないようです。代わりに、提供されたリポジトリのURLに保存されているWindows資格情報を取得します。

だから、私がこの仕事をするために従った方法は次のとおりです:

  1. 同じユーザーを使用してスレーブサーバーにログインし、jenkinsノードを実行させます(私の場合は、サービスを実行するノードです)。

  2. Gitクライアントを使用して、好きな場所にgitのリポジトリを作成し、gitクローンを作成します。そこで資格情報の入力を求められます。適切な認証情報を入力し、リポジトリ内のファイルを選択した場所に確実に取得します。

  3. コントロールパネル\ユーザーアカウント\クレデンシャルマネージャー-> Windowsクレデンシャルで保存されているクレデンシャルを確認します。 (一般的には、URLに関連するものである必要があります)

  4. GITからダウンロードするタスクを構成します。 URLを入力すると、警告メッセージが赤で表示されなくなります。私はこれがジェンキンスで資格情報を提供することなく動作することをテストしました。

  5. 完了です!

0
piglesias