【Jenkins】ジョブの再実行を使いこなす3つの方法

CI/CD
https://jenkins.io/

はじめに

こんにちはSREエンジニアのMakiです。
この記事ではJenkinsのジョブを再実行する3つの方法を紹介します。
Jenkinsを使っていると一つ前のビルドのパラメータや条件を引き継いで再度ジョブを実行したいという場面がよくあると思います。そのときに使えるおすすめテクニックを紹介します。

ジョブの再実行をする3つの方法

ジョブの再実行をするのにおすすめのやり方は3つあります。

  1. Rebuild
  2. Replay
  3. Restart from a Stage

この3つを紹介します。
Rebuildはすべてのジョブで利用可能です。ReplayRestart from a Stage はPipeline ジョブで利用可能です。

Rebuild

まずは Rebuild について紹介します。

RebuildRebuild Plugin を入れると使えるようになります。
Jenkinsを使う上での必須プラグインの一つだと思うので、まだインストールしていない方はぜひ導入することをおすすめします。

Rebuild の特徴はジョブの設定はそのままに、特定のビルドのパラメータを引き継いで実行することができます。これにより同じパラメータを何度も入力して実行するというわずらわしさから解放されます。

つまり、過去に実行したビルドのパラメータを引き継いでジョブを再実行できるということです。

使い方

  1. Rebuild を開く

    この画像ではビルド番号8を用いて再実行しています。
  2. 引き継がれているパラメータを確認してビルド。

    ※もちろんパラメータの中身を書き換えて再実行することもできます。

このように、過去のビルドに使ったパラメータを引き継いでジョブを再実行できるのが特徴です。
パラメータの書き換えもできるのでたくさんのパラメータを用意してあるジョブで、少し設定を変えて再実行というような使い方をするときにも便利に使えます。

Replay

2つめはReplayです。

Replay はPipelineジョブ専用の再実行方法です。
Replayはジョブの設定に変更を加えずに、一時的にPipelineのスクリプトを書き換えて実行するということができます。Replay の場合は Rebuild と違ってパラメータの修正はできません。
Pipelineのちょっとしたデバッグなどの用途で使うと良いでしょう。

例えば、Pipelineのスクリプト内で使われている変数を確認したいときにechoのステップを使って出力してみるなど。下記の使い方で具体的に紹介します。

使い方

  1. Replay を開く

    ビルド結果の画面左にあるReplayを開きます。
  2. Pipeline の修正をしてRun

    Pipelineの編集画面が出るので修正を加えます。
    変数名をecho で確認できるように修正を入れました。
    修正が完了したらRunを押すとジョブが実行されます。
  3. 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つです。

  1. build
    javaのソースコードをコンパイルするジョブをキックします。
  2. deploy staging
    deploy用のジョブをキックしてstaging 環境にjarの適用を行います。
  3. 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}")
            ]
         }
      }
   }
}
  1. Restart from a Stage を開く

    再実行したいビルドの画面左からRestart from a Stage を選択します。
  2. Stage nameを選択します。

    再開するStage nameを選択してRunを実行します。
    今回はbuildをスキップして deploy stagingを選択します。
  3. 実行結果の確認をする。

    この画像でみてもわかるように deploy staging からジョブが再開されていることが確認できます。

まとめ

以上がJenkinsのJobを再実行する3つの方法になります。
改めまして簡単にまとめます。

  1. Rebuild
    パラメータを引き継いでジョブを再実行するときに使います。
  2. Replay
    Pipelineの中身を少し修正して再実行したいときに使います。
  3. Restart from a Stage
    Pipelineのジョブをステージを途中から再実行したいときに使います。

それぞれの用途に合わせて使い分けてみてくださいね。

おすすめ書籍


[改訂第3版]Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

初めてJenkinsを学ぶ方におすすめです。


Jenkins

Jenkinsでできることについてもう少し詳しく学びたい方におすすめです。

コメント

タイトルとURLをコピーしました