我有我的Build.yaml文件,我在其中控制Azure DevOps CI/CD发布管道中的部署过程.在这里,我设置了我打算在CI/CD发布管道中的其他文件中使用的环境变量.

100

  if( "$(env)" -eq "DEVELOPMENT")
  {   Write-Host "##vso[task.setvariable variable=server]developmentserver" }  
  if( "$(env)" -eq "TEST")
  {   Write-Host "##vso[task.setvariable variable=server]testserver" }  
  if( "$(env)" -eq "PRODUCTION")
  {   Write-Host "##vso[task.setvariable variable=server]productionserver" }

我想在下面的模板json文档中使用这个${{ variables.server }}.

100

{
    "parameters": {
        "LinkedService_connectionString": {
            "value": "${{ variables.server }}"
        }
    }
} 

我怎样才能做到这一点呢?

推荐答案

您可以使用Azure DevOps中的YAML Anchors功能在多个地方重用服务器变量的值.

下面是一个例子:

build.yaml文件中,将服务器变量定义为锚点:

variables:
  server_anchor: &server_anchor
    developmentserver: # default value
  - name: env
    value: ${{ parameters.environment }}
  - ${{ if eq(parameters.environment, 'DEVELOPMENT') }}:
      - name: server_anchor
        value: developmentserver
  - ${{ if eq(parameters.environment, 'TEST') }}:
      - name: server_anchor
        value: testserver
  - ${{ if eq(parameters.environment, 'PRODUCTION') }}:
      - name: server_anchor
        value: productionserver

steps:
  - script: |
      echo "Server: ${{ variables.server_anchor }}"

在这里,server_anchor变量是使用YAML Anchors特性(&server_anchor)定义的,它的值是使用IF表达式基于env变量设置的.

build.yaml文件的PARAMETERS部分,添加环境参数:

parameters:
  - name: environment
    type: string
    default: DEVELOPMENT
    values:
      - DEVELOPMENT
      - TEST
      - PRODUCTION

此参数允许您在运行管线时 Select 环境(即DEVELOPMENTTESTPRODUCTION).

在您的template.json文件中,引用server_anchor变量:

{
  "parameters": {
    "LinkedService_connectionString": {
      "value": "${{ variables.server_anchor }}"
    }
  }
}

Json相关问答推荐

使用WSO2 JsonTransform Mediator对空值执行JsonExceptionUndeletedOperationException

Golang返回的JSON顶级字段是可变的.如何在 struct 中使用

JOLT转换以根据条件删除json对象

如何将一个对象添加到多个对象中 JOLT

如何强制仅有一个元素的数组在JSON中生成方括号

Jolt 转换数组对象并将某些字段移动到嵌套数组

如何使用jolt将嵌套数据变成线性数据

Jolt 规范将父对象中的所有键应用于数组中的所有对象

从 oracle 数据库中的 json blob 打印值

使用 jq 和脚本 bash 映射两个 json

在 CodePipeline 中调用 lambda 时传递用户参数

JOLT JSON 将值从一对多转换为一对一

将 JSON 解组为具有唯一元素的 map 切片

根据数据框中的其他列值将列表 json 对象插入行

避免 KeyError 的默认字典键

如何从 HttpClient 解析 JSON 字符串?

json.dumps 打乱了顺序

如何将有向无环图 (DAG) 存储为 JSON?

Retrofit2.0 得到 MalformedJsonException 而 json 似乎正确?

将循环 struct 转换为 JSON - 有什么方法可以找到它抱怨的字段?