はじめに
こんにちは!ecbeing 2年目、R&Dグループの太田です。
普段は、新たなSaaSサービスの開発・保守に携わっております。
さて、ソフトウェア開発では テスト・ビルド・リリース といった、コーディング以外の作業も発生します。これらを自動化する開発手法として CI/CD といったキーワードを目にしたことが1度はあるのではないでしょうか。
そこで今回の記事では、CI/CDツールの1つである Azure Pipelines の概要について紹介します。
基礎知識
まずはCI/CDに関する基礎知識を簡単に解説していきます。
CI/CD
CI/CD は、テスト・ビルド・リリースを自動化するための開発手法 のことです。具体的には開発のライフサイクルを短くし、ソフトウェアの品質を高くするためにこのCI/CDを活用します。
CI/CD というキーワードは、それぞれ以下のことばの略称です。
- Continuous Integration (継続的インテグレーション)
ソースコードに変更が加わるたびに、自動的にビルド・テストを行う手法。 - Continuous Delivery (継続的デリバリー)
ビルド・テストが終わった成果物を、自動的にテスト環境や本番環境へデプロイする手法。
CI/CDによるメリット
ソフトウェア開発にCI/CDを導入することにより、以下のようなメリットがあります。
- 短いスパンでビルド・テストを繰り返すことで、バグを早期発見することができ、ソフトウェアの品質を高めることができる。
- テスト環境や本番環境へのデプロイを自動化することで、手作業をしていると発生してしまうミスを減らすことができる。
- ビルド・テスト・デプロイを自動化することで、開発のライフサイクルを短縮することができる。
Azure Pipelines
Azure Pipelines は、CI/CD を実現するためのツール の1つで、Azure DevOps の中で提供されているサービスです。
特徴
Azure Pipelinesには、以下のような特徴があります。
多くの言語・プラットフォームに対応している
Node.js、Python、Java、PHP、Ruby、C/C++、.NET、Android、iOS アプリ…などをビルド・テスト・デプロイすることが可能です。Azureとの親和性が高い
Azureの各サービスとの連携を行うためのテンプレートが用意されており、簡単に連携することが可能です。Azureを活用してサービスを開発している当社にはもってこいのツールです。Azure以外のクラウドサービスにも対応
Azure DevOps の中で提供されているサービスですが、AzureだけではなくAWSやGCPといった他のクラウドサービスにもデプロイすることが可能です。容易に拡張可能
ビルド・テスト・デプロイなどの各作業は タスク と呼ばれます。Azure Pipelines ではビルド・テスト・デプロイのタスクに加えて、コマンドラインを実行するタスク、作業が完了したらSlackに連携するタスク、など様々なタスクが用意されています。
Azure Pipelines の始め方
簡単に Azure Pipelines の始め方について解説していきます。
まず、Azure DevOps の画面より、左メニューの「Pipelines」>「Pipelines」を選択します。「Create Pipelines」を選択して、Pipelinesを作成します。(既にAzure Pipelinesを作成している場合は表示が異なります)
使用するリポジトリの種類を選択する画面に遷移するので、目的に応じて選択しましょう。 ここでは、Azure Reposを使用する前提で進めます。
Azure Reposのうち、どのリポジトリを利用するかを選択します。
選択したリポジトリに応じて適切な項目を選択すると Microsoftが用意したPipelinesのテンプレートを利用することができます。
Pipelinesを定義するYAMLファイルが表示されます。 「Save and run」を選択します。
特に設定を変更せず、そのまま「Save and run」を選択することでPipelinesの作成が完了します。 初期状態では、選択したリポジトリのmasterブランチにコミットするたびにPipelinesが走るようになっています。
.yml ファイルの構造
先程の手順で、リポジトリのルートディレクトリに azure-pipelines.yml
というファイルが作成されます。
このファイルが Pipelines の設定ファイルとなり、ビルド・テスト・デプロイの設定を記述していくことになります。
ちなみに、Azure Pipelinesには クラシックパイプライン(GUIでPipelinesを作成する)とYAMLパイプライン(コードでPipelinesを作成する)の2種類ありますが、YAMLパイプラインのほうが最新のため今回はYAMLパイプラインについて紹介しています。
この .yml
ファイル内では以下の概念に沿って、コードを書いていきます。ここでは、具体的なコードの記述については割愛させていただきます。
trigger
トリガーとよばれ、Pipelinesを実行する条件を定義する。ブランチ名を指定することで、指定したブランチにコミットが行われたときにPipelinesを実行する、という設定ができる。stage
,job
,step
それぞれステージ、ジョブ、ステップと呼ばれ、Pipelines上で実行する処理を整理する方法。 ステージの中に1つ以上のジョブを含めることができ、さらにジョブの中で複数のステップを含めることができる。task
各ステップで実行する最小の要素をタスクと呼ぶ。このタスクで、ビルド・テスト・デプロイなどの具体的なアクションを記述する。その他、ステージ・ジョブ・タスクそれぞれで
condition
オプションを付けることで実行条件(if文のようなもの)を設定することができる。
(使い方の例:develop
のブランチに対してPipelinesが実行されたときのみ、このタスクを実行する。別途フラグを用意し、このフラグがtrue
の場合にタスクを実行する。など)
▽参考
引用元:新しい Azure Pipelines ユーザー向けの主要な概念
エージェント
Azure Pipelinesでは、ビルド・テスト・デプロイを行うためのエージェントが必要となります。
自前で仮想マシンを用意し、エージェントとして利用する方法もありますが、Microsoftが予め用意した仮想マシン(Microsoft-hosted Agent)を無料で試用することができます。公開プロジェクトは10プロジェクト、非公開プロジェクトでは1プロジェクト・1800分/1ヶ月のビルドジョブを無料で使用可能です。
なお、Microsoft-hosted Agentはビルドに使うソフトウェアなどが事前にインストールされていますが、自前の仮想マシンを利用する場合は、あらかじめ必要なソフトウェアをインストールしておく必要があるというデメリットがあります。その反面、自前で仮想マシンを用意する場合、ソフトウェアやハードウェアの調整を細かく行うことができるというメリットもあります。
Pipelinesの実行
作成したPipelinesは、トリガーの条件によって動かすことも可能ですが、手動で(任意のタイミングで)実行することも可能です。
手動で実行するには、まずAzure DevOps の画面より、左メニューの「Pipelines」>「Pipelines」を選択します。作成したPipelinesの一覧が表示されるので、実行したいPipelinesを選択します。
Pipelinesの実行履歴が一覧で表示されます。
右上の「Run pipeline」を選択します。
Pipelinesを実行するための設定が出てきます。
詳細は割愛しますが、「Branch/tag」で適切なブランチを選択して
右下の「Run」を選択すると、Pipelinesが実行されます。
実行履歴の確認
先程の「Pinelinesの実行」内で表示した「Pipelinesの実行履歴が一覧で表示」されている画面を表示します。表示したい実行履歴を選択します。
その回のPipelinesの実行履歴が表示されています。
何時に、誰が、どのリポジトリの、どのブランチで、Pipelinesを実行したという情報が細かく書かれています。
また、各ジョブごとに履歴が表示されます。
「Jobs」の中から、試しにジョブを1つ選択します。
各ジョブ、ステップについて細かく実行履歴を見ることができます。
また、この画面はPipelinesが実行されている途中で開くと、
どこまで処理が進んでいるかをリアルタイムで確認することができます。
おわりに
さて、今回の記事では CI/CD の説明からはじめ、Azure Pipelinesの概要と実行方法を簡単に紹介しました。
自分のチームでは実際にこの Azure Pipelines を活用し、開発環境・テスト環境・本番環境へのビルド・テスト・デプロイを自動化しています。今では開発に欠かせないツールの1つとなっています。
また、自分も2年目ながらプロダクトのリリースに関わる Azure Pipelines の作成などに携わっており、自分が製造したプロダクトが世にはばたくのを、身をもって実感することができています。エンジニアとしてはモノを作って終わりではなく、使ってもらってこそ、悦びが見出だせるのではないでしょうか。
もちろん、Azure Pipelinesを学習・作成するコストはかかりますが、長期的に見ればビルド・テスト・デプロイの手間が省け、人為的なミスを減らすことができるので、使って損ということは無いと思います。
また、今回は Azure Pipelines についてご紹介しましたが、インフラの構築をコードで実行する Terraform についても以前紹介していますので、是非合わせてお読み下さい。
Azure Pipelines について、具体的な活用方法等は機会があれば別の記事にて紹介しようと思います。
この記事が「いいね!」と思った方は是非ブックマーク、読者登録をよろしくお願いします👍
お知らせ
ebeingではCI/CDツールを使いこなして、ナウい開発がしたい人を募集してます! careers.ecbeing.tech