【Bicep 入門 #7】CI/CDパイプラインの理解と実行

この記事の内容

  • GitHub ActionsによるBicepのCI/CDパイプラインの全体構成を理解します
  • ワークフローファイル(.github/workflows)の各ステップの役割を解説します
  • Bicepファイルをビルド(JSON変換)してAzureへデプロイする流れを確認します
  • --what-if オプションを使ったデプロイ前のプレビュー確認方法を紹介します
  • 実際にパイプラインを実行してリソースグループとストレージアカウントが作成される様子を追います

CI/CDパイプラインの全体像

フォークしたリポジトリの中にはBicepのサンプルファイルが含まれており、その中にGitHub Actionsのワークフローファイルが用意されています。ファイルのパスは .github/workflows/ 配下に配置されており、BicepをAzure CLIでデプロイするためのCI/CDを実現する構成になっています。


ワークフローファイルの構成

ワークフローファイルは大きく以下の要素で構成されています。

トリガー設定

パイプラインのトリガーは mainブランチへの新しいコミット が条件になっています。mainブランチにプッシュされるたびにワークフローが自動的に起動します。

on:
  push:
    branches:
      - main

実行環境

ジョブはUbuntuのランナー上で実行されます。

jobs:
  bicep-deploy-az-cli:
    runs-on: ubuntu-latest

認証情報の設定

Azure CLIでAzureに接続するために、GitHubのSecretsに AZURE_CREDENTIALS を登録しておきます。ワークフロー内ではこのシークレットを参照して認証を行い、指定したサブスクリプションへアクセスします。

- name: Azure Login
  uses: azure/login@v1
  with:
    creds: ${{ secrets.AZURE_CREDENTIALS }}

変数の定義

リソースグループ名やロケーションなどの設定値は環境変数として定義されています。

env:
  RESOURCE_GROUP_NAME: rg-bicep-samples
  RESOURCE_GROUP_LOCATION: eastus

環境変数として定義しておくことで、後続のステップから ${{ env.RESOURCE_GROUP_NAME }} のように参照できます。


各デプロイステップの解説

ステップ1:Bicepのビルド(JSON変換)

BicepファイルはそのままAzureにデプロイすることもできますが、このパイプラインではまずJSONファイルにコンパイルするステップが含まれています。

az bicep build --file main.bicep

このコマンドにより、BicepファイルからARMテンプレート(JSONファイル)が生成されます。

ステップ2:リソースグループの作成

デプロイ先のリソースグループはコマンドで事前に作成します。リソースグループが存在しない場合でも、このステップで自動的に作成されます。

az group create \
  --name $RESOURCE_GROUP_NAME \
  --location $RESOURCE_GROUP_LOCATION

ステップ3:デプロイのプレビュー(what-if)

実際の環境を変更する前に --what-if オプションを使ってプレビュー確認を行います。このオプションを使うと、実際の環境には何も変更を加えず、コマンドを実行した場合に何が起きるかを表示してくれます。

az deployment group create \
  --resource-group $RESOURCE_GROUP_NAME \
  --template-file main.json \
  --mode Complete \
  --what-if

プレビュー結果にはリソースの作成・変更・削除が一覧で表示されます。ストレージアカウントなどが「Create」として表示されていれば、意図通りの内容であることを確認できます。

ステップ4:実際のデプロイ

プレビューで問題がなければ、--what-if を外して実際にデプロイを実行します。

az deployment group create \
  --resource-group $RESOURCE_GROUP_NAME \
  --template-file main.json \
  --mode Complete

--mode Complete を指定することで、テンプレートに定義されていないリソースはリソースグループから削除される完全モードでのデプロイになります。


パイプラインの実行と確認

mainブランチへのコミットをトリガーとしてパイプラインが実行されると、各ステップが順番に処理されていきます。

実行の流れとしては以下のようになります。

  1. Azureへのログイン(AZURE_CREDENTIALSを使った認証)
  2. サブスクリプションのセットアップ
  3. BicepファイルのJSONへのビルド
  4. リソースグループの作成
  5. --what-ifによるプレビュー実行
  6. 実際のデプロイ

パイプラインが完了すると、Azureポータル上で rg-bicep-samples というリソースグループが作成され、その中にストレージアカウントが展開されていることを確認できます。


まとめ

今回はBicepのCI/CDパイプラインをGitHub Actionsで実現する方法を解説しました。ポイントをまとめると以下のとおりです。

  • トリガーはmainブランチへのコミットで、自動的にパイプラインが起動します
  • AZURE_CREDENTIALS をGitHub Secretsに登録することで、安全にAzure認証を行えます
  • az bicep build でBicepをJSONに変換してからデプロイするステップが含まれています
  • --what-if オプションは実環境を変えずにデプロイ内容を事前確認できる非常に便利な機能です
  • リソースグループの作成もパイプラインに含めることで、完全に自動化されたデプロイを実現できます

CI/CDパイプラインを活用することで、手動デプロイのミスを減らし、再現性の高いインフラ管理が可能になります。ぜひ活用してみてください。