在 yaml 中引用从 ADO REST Api 传递的变量

问题描述 投票:0回答:1

我想运行一个管道,其中包含从 POST 请求中的应用程序发送到 ADO 管道的变量。尝试使用运行 API 执行类似于 this 的操作: 但是我不确定如何在管道中引用这些变量。我想在我的管道中使用 terraform 以及其中一些变量。这可能是一些简单的事情,我只是还没有找到,但感谢任何帮助

网上查了一下,有的地方说环境变量?如果是这样的话,将不胜感激如何参考这些内容。

azure-pipelines azure-devops-rest-api
1个回答
0
投票

要在 terraform 中引用通过 REST API Runs - Run Pipeline 分配的管道变量,可以参考以下示例。在此示例中,我创建一个新项目并使用变量“projname”定义项目名称。

  1. 声明变量
    projname
    并在
    var.projname
    中使用
    main.tf
    引用它。
variable "projname" {
  type = string
}

terraform {
  required_providers {
    azuredevops = {
      source = "microsoft/azuredevops"
      version = ">= 0.1.0"
    }
  }
}

resource "azuredevops_project" "project" {
  name               = var.projname
  visibility         = "private"
  version_control    = "Git"
  work_item_template = "Agile"
  description        = "Created by Terraform"
}
  1. 在 UI 中添加一个名为“projname”的变量并将其值保留为空。

  2. 在计划中使用

    projname
    -var "projname=$(projname)"
    的值传递给 terraform 脚本并应用命令。

- task: CmdLine@2
  displayName: Terraform Plan and Apply
  env: 
    AZDO_PERSONAL_ACCESS_TOKEN: $(System.AccessToken)
    AZDO_ORG_SERVICE_URL: $(System.CollectionUri)
  inputs:
    script: |
      terraform plan -input=false -var "projname=$(projname)"
      terraform apply -input=false -var "projname=$(projname)" -auto-approve

如果您不对 DevOps 组织进行更改,则无需定义上面所示的

env
变量。

如果您使用 Terraform 任务,您可以在

-var "projname=$(projname)"
中添加
commandOptions

- task:TerraformTaskV3@3
  displayName: 'Terraform Plan'
  inputs:
    command: 'plan'
    workingDirectory: '$(Build.SourcesDirectory)'
    environmentServiceName: '<service_connection_name>'
    commandOptions: '-var "projname=$(projname)"'
  1. 运行 REST API 运行 - 运行管道以触发管道。

请求正文:

{
    "resources": {
        "repositories": {
            "self": {
                "refName": "refs/heads/main"
            }
        }
    },
    "variables": {
        "projname": {
            "isSecret": false,
            "value": "TerraformPro"
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.