Azure devops管道-仅在另一个管道上触发,不提交

毒蛇

需求

因此,Azure DevOps中有一些新功能,该功能允许管道触发其他管道,并记录在这里:https : //docs.microsoft.com/zh-cn/azure/devops/pipelines/build/triggers?view=azure- devops&tabs = yaml#pipeline-triggers-1听起来不错,但事实是我无法获得所需的行为。我想要在同一存储库中的2个管道:

  • 管道A:仅由其自身存储库之外但在同一项目中的多个其他管道触发。作为触发的结果,它更改了自己的存储库,因此触发了管道B。
  • Pipleline B:仅由自身回购的更改触发,并且触发后继续执行所需的操作

管道A语法

resources:
    pipelines:
    - pipeline: database
      source: database
      trigger:
        branches:
        - develop
        - release/*
        # The stages filter should work, according to: https://docs.microsoft.com/en-us/azure/devops/pipelines/build/triggers?view=azure-devops&tabs=yaml
        # However, this error occurs when specifying: /azure-pipelines.yml (Line: 8, Col: 15): Stage filters in pipeline resource database is not supported.
        #stages:
        #- Build
    - pipeline: auth
      source: auth
      trigger:
        branches:
        - develop
        - release/*
    - pipeline: api
      source: api
      trigger:
        branches:
        - develop
        - release/*
    - pipeline: web
      source: web
      trigger:
        branches:
        - develop
        - release/*
  ... multiple triggers - 9 in total
stages:
  ...

当前行为

管道A不会由其他任何管道触发,而只能在对其自己的存储库进行更改时触发。由于无论如何都会对其自己的存储库进行更改,因此它会陷入无尽的循环。

问题/评论

  • 管道A的语法正确吗?
  • 在文档中:“但是,如果两个管道使用不同的存储库,则触发的管道将使用其默认分支中的最新版本的代码。” 我假设这意味着默认分支中的yaml管道将被激活。而且我们真的有那么一点控制吗?最好在管道声明中指定目标分支。
  • 是否有可能以某种方式获得触发管道的源分支?
  • 为什么舞台过滤器不按记录工作?
  • 在管道A中,为了停止循环,我尝试使用$(Build.TriggeredBy.DefinitionId)来检查是否与$(System.DefinitionId)相同,如果是,则跳过构建步骤,但尝试使用$(Build.TriggeredBy.DefinitionId )没有价值
  • 如果无法正常工作,我倾向于让其他管道触发管道A。

发现

  • 添加trigger: none到流水线的顶部A阻止了它在对存储库进行提交时运行,只是目前根本不运行!
  • 在一个单独帐户中的简化管道方案中,我设法使触发的构建正常工作,在同一回购中有2个管道,并发现:
    • 执行的yaml管道文件与触发管道上的提交位于同一分支上
    • 检出的代码也与触发管道上的提交来自同一分支
    • 从GUI手动执行管道不会触发依赖的管道
    • 从属管道在第一次启动时立即触发并排队
    • 我无法使分支排除工作:不管排除条款如何,都会触发管道
  • 在单独的帐户中运行简化的管道方案,在回购C中使用管道A,在回购D中使用相关管道B(同一项目),到目前为止,我无法获得管道A来触发管道B(我的原始方案)
  • 哦,太高兴了:-)有azure azure devops命令行扩展,它具有管道支持,并允许您触发管道:
毒蛇

工作方案

因为所有构建都集中在一个管道模板中,所以我更改了该模板,以在成功发布工件时触发管道A。这是流水线触发代码,几乎是逐字记录的(https://docs.microsoft.com/zh-cn/azure/devops/cli/azure-devops-cli-in-yaml?view=azure-devops)从最后几个步骤开始:

# Updating the python version available on the linux agent
    - task: UsePythonVersion@0
      displayName: Upgrade build agent Python version
      inputs:
        versionSpec: '3.x'
        architecture: 'x64'

    # Updating pip to latest
    - script: python -m pip install --upgrade pip
      displayName: 'Upgrade pip'

    # Updating to latest Azure CLI version.
    - script: pip install --pre azure-cli --extra-index-url https://azurecliprod.blob.core.windows.net/edge
      displayName: 'Upgrade azure cli'

    - script: az --version
      displayName: 'Show Azure CLI version'

    - script: az extension add -n azure-devops
      displayName: 'Install Azure DevOps Extension'

    - script: echo ${AZURE_DEVOPS_CLI_PAT} | az devops login
      env:
        AZURE_DEVOPS_CLI_PAT: $(System.AccessToken)
      displayName: 'Login Azure DevOps Extension'

    - script: az devops configure --defaults organization=$(System.TeamFoundationCollectionUri) project="$(System.TeamProject)" --use-git-aliases true
      displayName: 'Set default Azure DevOps organization and project'

    - script: |
        set -euo pipefail
        if [[ "$(Build.SourceBranch)" == *"/release/"* ]]; then
          branchName="master"
        else
          branchName="develop"
        fi
        commandLine="--branch $branchName --name <YourPipelineName>"
        echo "Triggering release creation with: az pipelines run $commandLine"
        az pipelines run $commandLine
      displayName: Trigger release build for internal (develop) and external (release) builds

注意事项

  • <YourPipelineName>进行适当的更改,您的分支名称处理将与我的有所不同
  • Azure CLI升级需要1.5分钟,因此,如果要大幅加快升级速度,只需删除前3个步骤
  • 我宁愿被触发的管道声明自己的触发器,因为如果您看到导致其触发的原因,则维护起来会更容易,但是

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从另一个管道触发Azure DevOps管道

来自分类Dev

Azure DevOps触发管道

来自分类Dev

Azure DevOps管道阶段

来自分类Dev

Azure DevOps 增量管道

来自分类Dev

Azure DevOps管道任务等待运行以完成另一个管道

来自分类Dev

Azure:无法从另一个触发发布管道

来自分类Dev

Nuget Restore在Azure DevOps管道上失败

来自分类Dev

Azure DevOps模板管道功能

来自分类Dev

Azure DevOps中的Flutter管道

来自分类Dev

Azure DevOps多个发布管道

来自分类Dev

QnA Bot的Azure DevOps管道

来自分类Dev

如何从Azure DevOps管道中的另一个作业访问InvokeRestAPI任务的响应?

来自分类Dev

Azure DevOps管道:在本地通过的测试在管道上失败

来自分类Dev

当从另一个管道使用“ git push”时,避免触发Azure管道

来自分类Dev

在Azure DevOps管道中强制提交输入

来自分类Dev

Azure DevOps Yaml管道-从一个作业到另一个作业的输出变量

来自分类Dev

在 azure devops 中创建了一个 NuGet 管道

来自分类Dev

如何在Azure Devops中有条件地从另一个管道运行一个管道?

来自分类Dev

当另一个构建已在运行时,Azure DevOps构建管道失败

来自分类Dev

Azure DevOps管道中的条件阶段执行

来自分类Dev

重用Azure DevOps管道用于GitHub版本

来自分类Dev

实体框架迁移Azure DevOps发布管道

来自分类Dev

从json文件导入Azure Devops管道变量

来自分类Dev

Kotlin项目的Azure DevOps管道

来自分类Dev

在Azure DevOps管道中无法激活conda

来自分类Dev

从Logic Apps启动Azure Devops发布管道

来自分类Dev

运行pylint时Azure DevOps管道失败

来自分类Dev

如何通过代码运行Azure DevOps管道?

来自分类Dev

找不到Azure DevOps管道迁移SQL

Related 相关文章

热门标签

归档