alz/azuredevops/pipelines/terraform/templates/cd-template.yaml (110 lines of code) (raw):

--- parameters: - name: terraform_action default: 'apply' - name: root_module_folder_relative_path default: '.' - name: terraform_cli_version default: 'latest' stages: - stage: plan displayName: Plan variables: - group: ${variable_group_name} - name: 'selfHostedAgent' value: '${self_hosted_agent}' jobs: - deployment: plan displayName: Plan with Terraform pool: ${agent_pool_configuration} environment: ${environment_name_plan} timeoutInMinutes: 0 strategy: runOnce: deploy: steps: - checkout: self displayName: Checkout Terraform Module - template: helpers/terraform-installer.yaml parameters: terraformVersion: $${{ parameters.terraform_cli_version }} - template: helpers/terraform-init.yaml parameters: serviceConnection: '${service_connection_name_plan}' backendAzureResourceGroupName: $(BACKEND_AZURE_RESOURCE_GROUP_NAME) backendAzureStorageAccountName: $(BACKEND_AZURE_STORAGE_ACCOUNT_NAME) backendAzureStorageAccountContainerName: $(BACKEND_AZURE_STORAGE_ACCOUNT_CONTAINER_NAME) root_module_folder_relative_path: $${{ parameters.root_module_folder_relative_path }} - template: helpers/terraform-plan.yaml parameters: terraform_action: $${{ parameters.terraform_action }} serviceConnection: '${service_connection_name_plan}' root_module_folder_relative_path: $${{ parameters.root_module_folder_relative_path }} - task: CopyFiles@2 displayName: Create Module Artifact inputs: SourceFolder: '$(Build.SourcesDirectory)' Contents: | **/* !.terraform/**/* !.git/**/* !.pipelines/**/* !**/.terraform/**/* !**/.git/**/* !**/.pipelines/**/* TargetFolder: '$(Build.ArtifactsStagingDirectory)' CleanTargetFolder: true OverWrite: true - task: PublishPipelineArtifact@1 displayName: Publish Module Artifact inputs: targetPath: '$(Build.ArtifactsStagingDirectory)' artifact: 'module' publishLocation: 'pipeline' - pwsh: | terraform ` -chdir="$${{ parameters.root_module_folder_relative_path }}" ` show ` tfplan displayName: Show the Plan for Review - stage: apply displayName: Apply dependsOn: plan variables: - group: ${variable_group_name} - name: 'selfHostedAgent' value: '${self_hosted_agent}' jobs: - deployment: apply displayName: Apply with Terraform pool: ${agent_pool_configuration} environment: ${environment_name_apply} timeoutInMinutes: 0 strategy: runOnce: deploy: steps: - download: none - task: DownloadPipelineArtifact@2 displayName: Download Module Artifact inputs: buildType: 'current' artifactName: 'module' targetPath: '$(Build.SourcesDirectory)' - template: helpers/terraform-installer.yaml parameters: terraformVersion: $${{ parameters.terraform_cli_version }} - template: helpers/terraform-init.yaml parameters: serviceConnection: '${service_connection_name_apply}' backendAzureResourceGroupName: $(BACKEND_AZURE_RESOURCE_GROUP_NAME) backendAzureStorageAccountName: $(BACKEND_AZURE_STORAGE_ACCOUNT_NAME) backendAzureStorageAccountContainerName: $(BACKEND_AZURE_STORAGE_ACCOUNT_CONTAINER_NAME) root_module_folder_relative_path: $${{ parameters.root_module_folder_relative_path }} - template: helpers/terraform-apply.yaml parameters: terraform_action: $${{ parameters.terraform_action }} serviceConnection: '${service_connection_name_apply}' root_module_folder_relative_path: $${{ parameters.root_module_folder_relative_path }}