web-dev-qa-db-ja.com

JitkinsビルドでGitサブモジュールが更新されない

Jenkinsのプロジェクトにサブモジュールがあります。サブモジュールを再帰的に更新する高度な設定を有効にしました。

ビルドを実行すると、ワークスペースにサブモジュールのファイルがあることがわかります。問題は、サブモジュールの最初のリビジョンのようです。変更をプッシュする(GitHubでホストされるリポジトリ)Jenkinsは、適切な変更を取得するためにサブモジュールを更新しないようです。誰もこれを見たことがありますか?

69
Ben

私は解決策を見つけたようです:

次のシェルコマンドを実行するビルドステップを追加しました。

git submodule foreach git checkout master
git submodule foreach git pull
7
Ben

Jenkins Git plugin 2. には「サブモジュールの動作を進める」ことに注意してください。これにより、サブモジュールの適切な更新が保証されます。

git 2.0

コメント付き by vikramvi

Advanced sub-modules behavior> "Path of the reference repo to use during submodule update "このフィールドに対して、サブモジュールgit urlを追加します。

Path


オーウェンB 言及 コメント内

認証の問題については、「親リポジトリのデフォルトのリモートから資格情報を使用する」オプションがあります

ここで JENKINS-20941 で見られます:

https://issues.jenkins-ci.org/secure/attachment/33245/Screen%20Shot%202016-07-08%20at%2010.09.17.png

81
VonC

Gitリポジトリが常にサブモジュールの特定のリビジョンを参照していることを知っていますか? Jenkinsはリビジョンを自動的に変更しません。

サブモジュールの新しいリビジョンを使用する場合は、ローカルGitリポジトリでこれを行う必要があります。

cd submoduledir
git pull
cd ..
git add submoduledir
git commit -m 'Updated to latest revision of submoduledir'
git Push # Go and watch Jenkins build with the new revision of the submodule

このようにすると、Jenkinsはビルド中にサブモジュールのまったく同じリビジョンをチェックアウトします。 Jenkinsは、サブモジュールのどのリビジョンを使用するかを独自に決定しません。これは、GitサブモジュールとSVN外部の基本的な違いです。

サブモジュールに関する適切なリファレンスを読むことをお勧めします。 http://progit.org/book/ch6-6.html

26
sti

最後にこれを行う方法を見つけましたが、それは簡単です。

問題:

資格情報を使用した最初のクローンは正常に機能しますが、後続のsubmoduleクローン作成は資格情報が正しくないため失敗します。

  1. 高度なサブモジュールの自動クローン作成:_Source Code Management >> Additional Behaviours >> Advanced sub-modules behaviours_:クレデンシャルエラーが発生します。
  2. _git submodule update --init_セクションの_Execute Shell_も資格情報エラーで失敗します。

ソリューション:

_jenkins-1.574_を使用しています。

  1. _Build Environment >> SSH Agent_ボックスをチェックします。
  2. 正しい資格情報を選択します(おそらく_Source Code Management_セクションで選択したものと同じです)
  3. _Execute Shell_セクションのサブモジュールを更新します

    _git submodule sync
    git submodule update --init --recursive
    _

これがスクリーンショットですenter image description here

17
potench

Jenkins Gitモジュールを使用している場合は、「ビルド前にワークスペースを消去」に設定できます。これにより、常に正しいサブモジュールが取得されます。

5
Amin Y