Jenkinsfileのpipelineでgit cloneする方法として
sh('git clone example.com:some-repositry.git')
という素朴な手段もありますが、多くの場合SSH鍵のセットアップが別途必要になります。
pipelineスクリプトにはGitプラグインが提供するgit()
というステップがあり、Jenkinsに登録したSSH鍵をスレーブノードに供給できます。
オプションとしてurl
とcredentialsId
を指定しますが、credentialsIdはJenkinsが発行するIDであるため、コードの生成にはJenkins搭載の
Snippet Generatorを利用すべきでしょう。
Sample Stepのプルダウンからgitを選択すると、指定すべきオプションのフォームが表示されます。
Snippet GeneratorにリポジトリURLと鍵を指定するとリポジトリの疎通確認が走るため、実行時にcloneできないトラブルを防げます。
サブディレクトリへのgit clone
git()
はgit clone example.com:some-repositry.git .
と同様の動作となり、ワークスペースのトップディレクトリにリソースが配置されます。
ステップのオプションでローカルのディレクトリを指定できないため、以下のようなスクリプトでサブディレクトリを用意すると期待した動作になるでしょう。
if (!fileExists('build')){
sh("mkdir -p build")
}
dir ('build') {
git(credentialsId: 'xxxxxxxxx-xxxx-3333-2222-xxxxxxxx', url: 'example.com:some-repositry.git')
}
なお、mkdirなどをgroovyのFile APIで実装すると、リスクのある処理となり管理者の承認待ちに回されます(ビルド失敗)。
各現場のポリシーしだいですが、認可を乱発するよりはシェルで書ける処理はsh()で実装した方が制御しやすいのではないでしょうか。
⁋ 2018/05/11↻ 2024/12/18
中馬崇尋
Chuma Takahiro
Chuma Takahiro