始めに
Jenkins 2.0からパイプラインが、そしてJenkins 2.7からはBlue Oceanプラグインが利用可能となりました。今回はこれらのプラグインを取り上げます。
対象は以下の方々を想定しています。
- Jenkinsは使ったことがあるが、1.6系のJenkinsまでで止まっている。
- パイプラインに興味はあるが、敷居を高く感じている。
画面ショットを交え、実際に手を動かしながら実行できる内容となっていますので、実際にJenkinsを操作しパイプラインとBlue Oceanの理解を深めていただけると幸いです。
パイプラインとは
従来Jenkinsはフリースタイルジョブでジョブを定義していました。ただフリースタイルジョブでは、例えば条件ロジックを組めなかったり、ジョブの途中で停止してしまった場合に最初から始めなければならなかったりと現実的にCI/CDを実現するには多くの制約がありました。
それらの問題を解消するために登場したのがパイプラインです。
パイプラインとは、Jenkins2.0から登場した公式のプラグインであり、CI/CDのフローをコードとして定義するためのツールです。なお、パイプラインにはスクリプトパイプラインと宣言型パイプラインの2種類がありますが、今回はBlue Oceanを利用するために宣言型パイプラインを用います。
どういったことができる?
パイプラインの特徴や、フリースタイルジョブと比べての利点について説明していきます。
まずパイプラインはJenkinsfileというApache GroovyをベースにしたDSLで記載されたスクリプトファイルです。 1つのスクリプトファイルでCI/CDのフローを記載することが可能です。
従来、複数のジョブをつなげていくにはビルド・トリガを用いて連結していく必要がありましたが、一目見るだけではどのようにジョブがつながっているのかがわかりませんでした。 タスクの名称をナンバリングするといった方法で運用回避されていたかと思います。 全体像がわかりづらく、業務引継ぎ等を考えると非常にネガティブな状況でした。
また、実行したいCI/CDのフローに比例してジョブの数も増えていき、管理にもコストがかかってしまいます。 比較してパイプラインは、CI/CDのフローの流れを1つのJenkinsfileで表現することが可能になります。
さらに、CI/CDのフローを表現できる幅も広がりました。 従来のビルド・トリガのような順次実行は当然として、並列実行や繰り返しの実行、条件に応じたスクリプトの実行といったことが可能になります。
例えば製品バージョン毎に異なるJDKのバージョン違い。従来であればJDK毎にフリースタイルジョブを作成する必要がありましたが、パイプラインでは条件に応じたスクリプトの実行が可能なので、コミットされたリポジトリに応じてJDKを分けるといった事ができます。
CI/CDフロー内の承認といったことについても、パイプライン上で可能です。 フローの一時点で停止し、承認や入力を待機して、入力内容に応じて後続フローの実行を切り替えることができます。
耐久性についてもパイプラインは秀でています。パイプラインの実行途中でJenkinsが再起動してフローが停止してしまった場合でも、実行途中から再開することが可能です。1回の実行が長時間なフローの場合に特に効果を発揮するでしょう。
保守性という点でも優れています。パイプラインを実現するのは1つのJenkinsfileというスクリプトファイルであり、SCMでの管理が可能です。フリースタイルジョブと比較して保守性は格段に高くなります。
当然AntやMaven、Gradleといったビルドツールや、メール通知、外部スクリプトファイルの呼び出しといった従来のフリースタイルジョブで実現できていたことはすべて実行が可能です。これからJenkinsの活用を始める方はもちろん、フリースタイルジョブで書かれたジョブもどこかのタイミングでパイプラインに乗せ換えることを推奨します。
ただこのようにメリットのあるパイプラインですが、いままでブラウザ上で操作していたクラシックジョブからいきなりApache Groovyをベースにしたスクリプトファイルというとハードルを感じる方もいると思います。
それをサポートするのが次に紹介するJenkinsの公式プラグインであるBlue Oceanです。
Blue Oceanの利用
Blue Oceanとは
Blue OceanとはJenkinsの公式プラグインです。
https://www.jenkins.io/projects/blueocean/
Blue Oceanを利用することで宣言型パイプラインをグラフィカルに作成できます。パイプラインの実行内容や実行結果も視覚的にわかりやすなり、従来のクラシカルなUIとは異なった新しい体験をすることが可能です。
パイプラインは前述のとおりJenkinsfileというスクリプトを記載していく必要がありますが、Blue Oceanを利用することでGUIでパイプラインを作成することが可能です。そのため、Apache Groovy形式での記載が慣れていない方でもJenkinsfileの作成が可能です。
Blue Ocean内でコードエディタの利用も可能です。複雑な内容のパイプラインを作成するにはJenkinsfileを編集していく必要も出てきますが、ある程度Blue Oceanでパイプラインの全体像を整え、細かい部分についてのみ修正するといった利用も可能です。
Blue Oceanは実行結果を可視化することにも優れています。当然Blue Oceanを用いない場合でもクラシカルなUIで実行結果の確認はできるのですが、より可視化した状態で結果の確認が可能になります。問題が発生した場合にどこでどのような問題が発生しているのかの判断を容易にし、生産性を向上させます。
Blue Oceanは「Bitbucket Cloud」「BitBucket Server」「GitHub」「GitHub Enterprise」「Git」をサポートしており、Blue Oceanで作成したJenkinsfileは上記SCMで管理することが可能です。共同編集やレビューで効果を発揮します。
こういったメリットのあるBlue Oceanを利用してみましょう。
Blue Oceanの下準備
ここから実際にBlue Oceanを操作していくのですが、 Blue Oceanを用いるためにはGit等のSCMが必要です。
対応しているSCMは「Bitbucket Cloud」「BitBucket Server」「GitHub」「GitHub Enterprise」「Git」です。
いずれも利用でない方は簡単に利用が可能な「Gitea」をセットアップして進めます。 いずれかのSCMをご利用の方は読み進めてください。 上記以外のSCMのセットアップでも問題はありません。
1.Giteaのダウンロード
まずGiteaをダウンロードします。
https://dl.gitea.io/gitea/ (記載の2020/06/04時点は1.11.6がCurrent Releaseでした。)
gitea-1.11.6-windows-4.0-amd64.exe こちらをダウンロードします。
そのままでも起動できるのですが、同階層に管理用のフォルダを作成するため、C:\gitea フォルダを作成しその中に入れるのが良いでしょう。
この際に併せて C:\gitea\data フォルダも作成します。
2.Giteaの起動
ダウンロードし、exeを起動するとコマンドラインが立ち上がります。
この状態で http://localhost:3000/ に接続するとGiteaに接続できます。
3.Giteaの初期設定
初期設定が必要なため、次のように入力し進めます。
画面右上にある「サインイン」をクリックし設定を進めていきます。
初期設定画面が開きます。
今回はBlue Oceanが実行できればよいので、データベースのタイプを「SQLite3」にし、先ほどexeと同階層に作成したdataフォルダをパスに指定します。
他の設定値はデフォルトのままでも問題ありません。
ログイン画面が表示されるので、 「アカウントが必要ですか? 今すぐ登録しましょう」 を選択し、アカウントを作成しログインします。
その後、画面上部の[+]ボタンをクリックして、新しいリポジトリを作成します。
これでGiteaの下準備は完了です。
パイプライン構築
実際にBlue Oceanを操作していきます。
なお、Blue OceanはJenkins2.7以上である必要がありますので、それ以前のバージョンをご利用の方は2.7以上にバージョンアップしてください。
1. Blue Oceanプラグインのインストール
まず、Blue Oceanプラグインをインストールします。
https://plugins.jenkins.io/blueocean/
インストールが完了すると【Open Blue Ocean】というメニューが表示されます。こちらをクリックしてパイプラインを作成し始めましょう。
2. パイプラインの作成
画面が開いたら左上の[Create a new Pipeline]をクリックして新しくパイプラインを作成していきます。始めにSCMとの接続が求められるため、先ほど作成したSCMと連携させます。 [Git]を選択します。
リポジトリURLの入力とユーザー名、パスワードの入力が求められるので、先ほどGiteaで作成したリポジトリのURLを入力してください。今回はlocalhostで実行しているのでHTTPの入力で問題ありません。
登録が完了すると、このような画面が表示されます。
このそれぞれのポイントを選択していくことでパイプラインを作成していきます。
3. パイプラインの編集
まず+を選択してstageを作成します。名称を付けてください。
各stageには[+ Add step]を押下することでstep追加していくことが可能です。stepで実際に実行する内容を指定していきます。
このように画面上のGUIを操作していくだけで、パイプラインを構築することが可能です。
また、並列でのstageの追加も可能です。例えばブラウザごとのテストを実行するといった場合はこのように定義することが可能です。
実行結果の可視化
実行結果の可視化という点でもBlue Oceanは威力を発揮します。
例えばクラシカルなUIですと作成したStepは並列に並ぶだけですが、Blue OceanではそれぞれのStageにどういったStepがあるかといったことや、その実行結果が一目でわかります。
例えば複数ブラウザでのUIテストを実施し、IE11だけ異常終了した場合はこのように表示されます。
クラシカルなUIは以下のように表示されます。
一方Blue Oceanの場合、以下のように表示されます。
今回はシンプルなパイプラインですが、複雑になっていくにつれより威力を発揮していくことでしょう。
パイプラインの発展
このようにBlue OceanはGUIでパイプラインを構築していくことが可能となるツールです。 ただし、すべての機能をサポートしているわけではありません。各バージョンでサポートされた機能および計画されている機能の詳細については以下のリンクで確認ができます。
https://www.jenkins.io/projects/blueocean/
また、細かい部分については実際にGroovyスクリプトを書いたほうが簡単にできる事もあります。
デプロイ先を条件で変更することを考えてみましょう。Testブランチにコミットした場合はTest環境に、Stagingブランチにコミットした場合はStaging環境に、masterブランチにコミットした場合はProduction環境にそれぞれデプロイしたいとします。
こういった場合はwhenディレクティブを用いて実現させます。
このように記載すると、masterブランチにコミットした場合は[deploy]stageの中のdeployToProductionが実行され、以下のような実行結果になります。
まとめ
今回のブログではパイプラインとBlue Oceanについての説明をしました。パイプラインは従来のフリースタイルジョブと比較して以下のメリットがあります。
- 1つのジョブでCI/CDフローを表現できる。
- 条件分岐や並列実行といった、現実世界の複雑なCI/CDフローに関する要件をサポートしている。
- フローの途中で停止して人間の入力または承認を待機できる。
- ジョブ実行中にJenkinsが再起動しても実行を継続できる。
- SCMと連携が可能でメンテナンス性が高い。
ブログ内では例として記載しませんでしたが、ビルド結果を確認後にユーザー承認をもってデプロイを開始することや、複数環境に対して同じ内容をデプロイするための繰り返し実行、実行条件でのエージェントの変更といったさまざまなことに、柔軟に対応することが可能です。
まずはシンプルで問題ないので、パイプラインとBlue Oceanを少しづつ活用していただければと思います。
より深くJenkinsやパイプラインについて知りたい場合は、それぞれ講座の用意もありますので、ご利用いただければと思います。
こちらの講座は現在オンラインでも受講が可能です。
Jenkins 基礎:https://cloudbees.techmatrix.jp/jenkins-training/fundamentals/
Jenkins 管理-基礎:https://cloudbees.techmatrix.jp/jenkins-training/admin-fundamentals/
Jenkins パイプライン 基礎:https://cloudbees.techmatrix.jp/jenkins-training/pipeline-1/
Jenkins パイプライン 中級:https://cloudbees.techmatrix.jp/jenkins-training/pipeline-2/
Jenkins 基礎+管理セットコース:https://cloudbees.techmatrix.jp/jenkins-training/fundamentals-admin-set
Jenkins パイプライン 基礎+中級セットコース:https://cloudbees.techmatrix.jp/jenkins-training/pipeline-set/
また、従来のフリースタイルジョブをパイプラインに変更する方法はこちらのブログで紹介しております。
併せてご活用ください。
https://cloudbees.techmatrix.jp/blog/converting-a-freestyle-project-to-a-declarative-pipeline/