変数グループとテンプレートを使用したAzureパイプライン変数での予期しない動作
Aug 25 2020
Terraform by MSDevLabs拡張機能とAzureResourceManagerサービス接続を使用してTerraformデプロイメントを実行するAzureDevOpsYAMLパイプラインがあります。
最後の動作状態はパイプラインテンプレートのyamlファイルを使用していましたが、テンプレート内でパラメーターを構成し、テンプレート式の構文を使用して変数を呼び出す必要がありました。
...
...
stages:
- stage: Plan
displayName: Terrafom Plan
jobs:
- job: DEV PLAN
displayName: Plan (DEV)
pool:
vmImage: "ubuntu-latest"
variables:
az_service_connection: "MyServiceConnection"
tf_environment: "DEV"
tf_state_rg: "DEV"
tz_state_location: "canadacentral"
tf_state_stgacct_name: "mystorageaccuontname1231231"
tf_state_container_name: "tfstate"
steps:
- template: templates/terraform-plan.yml
parameters:
az_service_connection: ${{ variables.az_service_connection }}
...
...
steps:
- task: terraformInstaller@0
displayName: "Install Terraform $(tf_version)"
inputs:
terraformVersion: $(tf_version) - task: TerraformTaskV1@0 displayName: "Run > terraform init" inputs: command: "init" commandOptions: "-input=false" backendServiceArm: ${{ parameters.az_service_connection }}
...
...
これが機能する理由は、テンプレート式の構文${{ variables.varname}}がコンパイル時と実行時に評価されるためだと思います。この方法で行わなかった場合$(az_service_connection)、backendServiceArm入力に渡されるか、空の値になります。
変数グループの導入により、私は今、同様の行動に直面しています。変数グループ${{ variables.az_service_connection }}は、空の値を持つテンプレート式変数の後に評価されることを期待しています。これを機能させる方法がわかりません。
サービス接続を使用するパイプラインテンプレートで変数グループを使用するにはどうすればよいですか?
回答
1 KrzysztofMadej Aug 25 2020 at 07:57
$()構文を使用して、アーム接続をテンプレートに渡しました。
テンプレートファイル:
parameters:
- name: 'instances'
type: object
default: {}
- name: 'server'
type: string
default: ''
- name: 'armConnection'
type: string
default: ''
steps:
- task: TerraformTaskV1@0
inputs:
provider: 'azurerm'
command: 'init'
backendServiceArm: '${{ parameters.armConnection }}'
backendAzureRmResourceGroupName: 'TheCodeManual'
backendAzureRmStorageAccountName: 'thecodemanual'
backendAzureRmContainerName: 'infra'
backendAzureRmKey: 'some-terrform'
- ${{ each instance in parameters.instances }}: - script: echo ${{ parameters.server }}:${{ instance }}
メインファイル:
trigger:
branches:
include:
- master
paths:
include:
- stackoverflow/09-array-parameter-for-template/*
# no PR triggers
pr: none
pool:
vmImage: 'ubuntu-latest'
variables:
- group: my-variable-group
- name: my-passed-variable
value: $[variables.myhello] # uses runtime expression
steps:
- template: template.yaml
parameters:
instances:
- test1
- test2
server: $(myhello) armConnection: $(armConnection)
注:グループにmy-variable-groupはarmConnection変数が含まれています