2024年10月11日
Azure PipelinesのYAMLをGitLab/GitHubと比較しつつ理解してみる
Azure DevOps の Azure Pipelines のパイプライン YAML に入門してみます。
想定読者
- GitHub Actions や GitLab CI/CD には馴染みがあるけど Azure Pipelines はよく分からん人
- Azure Pipelines の YAML の書き方の雰囲気をつかみたい人
公式ドキュメント
まずはここを見ましょう。
Azure Pipelines の YAML スキーマ リファレンス
簡単な例
trigger: # main または develop ブランチに push されたとき - main - develop stages: # Build -> Test -> Deploy の順に実行される - stage: Build jobs: - job: BuildJob steps: - script: echo Building! - stage: Test jobs: # TestOnWindows と TestOnLinux は並列実行される - job: TestOnWindows steps: - script: echo Testing on Windows! - job: TestOnLinux steps: - script: echo Testing on Linux! - stage: Deploy jobs: - job: Deploy steps: - script: echo Deploying the code!
トリガー
GitHub Actions でいう on
、GitLab でいう workflow
で、パイプラインの開始条件を記述します。
- trigger
- ブランチやファイルのパス、git タグを include/exclude で指定
- pr
- pull request ビルドを実行するブランチやファイルのパスを include/exclude で指定
- schedules
- cron 表現を指定
階層構造
雑に言うと pipeline > stages > jobs > steps の階層構造になっています。
- pipeline
- GitHub でいうワークフロー、GitLab でいうパイプライン
- stages
- GitLab でいうステージ(※ GitHub では依存関係を
needs
で指定) - GitLab と同様、ステージ内のジョブは並列実行される
- GitLab でいうステージ(※ GitHub では依存関係を
- jobs
- GitHub でいうジョブ
- GitLab では対応する概念なし(強いて言えば
before_script
script
after_script
か) - ステージの入れ子にしないでパイプラインに直接書いても OK
- steps
- GitHub でいうジョブのステップ、GitLab でいう
script
の配列の要素 - GitHub と同様、コマンドだけでなく、事前定義されたタスクを指定できる
- ステップの1つ目のプロパティには
script
やcheckout
、task
等、ステップで何を実行するかを書かないといけない - ジョブの入れ子にしないでパイプラインに直接書いても OK
- GitHub でいうジョブのステップ、GitLab でいう
コンポーネント化
GitHub Actions や GitLab CI/CD Components のように、コンポーネント化して再利用できるようにするための Azure Pipelines の機能がタスクです。上述の steps[].task
に指定して使います。GitHub Actions の uses
と同じように使えそうです。
ContainerBuild@0 を使う例
stages: - stage: Build jobs: - job: BuildJob steps: # Container Build v0 # Container Build Task. - task: ContainerBuild@0 inputs: dockerRegistryServiceConnection: # string. Docker registry service connection. repository: # string. Container repository. Dockerfile: 'Dockerfile' # string. Required. Dockerfile. Default: Dockerfile. buildContext: '.' # string. Build context. Default: .. tags: '$(Build.BuildId)' # string. Tags. Default: $(Build.BuildId).
感想
- 同じ会社なので、GitHub Actions に結構似てる
- jobs, steps っていう言葉の使い方とか、出来合いのタスクを使えるところとか
- ステージの概念がある辺りは GitLab ぽい
- ざっと調査した感じでは不足している機能はなさそう
参考文献
- Azure Pipelines の YAML スキーマ リファレンス
- Azure Pipelines タスク リファレンス | Microsoft Learn
- タスクの種類と使用方法 - Azure Pipelines | Microsoft Learn
- 事前定義済み変数 - Azure Pipelines | Microsoft Learn
- Azure Pipelines でのトリガー - Azure Pipelines | Microsoft Learn
- CI/CD YAML syntax reference | GitLab
- GitLab CI/CD から GitHub Actions への移行 - GitHub Docs