はじめに
こんにちはSREエンジニアのMakiです。
この記事ではJenkinsのジョブを再実行する3つの方法を紹介します。
Jenkinsを使っていると一つ前のビルドのパラメータや条件を引き継いで再度ジョブを実行したいという場面がよくあると思います。そのときに使えるおすすめテクニックを紹介します。
ジョブの再実行をする3つの方法
ジョブの再実行をするのにおすすめのやり方は3つあります。
- Rebuild
- Replay
- Restart from a Stage
この3つを紹介します。
Rebuild
はすべてのジョブで利用可能です。Replay
とRestart from a Stage
はPipeline ジョブで利用可能です。
Rebuild
まずは Rebuild
について紹介します。
Rebuild
は Rebuild Plugin
を入れると使えるようになります。
Jenkinsを使う上での必須プラグインの一つだと思うので、まだインストールしていない方はぜひ導入することをおすすめします。
Rebuild
の特徴はジョブの設定はそのままに、特定のビルドのパラメータを引き継いで実行することができます。これにより同じパラメータを何度も入力して実行するというわずらわしさから解放されます。
つまり、過去に実行したビルドのパラメータを引き継いでジョブを再実行できるということです。
使い方
Rebuild
を開く
この画像ではビルド番号8を用いて再実行しています。- 引き継がれているパラメータを確認してビルド。
※もちろんパラメータの中身を書き換えて再実行することもできます。
このように、過去のビルドに使ったパラメータを引き継いでジョブを再実行できるのが特徴です。
パラメータの書き換えもできるのでたくさんのパラメータを用意してあるジョブで、少し設定を変えて再実行というような使い方をするときにも便利に使えます。
Replay
2つめはReplay
です。
Replay
はPipelineジョブ専用の再実行方法です。
Replayはジョブの設定に変更を加えず
に、一時的にPipelineのスクリプトを書き換えて
実行するということができます。Replay
の場合は Rebuild
と違ってパラメータの修正はできません。
Pipelineのちょっとしたデバッグなどの用途で使うと良いでしょう。
例えば、Pipelineのスクリプト内で使われている変数を確認したいときにecho
のステップを使って出力してみるなど。下記の使い方で具体的に紹介します。
使い方
Replay
を開く
ビルド結果の画面左にあるReplay
を開きます。- Pipeline の修正をして
Run
Pipelineの編集画面が出るので修正を加えます。
変数名をecho で確認できるように修正を入れました。
修正が完了したらRun
を押すとジョブが実行されます。 - Blue Ocean で確認する。
修正内容が反映されているかBlue Oceanを開いて確認してみます。
変数の中身を確認することができました。
このように設定を変更しないで、一時的にPipelineのスクリプトに手を加えたいというときにはReplay
が便利です。
Restart from a Stage
最後は Restart from a Stage
です。
これもPipelineジョブ専用のジョブ再実行方法です。
Restart from a Stage
はパイプラインを再実行する際にどのStageから再開できるかを選択できるというのが特徴です。
例えば、build
, deploy staging
, deploy production
と3つのステージで構成されていて、2つ目の deploy staging
でジョブが失敗していたとします。このときに最初の build
部分をスキップして deploy staging
から再実行することが可能です。
ただし、これをやろうとするにはStage間での依存関係が内容にジョブの設計をしておく必要があります。
一つ前のStageで変数を定義したりとか、後続のstageに影響を及ぼす作りになっているとうまく扱えないので注意が必要です。
また、Replay
と同様にパラメータの変更を行うことはできません。
使い方
サンプルコードを使い方の紹介をしていきます。
サンプルコードでやっていることは3つです。
- build
javaのソースコードをコンパイルするジョブをキックします。 - deploy staging
deploy用のジョブをキックしてstaging
環境にjarの適用を行います。 - deploy production
build時のブランチがmaster
(安定版) のときに、
deploy用のジョブをキックしてproduction
環境にjarの適用を行います。
Sample
pipeline {
agent any
parameters {
string defaultValue: 'master', description: 'Input deploy target branch.', name: 'BRANCH', trim: true
}
stages {
stage('Build') {
steps {
build job: 'build-jar', parameters: [string(name: 'BRANCH', value: "${BRANCH}")]
}
}
stage('deploy staging') {
environment {
TARGET = "staging"
}
steps {
build job: 'deploy-jar', parameters: [
string(name: 'BRANCH', value: "${BRANCH}"),
string(name: 'TARGET', value: "${TARGET}")
]
}
}
stage('deploy production') {
when {
environment name: 'BRANCH', value: 'master'
}
environment {
TARGET = "production"
}
steps {
build job: 'deploy-jar', parameters: [
string(name: 'BRANCH', value: "${BRANCH}"),
string(name: 'TARGET', value: "${TARGET}")
]
}
}
}
}
Restart from a Stage
を開く
再実行したいビルドの画面左からRestart from a Stage
を選択します。Stage name
を選択します。
再開するStage name
を選択してRun
を実行します。
今回はbuild
をスキップしてdeploy staging
を選択します。- 実行結果の確認をする。
この画像でみてもわかるようにdeploy staging
からジョブが再開されていることが確認できます。
まとめ
以上がJenkinsのJobを再実行する3つの方法になります。
改めまして簡単にまとめます。
- Rebuild
パラメータを引き継いでジョブを再実行するときに使います。 - Replay
Pipelineの中身を少し修正して再実行したいときに使います。 - Restart from a Stage
Pipelineのジョブをステージを途中から再実行したいときに使います。
それぞれの用途に合わせて使い分けてみてくださいね。
おすすめ書籍
[改訂第3版]Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)
初めてJenkinsを学ぶ方におすすめです。
Jenkins
Jenkinsでできることについてもう少し詳しく学びたい方におすすめです。
コメント