One Step Ahead

プログラミングやエンジニアリング全般について書いていきます

Jenkins PipelineのTry&Error

Jenkins Pipeline Try & Error


皆さんはJenkins Pipelineを使っていますか?
もし使っているならどうやって、Try & Errorをしていますか?

今日はJenkins Pipeline、特に「Pipeline script from SCM」を使った場合のTry & Errorについての紹介です。

「Pipeline script from SCM」って?


通常の「Pipeline script」はUIを通して、処理を記載していきます。
下のようなJobが相当します。 f:id:EaE:20190507125317p:plain これでも「free style job」に比較すれば十分にPipelineの恩恵を享受できますが、ひとつ足りないものが...
「JobそのものをVersion管理したい。」となったときにこれでは、Version管理ができません。

そこで使用するのが、「Pipeline script from SCM」
Pipeline Scriptを「Jenkinsfile」として保存し、実行のたびにJenkinsfileが保存されたリポジトリをfetch。存在するJenkinsfileを元にして、Jobを実行していくもののことを指します。

準備自体は比較的簡単で...
- ① Pipeline scriptを元に「Jenkinsfile」を作成
- ② 対象のリポジトリへJenkinsfileをCommit & Push
- ③ Pipeline Jobで「Pipeline script from SCM」を選択
- ④ リポジトリURLと対象となるJenkinsfileのパスを指定
後はJob実行が選択されるたびに、Fetchを行いJenkisfileを元にして、Jobが実行されていきます。

Pipelineの実行


Pipelineの作成等はまた別の機会ということで割愛。
まずは、作成したPipelineを「Pipeline script from SCM」で実行します。
Jenkinsfileの中身は先ほどと同じ内容なので以下を参考に。

pipeline {
    agent any
    
    stages {
        stage('sample') {
            steps {
                echo 'Hello Pipeline script'
            }
        }
    }
}

今回はJenkinsfileの配置場所などは特に考えず、Rootへ配置します。 f:id:EaE:20190507230003p:plain 対象となるリポジトリのURLを指定し、今回はCredentialも併せて指定します。
JenkinsfileパスはRootに存在しているので、初期設定のままで問題ありません。

これでJobを実行すると... f:id:EaE:20190507230007p:plain 無事にJobの成功が確認できます。

PipelineのRetry


次はRetry方法ですが、SCMにJenkinsfileを移してしまうとJobを修正したいときには、CommitとPushが必要になります。
ここで問題になるのがTry & Errorが気軽に行えないということです。 お試しでJobを実行してみたい場合などに、いちいちCommitしてPushしていると一瞬で履歴が汚れ、怒られます。 「私は完璧にJobを書ける!!」という人は問題ありませんが、そうでない方は「Retry」を活用して、JobのTry & Errorを行いましょう!

まずはコンソール出力の画面を開き「Retry」の表示を探しだします。 f:id:EaE:20190507230012p:plain
「Retry」が見つかったら、これをクリックし「Retry画面」を開きます。 「Retry画面」開くとJobの実行に使われたJenkinsfile(Pipeline script)の内容が表示されます。 後は、このPipeline scriptを修正して、「Run」を押せば、修正したJenkinsfileの内容に則ってJobが実行されます。  

f:id:EaE:20190507231526p:plain

注意点


便利な「Retry」ですが何点か注意するべきことがあります。

①Retry画面に表示されるのはPipeline scriptとして認識されたもののみ

1点目は、Pipeline scriptとして認識されたものしかRetryできません。
例えば、構文エラーでそもそもPipeline scriptとして評価されない場合はRetryにScriptが表示されません。

②履歴の「Retry」なのでパラメータを使う場合は基本的に自由に設定できない。

もう1点はあくまで履歴の「Retry」機能なので基本的にはパラメータはすべて引き継がれてしまいます。 そのため、条件分岐式をテストしたい場合などは、十分なTry & Errorを行うことができません。