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


86

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

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

回答:


98

Jenkins Gitプラグイン2.0には「高度なサブモジュールの動作」があり、サブモジュールが適切に更新されるようにする必要があることに注意してください。

git 2.0

以下のようにコメントvikramvi

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

道


オーウェンBコメントで言及しています

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

ここJENKINS-20941で見られる:

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


6
しかし、どのように?また、詳細な手順、選択するオプションを提供できますか?ありがとう。
zavié

8
@zavié「高度なサブモジュールの動作」を選択し、表示される「サブモジュールを再帰的に更新する」チェックボックスをオンにして、「保存」をクリックする必要があると思います。
KajMagnus 2014年

9
プライベートリポジトリを使用している場合、これは完全には機能しません。
エリック

1
プライベートリポジトリで私のために完璧に機能しました
davegallant 2015年

3
これは、リポジトリがgitサブモジュールを読み取るために認証を必要としない場合にのみ機能します。Jenkinsのバグ。
Ernst Kuschke 2016年

33

これについては、Jenkinsサイトの「再帰的サブモジュール」セクションのGitプラグインのドキュメントで説明されています。

抜粋

GITプラグインは、サブモジュールを備えたリポジトリをサポートします。サブモジュールには、サブモジュール自体があります。ただし、これをオンにする必要があります。[ジョブの構成] -> [セクションソースコード管理]、[ Git] -> [詳細ボタン](ビルドするブランチの下)-> [サブモジュールを再帰的に更新]

ジョブの構成画面の[ソースコード管理]セクションで、[追加]ボタンを下に引き、[高度なサブモジュールの動作]を選択します。

   s1

                                 s2

次に、「サブモジュールを再帰的に更新する」を選択します。

   s3


1
ありがとうございますが、これを試したとき(ほぼ2年前)は機能しませんでした
ベン

@ Ben-OK、これを試してみたところ、うまくいきました。お使いのバージョンに関連している可能性があります。
slm 2014年

1
これは、リポジトリがgitサブモジュールを読み取るために認証を必要としない場合にのみ機能します。
Ernst Kuschke 2016年

@ ErnstKuschke-JenkinsにSSHキーを与えることができるので、認証を必要とするリポジトリと対話することもできます。
slm 2016年

30

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などのサブモジュールに関する適切なリファレンスを読むことをお勧めします。


1
@stiが提供したProGitリンクは古くなっています。私考えて、これは現在のと等価であるhttps://git-scm.com/book/en/v2/Git-Tools-Submodules
Stevel

リンクが壊れています(HTTPS関連?)- 「502BadGateway」
ピーターモーテンセン

17

ついにこれを行う方法に出くわしました、そしてそれは簡単です。

問題:

資格情報を使用した最初のクローンは正常に機能しますが、その後のsubmodule複製は誤った資格情報で失敗します。

  1. 自動の高度なサブモジュールのクローン作成::Source Code Management >> Additional Behaviours >> Advanced sub-modules behaviours資格情報エラーが発生します。
  2. git submodule update --initExecute Shell節も資格情報のエラーで失敗します。

ソリューション:

私はを使用していjenkins-1.574ます。

  1. チェックしてください Build Environment >> SSH Agentボックスをます。
  2. 正しい資格情報を選択します(おそらくSource Code Managementセクションで選択したものと同じです)
  3. Execute Shellセクションのサブモジュールを更新します

    git submodule sync
    git submodule update --init --recursive
    

これがスクリーンショットですここに画像の説明を入力してください


3
そのようなチェックボックスはもうありません。
adi518 2017

11

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

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

git submodule foreach git checkout master
git submodule foreach git pull

ただし、これらのコマンドを実行した後、サブモジュールのHEADが更新されるため、スーパープロジェクトでコミットする必要がある場合があります。
slacy 2012

こんにちはベン、あなたのソリューションをもう少し詳しく教えていただけますか?同じことをしたいです。また、確認のために、ソリューションはgitサブモジュールがプロジェクトのサブモジュールをWORKSPACEに更新しますね。
キムスタック2013年

それ以上の詳細はありません。これらの2行をビルドプロセスに追加したところ、常に最新バージョンのサブモジュールがプルされます。
ベン

10
@stiがここでの別の応答で述べているように、SVN外部のようなGitサブモジュールを使用しようとしているようです。これらのコマンドをJenkinsに追加する代わりに、適切なサブモジュールバージョンをメインのGitリポジトリにコミットすることをお勧めします。Jenkinsは、プロジェクトの特定のバージョンをビルドするときに、常に同じバージョンのサブモジュールをチェックアウトします。再現可能なビルドは良いことです。
Cody Casterline 2013年

4
@benこのコマンドに出くわしたのですが、特にサブモジュールでマスターブランチを使用していない場合はもっと便利かもしれません git submodule update --init --recursive
Corey Scott

7

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


2

チェックアウトプラグインでスクリプトパイプラインを使用しています。サブモジュールをリポジトリ内と同じにしたい場合は、次のようにtrackingSubmodulesオプションをオフにするだけです。

checkout([$class: 'GitSCM', branches: [[name: '*/develop']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'SubmoduleOption', disableSubmodules: false, parentCredentials: true, recursiveSubmodules: false, reference: '', trackingSubmodules: false]], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '[myCredentials]', url: 'https://git.myRepo.git']]])
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.