Azure Pipelines について理解する

完了

"パイプライン" を使用して、デプロイ プロセスの各ステップを自動化できます。 コードに変更を加え、その変更を Git リポジトリにコミットするたびに、パイプラインによって定義済みのプロセスが実行されます。 パイプラインでは、Bicep コードが品質基準を満たしていることを確認でき、その後リソースを Azure にデプロイするステップが自動化されます。 このプロセスは、ユーザーが作成する "パイプライン定義" によって定義されます。

Azure Pipelines は、Azure DevOps サービスの機能です。 Azure DevOps には Azure Repos も含まれています。これによって、コードを格納してコラボレーターと共有するために使用する Git リポジトリがホストされます。 Bicep コードを Git に格納すると、Azure Pipelines でそのコードにアクセスし、デプロイ プロセスを自動化できます。 このユニットでは、Azure Pipelines について学習します。

パイプラインとは

パイプラインは、構成ファイルで定義された、コードのテストとデプロイに使用する反復可能なプロセスです。 パイプラインには、実行するすべてのステップとその順序が含まれています。

Azure Pipelines を使用する場合は、YAML ファイルでパイプラインを定義します。 YAML ファイルは構造化テキスト ファイルです。これは Bicep が構造化テキスト ファイルであるしくみに似ています。 任意のテキスト エディターを使用して YAML ファイルを作成および編集できます。 このモジュールでは、Visual Studio Code を使用します。 Visual Studio Code には、Azure DevOps YAML パイプライン ファイルの編集を容易にする拡張機能が用意されています。 また、Azure DevOps Web インターフェイスにも、パイプライン YAML ファイルの表示と編集に使用できるいくつかのツールが用意されています。

Note

Azure Pipelines には、以前のバージョンのパイプライン機能である "クラシック パイプライン" が含まれています。 YAML ベースのパイプラインによってクラシック パイプラインが置き換えられました。 このモジュールでは、YAML パイプラインのみについて説明します。 YAML パイプラインを使用することをお勧めします。

パイプライン YAML ファイルはコード ファイルなので、このファイルは Bicep コードと一緒に Git リポジトリに格納されます。 Git の機能を使用して、パイプライン定義に対して共同作業を行います。 コミットとブランチを使用して、異なるバージョンのパイプライン ファイルを管理できます。 今後のモジュールでは、"テンプレート" などのその他の高度なパイプライン機能についても学習します。 テンプレートを使用すると、パイプライン定義を簡単に再利用できます。

エージェントとプール

これまでは、ローカル コンピューターから Bicep ファイルをデプロイしてきました。 Bicep テンプレートを作成した後は、Azure CLI または Azure PowerShell を使用してこれを Azure にデプロイします。 これらのツールでは、お使いのコンピューターのリソースを使用して Azure にテンプレートを送信します。 お客様の個人の ID を使用して Azure に対する認証が行われ、お客様がリソースをデプロイするアクセス許可を持っていることが確認されます。

パイプラインには、デプロイ ステップを実行できるように、コンピューターへのアクセスも必要です。 Azure Pipelines では、"エージェント" と呼ばれるコンピューターが使用されます。 エージェントは、パイプラインのデプロイ ステップを実行するように構成されたコンピューターです。 各エージェントには、以前のモジュールで使用した Bicep ツールと Azure ツールが既に備わっています。そのため、ご自分のコンピューターから実行するのと同じ操作を実行できます。 ユーザーがコマンドを実行する代わりに、Azure Pipelines サービスによって、YAML ファイルで定義したステップを実行するようエージェントに指示が出されます。

Azure Pipelines には、Ubuntu や Windows など、さまざまなオペレーティング システム用の複数の種類のエージェントと、ツールの各種セットが用意されています。 Microsoft によってこれらのエージェントが実行されます。そのため、お客様がエージェントのコンピューティング インフラストラクチャを管理する必要はありません。 エージェントは、お客様に代わってホストされるため、"Microsoft ホステッド エージェント" または "ホステッド エージェント" と呼ばれる場合があります。 パイプラインを実行すると、ホステッド エージェントが自動的に作成されます。 パイプラインの実行が完了すると、ホステッド エージェントは自動的に削除されます。 ホステッド エージェントに直接アクセスすることはできません。そのため、ソリューションをデプロイするために必要なすべてのステップがパイプラインに含まれていることが重要です。

"エージェント プール" には、同じ種類の複数のエージェントが含まれています。 パイプラインを作成する際、ステップの各セットの実行に使用するエージェント プールを Azure Pipelines に指示します。 パイプラインが実行されるときは、プールからのエージェントが使用可能になるのを待ってから、デプロイ ステップを実行するようそのエージェントに指示します。 お客様のパイプラインを実行するために、プール内のどのエージェントが割り当てられる可能性もあります。

Diagram that shows a pipeline that runs on an agent within an agent pool.

Note

"セルフホステッド エージェント" と呼ばれるカスタム エージェントを作成するオプションがあります。 パイプラインの一部として実行する必要がある特定のソフトウェアがある場合、またはエージェントの構成方法を正確に制御する必要がある場合は、セルフホステッド エージェントを作成できます。 このモジュールではセルフホステッド エージェントについて説明しませんが、「まとめ」に詳細情報へのリンクが用意されています。

トリガー

