Fra*_*man 7 yaml azure-devops azure-pipelines
我正在设置构建模板,但无法弄清楚可选对象类型参数的语法。在我的管道中,我像这样调用模板:
stages:
- template: aspnet-core.yml@templates
parameters:
database:
name: 'SomeDatabase'
server: 'SomeServer'
Run Code Online (Sandbox Code Playgroud)
我在模板中定义了这样的参数:
parameters:
database: null
Run Code Online (Sandbox Code Playgroud)
我想在模板中进行这样的检查,以便我可以有条件地运行任务:
- ${{ if ne('${{ parameters.database }}', null) }}:
Run Code Online (Sandbox Code Playgroud)
但是,它不喜欢if语句中的关键字null,我不知道如何表示它没有传入的事实。我在这里有什么选择?
Lev*_*SFT 12
您可以使用以下表达式来检查参数是否为空。对于下面的例子
- ${{if parameters.database}}:
Run Code Online (Sandbox Code Playgroud)
下面是我的测试模板和 azure-pipeline.yml。
脚本任务只会在database评估为 true时执行。我测试,发现database: ""和database:将evalutated为false。如果它被定义为database: {},它将被评估为真。
模板:deploy-jobs.yaml
parameters:
database: {}
stages:
- stage: buildstage
pool: Hosted VS2017
jobs:
- job: secure_buildjob
steps:
- ${{if parameters.database}}:
- script: echo "will run if database is not empty"
displayName: 'Base: Pre-build'
Run Code Online (Sandbox Code Playgroud)
azure-pipeline.yml:
stages:
- template: deploy-jobs.yaml
parameters:
database: ""
Run Code Online (Sandbox Code Playgroud)
要在数据库为空时执行某些任务,您可以使用以下语句:
steps:
- ${{if not(parameters.database)}}:
- script: echo "will run if database is empty"
displayName: 'Base: Pre-build'
Run Code Online (Sandbox Code Playgroud)
Fra*_*man 11
看起来 if 语法的替代方法是使用条件。这允许您跳过该步骤。我必须检查对象的属性,看看它是否真的通过了,所以不是非常理想。
condition: and(succeeded(), ne('${{ parameters.database.name }}', ''))
Run Code Online (Sandbox Code Playgroud)
小智 8
我找到了另一种解决方案,您可以使用传入对象的长度。如果对象为空,则其长度为 0
parameters:
- name: myObject
type: object
default: []
steps:
- ${{ if not(eq(length(parameters.myObject), 0)) }}:
- script: |
echo "hello world"
displayName: "next task"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6877 次 |
| 最近记录: |