Azure PipelinesのトリガーにGitのタグを使用する方法

こんにちは。MLBお兄さんこと松村です。
前回に引き続き、Azure DevOpsネタです。

アプリケーション開発を行ううえで、ビルドやテスト、デプロイなど、いわゆる継続的インテグレーションに含まれる定期的な作業は自動化している人が多いと思います。(なるべく自動化しましょうね?)
KOSMISCHの開発でもビルドやテスト、デプロイといった作業は自動化しており、Azure Pipelinesを使っています。
azure.microsoft.com

Azure Pipelinesにもいくつか機能があり、作業によって使い分けをします。

機能 用途
Pipelines ビルド等の自動化作業を定義する(Continuous Integration/CI)
Environments アプリケーションをデプロイするリソースのコレクション(参考
Releases デプロイの自動化作業を定義する(Continuous Deployment/CD)
Library 機能間で共有する変数やファイルを定義する(参考
Task groups ビルドやリリースのパイプラインに再利用可能な一連のタスクを定義する(参考
Deployment groups エージェントがインストールされているデプロイ先の環境(端末)を定義する(参考

f:id:tech-tsubaki:20200315150831p:plain


今回はCIのトリガーとして「特定のGitのタグがプッシュされたとき」という条件を付与する設定を紹介します。

docs.microsoft.com

YAMLで定義する場合

以下の手順でパイプラインの作成画面にアクセスします。

  1. Azure DevOpsのプロジェクトにアクセスする
  2. 左メニューの Pipelines > Pipelines をクリックする
  3. Create Pipeline をクリックする
  4. Azure Repos Git を選択する
  5. Gitリポジトリを選択する
  6. パイプライン構成として Starter pipeline を選択する(今回は特定のプログラミング言語のアプリケーションではないためStarter pipelineを選んでますが、目的に応じた構成を選びましょう)

f:id:tech-tsubaki:20200322155530p:plain f:id:tech-tsubaki:20200322155546p:plain f:id:tech-tsubaki:20200322155619p:plain f:id:tech-tsubaki:20200322155639p:plain

ここまで進むとパイプラインを定義するためのYAMLファイルの編集画面に到達します。こちらは初期状態のYAMLの構成です。

# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

steps:
- script: echo Hello, world!
  displayName: 'Run a one-line script'

- script: |
    echo Add other tasks to build, test, and deploy your project.
    echo See https://aka.ms/yaml
  displayName: 'Run a multi-line script'

Gitタグのプッシュをトリガーとする場合はtriggerブロックの中にtagsブロックを作成します。
includeブロックに書いた形式がトリガーの対象となります。逆にトリガーとしたくないタグはexcludeブロックに定義します。
タグ名は固定値で指定する以外にアスタリスクを使ったワイルドカードも指定することができます。

origin/masterブランチをトリガーとする場合

trigger:
- master

hogeという名前のタグをトリガーとする場合

trigger:
  tags:
    include:
      - hoge

「v」から始まるタグをトリガーとする場合(v1など)

trigger:
  tags:
    include:
      - v*

previewという階層のタグをトリガーとし、releaseという階層のタグはトリガーとしない場合

trigger:
  tags:
    include:
      - preview/*
    exclude:
      - release/*

GUIで定義する場合

以下の手順でパイプラインの作成画面にアクセスします。

  1. Azure DevOpsのプロジェクトにアクセスする
  2. 左メニューの Pipelines > Pipelines をクリックする
  3. Create Pipeline をクリックする
  4. Use the classic editor をクリックする
  5. Gitリポジトリを選択する
  6. テンプレートとして Empty job を選択する(YAMLのとき同様、目的に応じた構成を選びましょう)

f:id:tech-tsubaki:20200322155530p:plain f:id:tech-tsubaki:20200322163548p:plain f:id:tech-tsubaki:20200322164713p:plain f:id:tech-tsubaki:20200322164724p:plain

以下の手順でトリガーを設定します。

  1. Triggers タブにアクセスする
  2. Enable continuous integration にチェックを入れる
  3. Branch filters > Branch Specification に refs/tags/{タグ名} を入力して Enter キーを押す

f:id:tech-tsubaki:20200322164739p:plain f:id:tech-tsubaki:20200322163651p:plain

タグ名にはYAMLのとき同様、アスタリスクを使用することができます。


実際にタグを作成すると、すぐパイプラインが実行されることがわかります。(見分けがつきやすいようにパイプライン名を変更しています)

f:id:tech-tsubaki:20200322163750p:plain f:id:tech-tsubaki:20200322163759p:plain