Azure devops 带有手动运行和用户设置变量的Azure Devops管道:如何在条件中检查变量?

Azure devops 带有手动运行和用户设置变量的Azure Devops管道:如何在条件中检查变量?,azure-devops,azure-devops-pipelines,Azure Devops,Azure Devops Pipelines,希望有人能在这方面帮助我,因为回顾我的git日志,我现在尝试了14种不同的方法来让它工作。以下是场景: 我在UI中创建了一个名为deploy\u custom\u env的变量,并选中了“用户可以在运行时设置变量”。我将其初始化为“default”,但我希望用户在开始手动运行时覆盖它 我试图在条件下为我的一些管道阶段使用此变量 我试过很多很多不同的东西。以下是一些例子: 第一: condition: ne(variables.deploy_custom_env, 'default')

希望有人能在这方面帮助我,因为回顾我的git日志,我现在尝试了14种不同的方法来让它工作。以下是场景:

  • 我在UI中创建了一个名为
    deploy\u custom\u env
    的变量,并选中了“用户可以在运行时设置变量”。我将其初始化为“default”,但我希望用户在开始手动运行时覆盖它

  • 我试图在
    条件下为我的一些管道阶段使用此变量

  • 我试过很多很多不同的东西。以下是一些例子:

第一:

condition: ne(variables.deploy_custom_env, 'default')

甚至

variables:
  - name: isCustomEnv
    value: ne[(variables.deploy_custom_env, 'default')]
有趣的是,当尝试使用上述方法时,以下两种情况都会导致跳过阶段:

condition: eq(variables.isCustomEnv, true)
condition: eq(variables.isCustomEnv, false)
这是否意味着它既为
又为
?(当然,我是在开玩笑:我不知道这实际计算结果是什么。)我也尝试过启用
System.debug
并检查“Enable System diagnostics”`,但当跳过我的阶段时,我真的看不到这些变量的计算结果

如果有任何建议或文件能帮助我解决这个问题,我将不胜感激。这肯定是人们做的事情吗?另外,对Azure reading中的任何人的建议:我希望在文档中的某个地方看到这个示例

为了回答这个问题,我查看了以下内容:

在后者中,我看到了编译时和运行时之间的区别,注意如下:

运行时和编译时表达式语法之间的区别是 主要是什么样的上下文是可用的。在编译时表达式中(${{ }}),您可以访问参数和静态定义的 变量。在运行时表达式($[])中,您有 访问更多变量,但没有参数


这似乎是相关的,但我如何将其转换为在我的
条件下工作的东西呢?

如果在yml文件中执行此操作,那么$(deploy\u custom\u env)应该可以工作。

如果在yml文件中执行此操作,那么$(deploy\u custom\u env)应该可以工作。

我将为您提供更多的变量语法供您尝试,还有另一种方法

此语法适用于前面所述的变量:

阶段:
-阶段:第一阶段
工作:
-工作:第一份工作
游泳池:
vmImage:“windows最新版本”
步骤:
-pwsh:写入主机“默认部署自定义环境”
displayName:默认情况下运行
条件:eq(变量['deploy\u custom\u env'],'default')
-pwsh:写入主机“部署自定义环境不是默认的”
displayName:如果不是默认值,则运行
条件:ne(变量['deploy\u custom\u env'],'default')
另一种方法是不使用UI中声明的变量,而是使用构建的参数-这将设置默认值,并允许您在对构建排队时对其进行更改:

参数:
-名称:部署\自定义\环境
类型:字符串
默认值:“默认值”
阶段:
-阶段:第一阶段
工作:
-工作:第一份工作
游泳池:
vmImage:“windows最新版本”
步骤:
-pwsh:写入主机“默认部署自定义环境”
displayName:默认情况下运行
条件:eq('${{parameters.deploy\u custom\u env}}','default')
-pwsh:写入主机“部署自定义环境不是默认的”
displayName:如果不是默认值,则运行
条件:ne('${{parameters.deploy\u custom\u env}}','default')
这样做的好处是,在对构建进行排队时,您可以在前面提示输入默认值,而不必深入变量


注意:此方法适用于管道,它不适用于模板或嵌套模板中的条件,因为当参数可用时,可以。。。棘手。

我再给你一个变量语法来尝试,然后是另一种方法

此语法适用于前面所述的变量:

阶段:
-阶段:第一阶段
工作:
-工作:第一份工作
游泳池:
vmImage:“windows最新版本”
步骤:
-pwsh:写入主机“默认部署自定义环境”
displayName:默认情况下运行
条件:eq(变量['deploy\u custom\u env'],'default')
-pwsh:写入主机“部署自定义环境不是默认的”
displayName:如果不是默认值,则运行
条件:ne(变量['deploy\u custom\u env'],'default')
另一种方法是不使用UI中声明的变量,而是使用构建的参数-这将设置默认值,并允许您在对构建排队时对其进行更改:

参数:
-名称:部署\自定义\环境
类型:字符串
默认值:“默认值”
阶段:
-阶段:第一阶段
工作:
-工作:第一份工作
游泳池:
vmImage:“windows最新版本”
步骤:
-pwsh:写入主机“默认部署自定义环境”
displayName:默认情况下运行
条件:eq('${{parameters.deploy\u custom\u env}}','default')
-pwsh:写入主机“部署自定义环境不是默认的”
displayName:如果不是默认值,则运行
条件:ne('${{parameters.deploy\u custom\u env}}','default')
这样做的好处是,在对构建进行排队时,您可以在前面提示输入默认值,而不必深入变量


注意:此方法适用于管道,它不适用于模板或嵌套模板中的条件,因为当参数可用时,可以。。。棘手。

这似乎在条件下不起作用,因为条件需要表达式(根据文档)。这似乎在条件下不起作用,因为条件需要表达式(根据文档)
variables:
  - name: isCustomEnv
    value: ne[(variables.deploy_custom_env, 'default')]
condition: eq(variables.isCustomEnv, true)
condition: eq(variables.isCustomEnv, false)