1つのサブモジュールを持つgitリポジトリがあります。どちらもBitBucketのチームに属しています。私のjenkinsマシンは、gitプラグインを備えたAWS Windowsサーバーです。認証にSSHキーを使用しています。私はジェンキンスの仕事を3つ持っています。 1つはメインリポジトリのクローンを作成します。これは成功です。 1つは、2番目のレポをそれ自体で複製します(サブモジュールとして使用されるレポ)。これも成功しています。 3番目のビルドジョブでは、jenkinsにサブモジュールを再帰的に更新するように指示しています。これは失敗し、公開鍵エラーが表示されます。リポジトリを自分で複製できる場合はどうなりますか?
以下のコンソール出力:
Started by user anonymous
Building on master in workspace C:\Program Files (x86)\Jenkins\jobs\MainRepo\workspace
Wiping out workspace first.
Cloning the remote Git repository
Cloning repository [email protected]:team/mainrepo.git
> git.exe init C:\Program Files (x86)\Jenkins\jobs\mainrepo\workspace # timeout=10
Fetching upstream changes from [email protected]:team/mainrepo.git
> git.exe --version # timeout=10
using GIT_SSH to set credentials
> git.exe -c core.askpass=true fetch --tags --progress [email protected]:team/mainrepo.git +refs/heads/*:refs/remotes/Origin/*
> git.exe config remote.Origin.url [email protected]:team/mainrepo.git # timeout=10
> git.exe config --add remote.Origin.fetch +refs/heads/*:refs/remotes/Origin/* # timeout=10
> git.exe config remote.Origin.url [email protected]:team/mainrepo.git # timeout=10
Fetching upstream changes from [email protected]:team/mainrepo.git
using GIT_SSH to set credentials
> git.exe -c core.askpass=true fetch --tags --progress [email protected]:team/mainrepo.git +refs/heads/*:refs/remotes/Origin/*
> git.exe rev-parse "refs/remotes/Origin/master^{commit}" # timeout=10
> git.exe rev-parse "refs/remotes/Origin/origin/master^{commit}" # timeout=10
Checking out Revision 6b3f6535c45e79ee88f4918d464edead48d83369 (refs/remotes/Origin/master)
> git.exe config core.sparsecheckout # timeout=10
> git.exe checkout -f 6b3f6535c45e79ee88f4918d464edead48d83369
> git.exe rev-list 6b3f6535c45e79ee88f4918d464edead48d83369 # timeout=10
> git.exe remote # timeout=10
> git.exe submodule init # timeout=10
> git.exe submodule sync # timeout=10
> git.exe config --get remote.Origin.url # timeout=10
> git.exe submodule update --init --recursive
FATAL: Command "git.exe submodule update --init --recursive" returned status code 128:
stdout:
stderr: Cloning into 'my-submodule'...
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
fatal: clone of '[email protected]:team/my-submodule.git' into submodule path 'my-submodule' failed
hudson.plugins.git.GitException: Command "git.exe submodule update --init --recursive" returned status code 128:
stdout:
stderr: Cloning into 'my-submodule'...
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
fatal: clone of '[email protected]:team/my-submodule.git' into submodule path 'my-submodule' failed
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.Java:1693)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$500(CliGitAPIImpl.Java:62)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$7.execute(CliGitAPIImpl.Java:953)
at hudson.plugins.git.extensions.impl.SubmoduleOption.onCheckoutCompleted(SubmoduleOption.Java:90)
at hudson.plugins.git.GitSCM.checkout(GitSCM.Java:1098)
at hudson.scm.SCM.checkout(SCM.Java:485)
at hudson.model.AbstractProject.checkout(AbstractProject.Java:1276)
at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.Java:607)
at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.Java:86)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.Java:529)
at hudson.model.Run.execute(Run.Java:1738)
at hudson.matrix.MatrixBuild.run(MatrixBuild.Java:301)
at hudson.model.ResourceController.execute(ResourceController.Java:98)
at hudson.model.Executor.run(Executor.Java:410)
Finished: FAILURE
この です jenkinsの既知のバグでした: https://issues.jenkins-ci.org/browse/JENKINS-20941 これは修正されました。Gitプラグインを更新して問題を解決してください。
更新が不可能な場合は、回避策として、キーをjenkins-users .sshフォルダーに置くことができます。
ここでの以前の回答に基づいて、クライアントのジェンキンスのアップグレードを優先順位付けし直しました。現在、それらはGitプラグイン3.0.1を備えたJenkins 2.41にあり、追加の構成の前にこれで問題は修正されませんでした。私は設定が少しトリッキーであることがわかりました:
両方のオプションを選択すると、トップレベルのリポジトリ用に構成した資格情報が使用され、すべてが機能します。これは、Gitプラグイン3.0.1を使用した2.41でのダイアログの外観です。
*ここに私の「許可が拒否されました」エラーの本質があります:
「サードパーティ」への複製...
stderr:アクセスが拒否されました(公開鍵)。致命的:リモートエンドが突然ハングアップする 'ssh://[email protected]//thirdparty'のサブモジュールパス 'thirdparty'へのクローンに失敗しました
PS投稿する直前に、私はいつもの二重チェックを行って、回答が重複していないことを確認しました。この場合、@ danielfnのコメントが私の回答とほぼ同じものを指していることがわかりますが、1。これは役に立たず、試行錯誤によってそれを理解することになりました。2。投稿するのはStackOverflowポリシーです。外部リンクを参照するのではなく、ここで答えます。
git client plugin 1.20.0-beta1およびgit plugin 2.5.0-beta1で修正されているようです。ただし、Jenkinsに追加できるのは、試験的な更新センターから更新をプルするように指定することだけです。
別の方法として、「ソースコード管理」-「複数のSCM」を使用してすべてのサブモジュールを手動で構成し、それぞれに「追加の動作」-「サブディレクトリにチェックアウト」を追加することができます。