Jenkinsによる CI/CDテンプレート: Azure版の利用方法解説
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
はじめに
今回紹介しているテンプレートは、Jenkinsのパイプラインジョブであり、Azure上でVMイメージを作成し、VMをデプロイするテンプレートです。このテンプレートを作成して公開に踏み切った切っ掛けは、あるプロジェクト体験からです。Jenkinsを司令塔とするCI/CDの導入に筆者も当事者として参加していたわけですが、正直にかなり心配でした。しかしながら、時間の経過とともに加速が付き、最終的には見事に運用にまで運ばれました。大成功と言ってもいい結果でした。成功の要因は、いくつか挙げる事ができますが、筆者が最も注目したのは、ちゃんと構成され、正確に動いているテンプレートの存在です。よく、Jenkinsの導入は敷居が高いというネガティブな評判が付きまとっているなか、「100ページの説明よりも、1本の実戦的なテンプレートのほうが勝る」と言ったところです。その後、これは素晴らしいという気持ちで基本的な構成をAzure版として再現してみました。それがこのテンプレートです。色んなものが凝縮されています。おそらく、ちょっと拡張すれば、そのまま実務に利用できるでしょう。このテンプレート利用においては、特に制限などありません。ただ、技術的な中身については、クリエーションライン社及び著者が保証するものではありません。自己責任の下でご利用お願いします。
Jenkinsテンプレートの基本構成
下の図は、公開しているテンプレートの基本構成です。Packer(Ansible+Serverspec)でVMイメージを作成し、TerraformでAzureにデプロイする構成になっています。実行結果は、#slackに通知されます。ここで、それぞれの実行環境の実装やジョブの管理など、司令塔の役割を果たしているのがJenkinsです。
今回のテンプレートは、次のように2つのフェーズに分けて運用する想定で構成しています。
フェーズ1:VMイメージ作成
- Packer(Ansible+Serverspec)でコードを書きます。
- Jenkinsfileを作成します。
- コードをGitlabにPUSHします。
- JenkisにGitlabのURL及び認証情報などを含むジョブを登録します。
- JenkinsのGUIでジョブを実行すると、Gitlabから一式のファイルをJenkinsサーバにウンロードして実行します。
- Azure上で一時的なVMを起動し、プロビジョニングを行います。
- プロビジョニングが完了すると、Azure上にVMイメージとして登録します。
- 一時的なVMを含むすべての作業環境を削除します。
- 作業完了ステータスを#slackに通知します。
Jenkinsジョブの裏側では、次のように動いています。
フェーズ2:VMデプロイ
- フェーズ1に作られたVMイメージのURIをTerraformコードに反映します。
- Jenkinsfileを作成します。
- コードをGitlabにPUSHします。
- JenkisにGitlabのURL及び認証情報などを含むジョブを登録します。
- 既に該当のVMが存在する場合は、ターミネートします。
- JenkinsのGUIでジョブを実行すると、Gitlabから一式のファイルをJenkinsサーバにダウンロードして実行します。
- Azure上にVMを起動します。
- 作業完了ステータスを#slackに通知します。
Jenkinsジョブの裏側では、次のように動いています。
Jenkinsテンプレートの拡張
今回のテンプレートは、一度、Jenkinsジョブを動かすまで頑張れば、用途に応じてコード追加し、簡単に拡張できます。
Dockerコンテナーの起動
次は、コンテナーを起動する場合のイメージです。
ソースコードのチェック
次は、プログラムのソースコードをチェックしたい場合のイメージです。
スケジュールジョブの運用
バックアップなどスケジュールジョブ実行も簡単に追加できます。
モニタリングの実装
商用版のリリースが近づいてくると、VMイメージにモニタリング構成を仕掛けてVMを置き換えます。
全方位的なCD/CDの実装
究極的には、アプリケーションとインフラを区別することなく、すべてコード化して管理します。
Jenkinsテンプレートのソースコード及び利用方法
Jenkinsテンプレートのソースコードは、Gitlabに公開しています。
Jenkinsテンプレートの利用方法は、スライドシェアに公開しています。