パイプラインを実行する "タイミング" を Azure Pipelines に指示するには、"トリガー" を作成します。 複数の種類のトリガーから選択できます。 ここでは、"手動トリガー" を使用します。 パイプラインの実行を開始するタイミングを手動で Azure Pipelines に指示します。 他の種類のトリガーについては、このモジュールで後ほど詳しく学習します。

Diagram that shows a trigger initiating a pipeline.

手順

"ステップ" は、パイプラインで実行する 1 つの操作を表します。 ステップは、Bash や PowerShell で実行する個々のコマンドに似ています。 ほとんどのデプロイでは、複数のステップをシーケンスで実行します。 パイプライン YAML ファイルで、シーケンスと、各ステップの全詳細を定義します。

Azure Pipelines には、次の 2 種類のステップがあります。

  • Scripts。 スクリプト ステップを使用すると、Bash、PowerShell、または Windows コマンド シェルで、1 つのコマンド、またはコマンドのシーケンスを実行できます。
  • タスク。 タスクは、スクリプト ステートメントを記述せずにさまざまな機能にアクセスする便利な方法です。 たとえば、組み込みタスクでは、Azure CLI と Azure PowerShell のコマンドレットを実行してコードをテストしたり、FTP サーバーにファイルをアップロードしたりできます。 だれでもタスクを作成し、他のユーザーと共有することができます。それには、Visual Studio Marketplace でタスクを公開します。 多数の商用およびオープンソースのタスクを使用できます。

一部のユーザーは、組み込みタスクの代わりにスクリプト ステートメントを使用することを好みます。実行内容をより細かく制御できるからです。 スクリプトの記述と管理が不要なため、タスクを使用することを好むユーザーもいます。 このモジュールでは、両方の方法を組み合わせて使用します。

ジョブ

Azure Pipelines において、"ジョブ" は、ステップの順序付けされたセットを表します。 パイプラインには常に少なくとも 1 つのジョブがあり、複雑なデプロイを作成するときは、複数のジョブを使用するのが一般的です。

Note

各ジョブを異なるエージェント プールで実行するように設定できます。 異なるエージェント プールでのジョブの実行は、ジョブ パイプラインの異なる部分で異なるオペレーティング システムを使用する必要があるソリューションをビルドしてデプロイする場合に便利です。

たとえば、iOS アプリと、そのアプリのバックエンド サービスをビルドするとします。 macOS エージェント プールで実行する 1 つのジョブを使用して iOS アプリをビルドし、Ubuntu または Windows エージェント プールで実行するもう 1 つのジョブを使用してバックエンドをビルドすることができます。 2 つのジョブを同時に実行するようパイプラインに指示し、パイプラインの実行を高速化することもできます。

このモジュールでは全体を通して、パイプライン定義ファイルのルートでエージェント プールを宣言します。そのため、パイプライン内のすべてのジョブで同じエージェント プールが使用されます。

Diagram that shows a pipeline with two steps, both within one job.

Note

また、Azure Pipelines の "ステージ" を使用してパイプラインを論理フェーズに分割し、パイプラインの実行の各時点で手動チェックを追加することもできます。 ステージの詳細については、今後のモジュールで学習します。

基本的なパイプラインの例

これで Azure Pipelines の基本的な概念がわかったので、YAML のシンプルなパイプライン定義を見てみましょう。

trigger: none

pool:
  vmImage: ubuntu-latest

jobs:
- job:
  steps:
  - script: echo Hello, world!
    displayName: 'Run a one-line script'
  
  - script: |
      echo We'll add more steps soon.
      echo For example, we'll add our Bicep deployment step.
    displayName: 'Run a multi-line script'

このファイルの各部分を詳しく見てみましょう。

  • trigger では、パイプラインを実行するタイミングを指示します。 このケースでは、trigger: none によって Azure Pipelines に、パイプラインを手動でトリガーすることを指示しています。
  • pool では、パイプラインのステップを実行する際にどのエージェント プールを使用するかをパイプラインに指示します。 この例では、パイプラインは Ubuntu オペレーティング システムを実行しているエージェント上で実行されます。これは、Microsoft ホステッド エージェントのプールから取得されます。
  • jobs によって、パイプライン内のすべてのジョブをグループ化します。
  • job では、1 つのジョブを使用することをパイプラインに伝えます。

    ヒント

    パイプラインにジョブが 1 つしかないときは、jobs キーワードと job キーワードを省略できます。 ここでは、パイプラインで各概念が連携するしくみを明確にするため、job を含めています。

  • steps には、ジョブで実行する各アクションのシーケンスを記載します。 この例の YAML には、2 つのステップが含まれています。 どちらのステップでも、何らかのテキストをエコーするシンプルなスクリプトが実行されます。 各ステップには displayName 値があります。これは、人が判読できるステップの名前です。 この表示名は、パイプライン ログを表示したときに確認できます。 複数行のスクリプト ステップを作成するには、例に示すようにパイプ文字 (|) を使用します。 ステップが実行されると、パイプライン ログにその出力が表示されます。

重要

YAML ファイルではインデントが重要になります。 例の YAML を見てみましょう。 この YAML の一部の行は、2 つまたは 4 つのスペースでインデントされています。 使用するスペースの数は重要です。 ファイルを正しくインデントしないと、Azure Pipelines で解釈できません。 Visual Studio Code は、YAML ファイルのインデントの誤りを見つけて修正するのに役立ちます。