azure-devops - YAML 管道:如果 RESOURCES_TRIGGERINGALIAS = "ui" 则执行任务
问题描述
我有两个预合并管道:
- uipr
- apipr
还有一个 CI/CD 管道:
- 应用
在 UI 存储库中,每当向分支生成 PR 时main
,uipr就会运行。API repo 和apipr 也是如此。
如果此 PR 前运行成功,则Application
管道将运行。
管道将Application
填充resources.triggeringalias
变量,其中包括执行 CI 的预合并管道的名称:uipr / apipr
该Application
管道还有两个布尔参数,称为compileui和compileapi,默认设置为false。如果我Application
手动运行管道并将其中任何一个设置为 true,它将执行模板以编译选择的任何一个。
我想要实现的是:
- 如果
resources.triggeringalias
等于uipr或parameters.compileui
等于true则执行模板compileui.yaml - 如果
resources.triggeringalias
等于apipr或parameters.compileapi
等于true则执行模板compileapi.yaml
这是我到目前为止所拥有的:
parameters:
- name: compileui
displayName: compile ui
type: boolean
default: false
- name: compileapi
displayName: compile api
type: boolean
default: false
resources:
repositories:
- repository: api
- repository: ui
pipelines:
- pipeline: ui
source: uipr
trigger: true
- pipeline: api
source: apipr
trigger: true
stages:
- stage: ci
jobs:
- job: ui
steps:
- checkout: ui
- ${{ if or(eq(variables['resources.triggerinalias'], 'ui'),eq(parameters.compileui, true)) }}:
- template: steps/build-ui.yaml
- job: api
steps:
- checkout: api
- ${{ if or(eq(variables['resources.triggeringalias'], 'api'),eq(parameters.compileapi, true)) }}:
- template: steps/build-api.yaml
我知道(variables['resources.triggeringalias'], 'ui')仅在运行时发生,而不是在模板扩展时发生。这就是我所缺少的,不知道该怎么做
解决方案
如果我明白了,您希望仅当管道由另一个管道触发或使用标记参数手动运行时才运行部分管道。您可以通过以下方式实现此目的:
parameters:
- name: compileui
displayName: compile ui
type: boolean
default: false
trigger: none
pr: none
resources:
pipelines:
- pipeline: hadar # Name of the pipeline resource
source: kmadof.hadar # Name of the pipeline referenced by the pipeline resource
trigger:
branches:
- releases/*
- master
stages:
- stage: printer
jobs:
- job: printVariables
steps:
- script: |
echo "$(Build.Reason)"
echo "Build run name was: $(resources.pipeline.hadar.runName)"
- ${{ if or(and(eq(parameters.compileui, true), eq(variables['build.reason'], 'Manual')), eq(variables['build.reason'], 'ResourceTrigger')) }}:
- stage: ci
condition: and(in(variables['build.reason'], 'Manual', 'ResourceTrigger'), succeeded())
jobs:
- job: ui
steps:
- script: echo "Hello from ci"
推荐阅读
- php - PDO->exec 处理分隔符
- javascript - 将 ASCII 值数组转换为一个字符串
- javascript - 使用 useEffect 钩子获取后 ReactJS 上下文重新渲染
- php - 如何在PHP中的字符串数组中获取某个数值?
- r - 使用 ODBC 包连接到 R 中的 SQL Server 到非默认端口
- ruby-on-rails - 如何在现有的属性轨上集成枚举
- postgresql - 如何使用 sqlmock 模拟 db.QueryRow
- javascript - Awaited Promises 创建 Array.map 返回
- angular - Ag 网格快速过滤器错误单元格行未过滤
- javascript - 通过 JSP 在脚本上获取 textarea 编辑的文本