Git cloneのサブモジュールを更新したい。
JenkinsのパイプラインGitコマンドでこれを行う方法はありますか?
現在、私はこれをやっています...
git branch: 'master',
credentialsId: 'bitbucket',
url: 'ssh://bitbucket.org/hello.git'
ただし、複製されたサブモジュールは更新されません。
現在の Gitプラグイン では、それさえ必要ありません。
GITプラグインは、サブモジュール自体を持つサブモジュールを持つリポジトリをサポートします。
これはオンにする必要があります:ジョブ構成->セクションソースコード管理、Git->詳細ボタン(ビルドするブランチの下)->サブモジュールを再帰的に更新
しかし、OPはパイプラインを使用しています。
したがって、簡単な最初のビルド手順で十分です。
git submodule update --init --recursive
ただし、OPは以下を追加します。
はい。ただし、
sh 'git submodule update --init --recursive'
を使用している場合、$HOME/id_rsa
を使用しますか?可能であれば、このコマンドの秘密鍵を渡します。
可能です: パイプライン構文 では、 環境変数の定義 が可能です。
これは、GIT_SSH_COMMAND
( with Git 2.10 + )を設定できることを意味します。
これにより、 独自の秘密鍵を参照 が可能になります。
pipeline {
agent any
environment {
GIT_SSH_COMMAND = 'ssh -i /path/to/my/private/key'
}
stages {
stage('Build') {
steps {
sh 'printenv'
sh 'git submodule update --init --recursive'
}
}
}
}
クローンにssh URLが含まれる場合、そのsshクローンは正しい秘密鍵を使用します。
gitコマンド は、より複雑な checkoutコマンド のデフォルトの実装を提供するため、パイプラインステップとしてはかなり制限されています。より高度な構成の場合は、 checkout command を使用する必要があります。これに対して、目的のサブモジュール構成を含む、多くのパラメーターを渡すことができます。
使用したいのはおそらく次のようなものです:
checkout([$class: 'GitSCM',
branches: [[name: '*/master']],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'SubmoduleOption',
disableSubmodules: false,
parentCredentials: false,
recursiveSubmodules: true,
reference: '',
trackingSubmodules: false]],
submoduleCfg: [],
userRemoteConfigs: [[url: 'your-git-server/your-git-repository']]])
ドキュメントから、この種の行を書くのは面倒なことが多いので、代わりにJenkinsを使用することをお勧めしますSnippet Generator
(YourJenkins> yourProject> PipelineSyntax)チェックアウト行を自動的に生成します!
checkout([
$class: 'GitSCM',
branches: scm.branches,
doGenerateSubmoduleConfigurations: false,
extensions: [[
$class: 'SubmoduleOption',
disableSubmodules: false,
parentCredentials: true,
recursiveSubmodules: true,
reference: '',
trackingSubmodules: false
]],
submoduleCfg: [],
userRemoteConfigs: scm.userRemoteConfigs
])