Jenkinsによる CI/CDテンプレート: Azure版の利用方法解説
★ 4
はじめに
今回紹介しているテンプレートは、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テンプレートの利用方法については、こちらを参照してください。
Related post
- 2018年1月11日〜13日に開催されるRegional Scrum Gathering Tokyo 2018のスポンサーになりました。
- [和訳] Test Kitchen: 開発のフィードバック工場 #getchef
- マイクロソフトさまとアドバンスドDevOpsハッカソンを開催しました #DevOpsJP
- Neo4j公式の言語ドライバー(Bolt)によるプログラミング #neo4j
- Neo4j Docker版を動かしてみました #neo4j
Popular ranking
- View
- AWS Azure IoT
AWS と Azure と Raspberry Pi (ラズパイ) で IoT してみた (1) #raspi #aws #azure
2017.05.11
- softlayer
ソフトウェアルータVyattaとVyOSを用いてSoftLayerとオフィスをIPsec VPN接続する #softlayer
2014.07.14
- neo4j
Cypher Query Language(QL)-初級編 #neo4j
2015.03.08
- Elastic
elasticsearchでノード障害が起きたときの動作 #elastic
2017.02.03
- Docker Rancher
Rancherサーバーの起動からコンテナ作成まで #docker #rancher
2015.04.24