Jenkinsのプロジェクトにサブモジュールがあります。サブモジュールを再帰的に更新するために、詳細設定を有効にしました。
ビルドを実行すると、ワークスペースにサブモジュールのファイルが含まれていることがわかります。問題は、それがサブモジュールの最初のリビジョンのようだということです。変更をプッシュすると(GitHubでホストされているリポジトリ)、Jenkinsは正しい変更を取得するためにサブモジュールを更新していないようです。誰かがこれを見たことがありますか?
回答:
Jenkins Gitプラグイン2.0には「高度なサブモジュールの動作」があり、サブモジュールが適切に更新されるようにする必要があることに注意してください。
Advanced sub-modules behavior
> "Path of the reference repo to use during submodule update
"このフィールドに対して、サブモジュールgiturlを追加します。
認証の問題については、「親リポジトリのデフォルトのリモートからの資格情報を使用する」オプションがあります
ここJENKINS-20941で見られる:
これについては、Jenkinsサイトの「再帰的サブモジュール」セクションのGitプラグインのドキュメントで説明されています。
抜粋GITプラグインは、サブモジュールを備えたリポジトリをサポートします。サブモジュールには、サブモジュール自体があります。ただし、これをオンにする必要があります。[ジョブの構成] -> [セクションソースコード管理]、[ Git] -> [詳細ボタン](ビルドするブランチの下)-> [サブモジュールを再帰的に更新]。
ジョブの構成画面の[ソースコード管理]セクションで、[追加]ボタンを下に引き、[高度なサブモジュールの動作]を選択します。
次に、「サブモジュールを再帰的に更新する」を選択します。
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などのサブモジュールに関する適切なリファレンスを読むことをお勧めします。
ついにこれを行う方法に出くわしました、そしてそれは簡単です。
資格情報を使用した最初のクローンは正常に機能しますが、その後のsubmodule
複製は誤った資格情報で失敗します。
Source Code Management >> Additional Behaviours >> Advanced sub-modules behaviours
資格情報エラーが発生します。git submodule update --init
中Execute Shell
節も資格情報のエラーで失敗します。私はを使用していjenkins-1.574
ます。
Build Environment >> SSH Agent
ボックスをます。 Source Code Management
セクションで選択したものと同じです)Execute Shell
セクションのサブモジュールを更新します
git submodule sync
git submodule update --init --recursive
これがスクリーンショットです
私は解決策を見つけたようです:
次のシェルコマンドを実行するためのビルドステップを追加しました。
git submodule foreach git checkout master
git submodule foreach git pull
git submodule update --init --recursive
チェックアウトプラグインでスクリプトパイプラインを使用しています。サブモジュールをリポジトリ内と同じにしたい場合は、次のように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']]])