ソフトウェアの開発手法として、開発チーム(Development) と運用チーム (Operations) が連携して、カイゼンのサイクルを繰り返しながらビジネス価値を高める「DevOps」が注目されています。
また、その考え方にしたがって、プログラマーが品質向上や納期短縮を重視する「継続的インテグレーション(CI:Continuous Integration)」、ソフトウェアのビルドやテストを含めてリリースを自動化する「継続的デリバリー(Continuous Delivery)」も重視されるようになりました。
このような開発手法が登場した背景には、変動の激しい時代において、ソフトウェアのリリースを効率化と迅速化することがビジネスの成功の決め手になる現状があります。そこでソフトウェア開発には、自動化をうまく取り入れることが重要になります。この自動化を実現する技術のひとつが「パイプライン」です。
「Azure Pipelines」は、Azure DevOps Servicesのソリューションにおいて、あらゆる言語やプラットフォームで、ビルド、テスト、デプロイを自動化する役割を担います。
ここでは、Azure Pipelinesの概要、料金体系、そして構文サンプルを解説します。
Azure Pipelinesで実現できること
Azure Pipelinesのメリットを解説する前に、まず「パイプラインとは何か?」ということを簡単にまとめます。
パイプラインは、もともとコンピュータで高速処理をする方法でした。ひとつの処理の結果が次の処理の入力になるように、処理すべき要素を直列に配置することです。このパイプラインを並行させたり、時間で分断させたりすることによって、処理を高速化します。
この考え方を応用して、開発の一連の作業をつないで自動化して、ソフトウェア開発の効率化と迅速化を実現することがDevOpsにおけるパイプラインであり、AzureではAzure Pipelinesの機能になります。
Azure Pipelinesには次のようなメリットがあります。
多様な言語、プラットフォーム、クラウドに柔軟に対応して管理を簡略化
Linux、macOS、Windowsにホストして、ソフトウェアの実行を並行させることができます。利用言語としてはNode.js、Python、Java、PHP、Ruby、C/C++、.NETがあり、Androidおよび iOS アプリのビルド、テスト、デプロイも可能です。Azureに限らず、AWS(Amazon Web Services)やGCP(Google Cloud Platform)など、任意のクラウドに継続的デリバリー(CD)を実装できます。
Microsoftのクラウドホステッドエージェントを使うことにより、主要なプラットフォームとツールに対応した CI/CDパイプラインをすべてサポートします。このことにより、ハードウェアと仮想マシン(VM)の管理を簡略化できます。
コンテナーオーケストレーションとしてオープンソースのKubernetes、仮想マシン、Azure Functions、Azure Web Appにもデプロイできます。ビジネス展開に最適なデプロイ戦略にしたがって、開発と運用のクオリティを高めます。Javaによるオープンソースの継続的インテグレーションの自動化ツールであるJenkinsからデプロイすることも可能です。
オープンソースを重視、 コンテナーの利用、高度なワークフローと拡張性
Kubernetes やJenkinsの例をあげたように、MicrosoftはAzureのオープンソースソフトウェア(OSS)との連携に注力しています。管理者や開発者がオープンソースの利用で培ったスキルを発揮できる環境を整備し、負荷軽減とコスト削減をめざしています。
無料かつビルド時間無制限の並列ジョブが提供され、すべてのオープンソース・プロジェクトにおける継続的インテグレーションと継続的デリバリー(CI/CD)の パイプラインを利用できます。SlackやSonarCloudなどから拡張機能を探して、コミュニティのメンバーによって構築されたビルド、テスト、タスクなどを実装できる拡張性も備えています。
Azure Pipelinesはコンテナーと必要なツールを使って、一貫性があり信頼性の高いビルドを実現します。イメージファイルから新しいコンテナーを簡単に作成するとともに、Docker HubやAzure Container Registryなどのコンテナーレジストリにプッシュできます。コンテナーを個々のホストやKubernetes にデプロイすることも可能です。
スナップショットの依存関係で相互接続された一連のビルドと、複数のフェーズのビルドを利用できます。構造化データのフォーマットである「YAML」、テストの統合、リリースの条件を外部ツールの値で設定できる「リリースゲート」、レポートなどのサポートも特長です。
Azure Pipelinesを開始するには
Azureのアカウントを既に持っている場合は、そのままサインインできます。また、GitHubを利用して開始することも可能です。
次の3つの使い方と料金体系があります。
オープンソースプロジェクト |
無料並列ジョブ:1 毎月の時間制限:なし |
MicrosoftホステッドCI/CD |
無料並列ジョブ:1 毎月の時間制限:1か月あたり最大1,800分 有料の追加ジョブ:追加並列ジョブごとに¥4,480 |
セルフホステッドCI/CD |
無料並列ジョブ:1 毎月の時間制限:なし 有料の追加ジョブ:追加並列ジョブごとに¥1,680 |
Azure Pipelinesのメニュー
具体的な機能として、Azure Pipelinesには以下のようなメニューと機能があります。
Builds |
ハードウェアの環境を準備して必要なライブラリをインストールし、ソースコードでビルドします。単体テスト、結合テストを自動化して実行します。 |
Release |
AzureのWeb Appsを作成し、Buildsで作成した生成物を展開します。 |
Library |
アプリケーションを展開する際に、値を登録する機能です。 |
Task groups |
同じ設定を何度も書き込む場合、変更が生じた際の展開もれを回避するためにタスクをTask groupsに登録して、すべての環境で流用します。Task groupsに対する変更はすべてのBuildsやReleasesに反映されます。 |
Deployment groups |
複数の仮想マシンにリリースする場合に、グループで登録できます。Deployment groupsに対するタスクは、一括してリリースできます。 |
Azure Pipelinesの構文について
Azure Pipelinesでは処理を構文で記述しますが、「変数(Variables)」と「トリガー(Trigger)」をサンプルとして取り上げます。
変数(Variables)
変数を使うと、データの重要な部分をパイプライン処理に取り込むことが可能です。実行ごと、ジョブごとに変数の値は変わることがあります。テキストによる文字列や数値を必要とする場合、実行中に変数を現在の値に置換します。
Azure Pipelinesの変数に関する構文は、マクロ式、テンプレート式、ランタイム式の3つをサポートしています。それぞれ異なる目的に使用することが可能ですが、以下のような制限があります。
マクロ式の変数
ランタイム時に処理され、パイプライン定義の値(右側)で展開されます。置換値がみつからない場合は「prints $(var)」として表示されます。
テンプレート式の変数
コンパイル時に処理され、パイプライン定義のキーまたは値(右側もしくは左側)で展開されます。置換値がみつからない場合は、空白の文字列で表示されます。
ランタイム式の変数
ランタイム時に処理され、パイプライン定義の値(右側)で展開されます。置換値がみつからない場合は空白の文字列で表示されます。
トリガー(Trigger)
4種類のトリガーを構成して、Azure Pipelinesを自動的に実行します。
CIトリガー
継続的インテグレーション(CI)のトリガーです。指定された分岐を記録したブランチにプッシュ、または指定したタグがプッシュされるたびにパイプラインを実行します。
PRトリガー
プルリクエスト(PR)トリガーのことです。指定されたブランチのいずれかでプルリクエストが開かれたとき、あるいはプルリクエストに変更がプッシュされたときにビルドを実行します。
スケジュールされたトリガー
「毎日午前0時にパイプラインを実行する」など、曜日や時間をトリガーにしてパイプラインを実行します。Azure Pipelinesリソースの誤用を防ぐために、パイプラインを1日で実行する頻度には一定の制限があります。
パイプライントリガー
大規模なアプリケーションの場合、いくつかのコンポーネントが相互依存した状態にあります。一般的に、このようなコンポーネントは独立して構築され、ライブラリの変更にともなって、依存関係の再構築や検証が必要になります。このような場合、追加したトリガーパイプラインが正常に完了したときにパイプラインを実行します。
まとめ:Azure PipelinesでDevOpsの自動化を推進
DevOps、CI/BIにおいて、Azure Pipelinesなどの自動化ツールは重要です。Azure DevOpsには、その他にもソフトウェア開発を迅速化するソリューションがあります。