azure 如何将应用服务名称从我的terraform部署传递到devops中的应用服务部署?

hrysbysz  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(167)

我在Azure Devops中有一个包含两个阶段的发布管道:
1.创建基础架构-在Azure中创建资源(资源组、应用服务计划等)
1.部署工件-将.NET生成工件部署到在阶段1中创建的Azure应用程序服务
在第2阶段,我正在运行任务“部署Azure应用服务”,该任务要求提供两个参数{Azure订阅和应用服务名称}。每个参数都提供一个选项下拉列表供选择。这是有问题的,因为应用服务尚不存在,因此无法引用它,下拉列表为空。
有没有办法使用阶段1的输出变量,并将其提供给阶段2的参数?

umuewwlo

umuewwlo1#

我认为这可以通过使用一个空资源先将一些数据写入一个文件来实现:

resource "null_resource" "create_app_service_data" {
  count = var.deploy ? 1: 0
  provisioner "local-exec" {
    command = "chmod +x ${path.module}/scripts/write_json.sh; ${path.module}/scripts/write_json.sh"
    environment = {
      APP_SERV_NAME = split(output.app_serv_id, "/")[8]
      APP_SERV_SUB_ID = split(output.app_serv_id, "/")[2]
      APP_SERV_RG_NAME = split(output.app_serv_id, "/")[4]
    }
  }
}

在Terraform中完成这一步后,您将在与TF代码相同的工作目录中拥有一个文件,因此您需要做一些工作来将其放到您希望使用的目录中,这里有一些bash示例来运行它:

#!/bin/bash
APP_SERV_NAME = "${APP_SERV_NAME}"
APP_SERV_SUB_ID = "${APP_SERV_SUB_ID}"
APP_SERV_RG_NAME = "${APP_SERV_RG_NAME}"

JSON_STRING=$( jq -n \
                  --arg app_serv_name "refs/heads/$FEATURE_BRANCH_NAME" \
                  --arg sub_id "refs/heads/$FEATURE_BRANCH_NAME" \
                  --arg rg_name "refs/heads/$FEATURE_BRANCH_NAME" \
                  '{"app_serv_name": $app_serv_name, "sub_id": $sub_id, "rg_name": $rg_name}')

echo "$JSON_STRING" > app_service_data.json

接下来,您需要设置一些输出变量,以便在以下任务/作业/阶段中使用:

- bash: |
    APP_SERV_NAME=$(cat app_service_data.json | jq '.app_serv_name')
    SUB_ID=$(cat app_service_data.json | jq '.sub_id')
    echo "##vso[task.setvariable variable=appServiceName;isoutput=true]$APP_SERV_NAME"
    echo "##vso[task.setvariable variable=subscriptionId;isoutput=true]$SUB_ID"
  displayName: 🚨Set Outputs For Deployment🚨
  name: setVariablesForDeployment

从这里开始,我想你可以像这样扩展任务内部的变量:

- task: AzureRmWebAppDeployment@4
  inputs:
    ConnectionType: 'AzureRM'
    azureSubscription: $(setVariablesForDeployment.subscriptionId)
    appType: 'webApp'
    WebAppName: $(setVariablesForDeployment.appServiceName)

请参阅有关Azure DevOps的输出变量的更多文档here。我意识到这里有很多相互关联的步骤,但我不清楚如何获取Terraform输出的值并将它们放入管道中。

相关问题