2015年4月22日水曜日

Jenkins の Workflow Plugin を使ってみた

概要

JenkinsのWorkflow Pluginを使ってみました
ビルドをchainするプラグインは他にもBuild Pipelineなどがあります
今回使うWorkflowプラグインも同じような種類のプラグインですがBuild Pipelineで問題だった点をいろいろ解決してくれているプラグインになります
インストールから簡単なサンプルの動作まで紹介します

環境

  • CentOS 6.6 64bit
  • Jenkins 1.6.10
  • Workflow Plugin 1.5

各種インストール

  • Jenkins
    ここを参考にyumでインストールしました
    Workflowプラグインを動かすためには1.580.1以上のバージョンが必要です

  • Workflowプラグインのインストール

Jenkinsの管理 -> プラグインの管理 -> Workflow: Aggregator

をインストールします
依存するプラグインも一緒にインストールされます
プラグインをインストールしたらJenkinsを一旦再起動しましょう

Workflowジョブを作成する

普通にジョブを作成する手順と同じです
Build Pipelineの場合はジョブを「下流」「上流」でchainすることで実現し、ビューでBuild Pipelineビューを作りましたが、Workflowプラグインはビューを作成しません

ジョブの種類を選択する部分で「Workflow」という項目が増えているのでこれを選択することでWorkflow用のジョブを作成することができます
create_workflow_job.png
これを選択して適当なWorkflowジョブを作成してください

Groovy でジョブのフローを記述する

ここがWorkflowプラグインの一番の肝になると思います
ジョブの設定を開くと「Definition Groovy CPS DSL」という項目でフリーのテキストエリアでScriptを記載する部分があると思います
ここにGroovyスクリプトを記載していきます

Workflowプラグインはジョブの流れや処理をGroovyのスクリプトで制御できるプラグインになります

とりあえずHello world

まずはジョブを成功させてみましょう
以下のScriptを記述してジョブを保存してください

echo 'hello from Workflow'

hello_world_workflow.png

そしてジョブを実行してみましょう
ビルド結果を確認するとechoした文章が出力されていると思います
result_hello_world_workflow.png

またScriptは以下のように記載することもできます

echo("hello from Workflow");

書きやすい方で書いてみましょう

複数のジョブを実行してみる

今回は既存の複数のジョブをWorkflow用のジョブから順番に実行できるようにしてみます
既存のジョブ名はそれぞれ「test1_job」「test2_job」とします
以下のようのScriptを記載しましょう

build 'test1_job'
build 'test2_job'

保存してジョブを実行してみます

実行結果をみると指定したジョブが上から順に実行されましたというログだけが出ています
なのでWorkflowから実行したジョブのビルド結果は各ジョブのビルド結果を見る必要があります

とりあえず既存のジョブをchainするだけならWorkflow Pluginでも簡単にできました

最後に

今回はBuild Pipelineのようにジョブをchainすることが目的だったので紹介は以上ですが、Workflow Pluguinで用意されている機能はもっとたくさんあります
SCMからリソースを取得したり、分散ビルドしたり、成果物を保存したりといったビルドの基本的な機能も実装されているので、これらをGroovyで書くことができます

感想も

かなりちょっとしか使っていませんが使ってみた感想としてはまだまだ発展の余地はあるかなと思いました
Build Pipelineに比べて優れているのは、それぞれのジョブ同士が疎結合のままchainすることができるので、ジョブを単体で実行することができる状態を保つことができます
もう少し言うとBuild Pipelineを使うと必ず下流、上流が結びついているので単体で実行すると勝手に下流のジョブも流れてしまいます
また上流のビルドパラメータを下流に引き継ぐようなジョブを作成していると、必ず上流から実行しないとパラメータの値がないので下流のジョブを単体で実行することができません
この辺のジョブの疎結合はWorkflow Pluginのほうが優れている点だと思います

ただ、Workflow Pluginではフローの可視化ができなかったり、ビルド結果の詳細を確認するには実行したジョブ側を見なければいけなかったりといろいろと改善してほしいポイントはあると思いました
ジョブの一覧でも、どのジョブがWorkflowジョブなのか一見するとわからないので命名規則でカバーしなければいけないのか、、とかも感じまいsた

なので今のところは各自のユースケースにあったプラグインを選択すればいいと思いますが、個人的には今後はWorkflow Pluginが来ると思います
理由としてはやはりビルドの内容をGroovyで完全にコード化できる点かなと思います
Infrastructure as a Codeではないですが、ジョブの状態がコードがされていれば見える化もしやすいですし、git で管理することもできるのでジョブの内容自体をCIすることもできるようになると思います

えー、いろいろ書きましたがとりあえず好感触を得ることができました
今後の発展も期待して使い続けたいと思います

参考サイト

0 件のコメント:

コメントを投稿