【CI奮闘記】第8章:Jenkinsは何が得意なの?


はじめに

前回のブログでは、Amazon EC2のWindows ServerをJenkinsのエージェントとして利用する方法について説明しました。
前回のブログはこちら
今回は、「Jenkinsは何が得意なのか」「そもそもJenkinsってどういったことができるのか」という事について説明します。

登場人物

吉田:転職したてのエンジニア。前職では積極的にCIやCDという事に取り組みながら開発をしていた。

服部:配属1年後の新人。CIやJenkinsについては言葉は聞いたことがある程度。もともと開発で今回初めて環境周りを扱う事になった。

Jenkinsは何が得意なの?

これまでいろいろJenkinsを使う下準備をしてきたわね。
これからJenkinsを使って環境を構築していくんだけど、Jenkinsって何ができるか知ってる?

それがなんとなくしかわからなくて。
Jenkinsで検索しても
「CI/CDを実現するためのツール」「ソフトウェアのリリーススピードの向上」「開発プロセスの自動化」「開発コストの削減」
といったことが出てくるので、「自動化」をするツールという事はわかるんですが、具体的にどういったことができるかがいまいちわからないんです。

確かにJenkinsのできることの結果としてそういったことが実現できるわね。
あとJenkinsはいろいろなことができるから、今回は利用者目線で代表的な機能を3点に絞って説明するわね。

プログラムやスクリプトの実行

まずJenkinsの機能として挙げられるのはプログラムやスクリプトの実行だと思う。

プログラムというとJavaとかそういったプログラムですか?

Javaだけに限らないわ。
Javaをビルドするためのmavenやgradleを実行することもできるし、exeファイルの実行だったり、バッチスクリプトの実行もできるの。

ということはバッチファイルで実行できるものであればJenkinsからも実行できるということですね。

エージェントのマシンで実行できるプログラムやスクリプトであれば基本的になんでも実行することができるわ。
単純に実行するだけでなくて、次のような条件での実行をすることができるのが便利なところね。

定期的やスケジュールでの実行

毎朝10時に特定のプログラムを実行。といったように時間を決めて実行することができます。
日付指定や曜日指定もできるので、「毎週土曜日の深夜に実行する」といった夜間バッチの実行に利用することも可能です。

トリガーによる実行

プログラムの実行に関して、トリガーによる実行も可能です。
良く活用される例としては「SCMのソースコードが変更されたら」という条件のトリガーを設定し、SCMにソースコードがコミットされたタイミングでビルドを実行するといった事例になるかと思います。
また、「特定のプログラムの実行が完了したら」次のプログラムを実行するというトリガーを組む事も可能です。

Jenkinsの設定画面抜粋

プログラムの実行履歴の保持

例えばJavaのビルドのようにビルド生成物ができる場合、その生成物を実行履歴として保持することが可能です。
これはビルドに限った話ではなく、テスト結果のxmlファイルであったり、プログラムやスクリプト実行時のログといったものを保持することが可能です。

ワークフローの定義

ただプログラムやスクリプトを実行するだけでなく、プログラムの実行をワークフローとして定義することができるのもJenkinsのいいところね。

順序付けて実行することができるんですね。

例えば「ビルドを実行する」というプログラムの後に「ビルドの成果物をデプロイする」というものを実行するといったことができるわ。

リリース当初のJenkinsはこのワークフローの機能が苦手でしたが、Jenkinsのバージョン2.0以降に登場したパイプラインという機能によって、劇的にプログラムのフローの定義がしやすくなりました。
パイプライン登場以前は「Aの後にBを行う」という単純なフロー定義しかできませんでしたが、パイプラインによって、条件分岐や並列実行、入力待機といったような複雑な条件でのワークフローを定義することができるようになりました。
パイプラインの登場により、これまで以上に「CI/CDを実現するためのツール」としてJenkinsが活躍できるようになりました。
具体的な詳細については、パイプラインの説明時に記載します。

通知

ただ実行するだけでなくて、プログラムやスクリプトの実行に併せて通知を行うことができるのもJenkinsのいいところね。

通知というとメール通知とかですか?

メールはもちろん、Microsoft TeamsやSlackといったチャットツールに対して通知を行うことが可能よ。

それは便利そうです。デプロイが終わったタイミングでチャットツールに通知が来れば手動テストもスムーズに実行できますね。

それ以外にもRedmineやAtlassian Jiraといった課題管理ツールとの連携も可能ね。

Jenkinsの画面からRedmineのチケットに遷移ができれば
・Jenkinsから実行した自動テストが正常終了していることを、Jenkins上で確認。
・JenkinsからRedmineのチケットに遷移してステータス更新。
という事もスムーズにできそうですね!

ここで紹介したツール以外にも連携は可能です。
どのツールと連携できるかについては、Jenkins側というよりも、通知を受けるツール側で受ける口があるかどうかに依存する場合が多いです。
プログラムが実行されたかといったことや、プログラムの実行結果に応じて通知を行うことができます。

また弊社取り扱い製品として、Redmineをより便利に活用できる拡張プラグイン「Lychee Redmine」がございます。
現在Redmineをご利用で「もう少し便利に使いたい」という方はぜひご確認いただければと思います。

まとめ

Jenkinsができることとして今回3つ挙げました。
Jenkinsはツールとしての歴史が長い事もあり、できることを上げればきりがありませんが、まず主にできることとしてこの3点を抑えておけばイメージしやすいかと思います。
この3つの機能を組み合わせて「CI/CD環境の実現」であったり、「ソフトウェアのリリーススピードの向上」を実現しています。

CI/CDを実現した際のメリットは以前のCI奮闘記で記載しているので併せてご確認いただければと思います。

これ以外にも豊富なプラグインによる機能拡張もJenkinsは得意です。

また、Jenkinsのプログラムやスクリプトを実行するという特性上セキュリティについて意識する必要があります。Jenkinsの機能としての「セキュリティのための権限制御」はもちろん、JenkinsのセキュリティチームがJenkins全般のセキュリティを改善するため継続して活動しています。
Jenkins Security のページを参照ください。

また、実運用上ではSCMと連携することが多いと思いますが、SCMとの連携においても便利な機能があります。これからのCI奮闘記でも登場しますので乞うご期待です。

次回は実際にジョブを作成していきます。

CI奮闘記一覧