先日の記事で、Azure DevOps の Multi-Stage Pipelines を使って Azure Web Apps にデプロイする内容を記載しました。
gooner.hateblo.jp
YAML をソースコードのリポジトリで管理する想定なので、環境毎に異なる情報やパスワードなどのシークレットな情報をリポジトリに含めたくありません。そこで、Azure DevOps の Variable groups を使って、パイプラインを書き換えてみました。
パイプラインの全体設計
先日の記事と同様に、パイプラインは、自動デプロイされる開発環境向け(Commit Stage)と承認デプロイされる本番環境向け(Production Stage)を作りました。
YAML を Build と Release に分けて、可変部をパラメータで切り替えできるテンプレートを作ることで再利用性を向上させます。
Variable groups とは
Variable groups は、Azure DevOps 内に定義した Key-Value のデータをグループ化し、YAML パイプラインに渡すことができる機能です。
docs.microsoft.com
Azure DevOps の Library メニューから Variable groups を登録します。このユースケースでは、ブランチ毎にデプロイ先の Azure Web Apps が異なるので、Commit Stage と Production Stage でグループを分けて、webAppsName を登録します。
variable-group-commit
と variable-group-production
の2つの Variable groups を登録しました。
今回は利用しませんが、パスワードなどのシークレットな情報は、Value の右横の鍵マークをクリックすると、値をマスクすることができ、登録した人以外には非公開にすることも可能です。また、Azure Key Vault で値を管理することもできます。
パイプライン
変更する YAML は、パイプライン起動用の azure-pipelines.yml です。
trigger: - master variables: - group: variable-group-commit - name: imageName value: 'windows-2019' - name: buildConfiguration value: 'Release' - name: projects value: '**/WebApplication.csproj' - name: testProjects value: '**/WebApplication.Tests.csproj' - name: azureSubscription value: 'AzureSponsorships' - name: webAppsType value: 'webApp' - name: environment value: 'Commit-Stage' stages: - stage: Build jobs: - template: pipelines/build-pipelines.yml parameters: imageName: $(imageName) buildConfiguration: $(buildConfiguration) projects: $(projects) testProjects: $(testProjects) - stage: Release dependsOn: - Build condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master')) jobs: - template: pipelines/release-pipelines.yml parameters: imageName: $(imageName) azureSubscription: $(azureSubscription) webAppsName: $(webAppsName) webAppsType: $(webAppsType) environment: $(environment)
variables の webAppsName
を削除する代わりに、group: variable-group-commit
を追加することで、Variable groups から値を受け取ることができます。
Variable groups と YAML に定義する variables の両方を使いたいので、既存の variables を name-value 形式で書き換えています。
同様の手順で、本番環境向けパイプラインの azure-pipelines-production.yml も変更すれば、完了です。
まとめ
YAML をソースコードのリポジトリで管理する場合、環境毎に異なる情報やパスワードなどのシークレットな情報をリポジトリに含めたくありません。
Azure DevOps の Variable groups を使うことで、YAML パイプラインに値を渡すことができるので、実プロジェクトに適用する際にはうまく活用したい機能です。
こちらから、パイプライン YAML の全体を確認できます。
github.com