无法在完成其他管道时触发管道
原创
我正试图在devops管道中为我们的角度应用程序构建几条发布管道。我们使用的是Nx工作区,因此能够在工作区构建的末尾触发这些管道是很重要的。
下面是微软(https://learn.microsoft.com/en-us/azure/devops/pipelines/process/pipeline-triggers?view=azure-devops&tabs=yaml)提供的示例文档代码
# this is being defined in app-ci pipeline
resources:
pipelines:
- pipeline: securitylib # Name of the pipeline resource
source: security-lib-ci # Name of the triggering pipeline
trigger:
branches:
- releases/*
- master这里是我的完整管道:
# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml
trigger: none
resources:
pipelines:
- pipeline: WorkspaceBuild
source: OtherPipeline
project: CommonProject
trigger:
branches:
- master
pool:
vmImage: 'ubuntu-latest'
steps:
- task: DownloadBuildArtifacts@0
inputs:
buildType: 'current'
downloadType: 'single'
artifactName: 'web-framework'
downloadPath: '$(System.ArtifactsDirectory)'
- script: |
cd $(System.ArtifactsDirectory)
dir .
displayName: 'Run a one-line script'
- script: |
echo Add other tasks to build, test, and deploy your project.
echo See https://aka.ms/yaml
displayName: 'Run a multi-line script'更新
好的,修复命名允许每个管道运行。但是,构建管道仍然不会触发部署管道。
更新2
嘿,这还是没用的。我从触发器ui面板中删除了所有CI设置,并确保没有勾选覆盖框。以下是一些有助于诊断的图像
发布于 2021-07-15 15:06:23
刚刚解决了这个错误,管道资源管道名必须是有效的-它实际上意味着给出的source:管道名无效。
在2021年,AzureDevOps上似乎没有UI --这一切都是YAML,这使得事情变得更简单。
假设两个存储库都在同一个高级别项目分组中:
My Upstream Pipeline (release)的管道。在此存储库或其管道中不需要特殊配置。resources:
pipelines:
- pipeline: alias_name
source: 'My Upstream Pipeline (release)'
trigger:
branches:
- release/*如果您输入‘must管道(释放)’,那么您将得到错误管道资源alias_name必须是有效的。
将构建的下游回购的分支是默认分支--我认为除了更改默认分支之外,没有任何方法可以改变这个分支。
如果需要根据触发管道的标识在下游管道中进行任何额外处理(例如,传递已发布的工件),我建议选择alias_name来匹配上游存储库的名称,并使用环境变量中合法的字符。这是因为ADO通过多个环境变量将关于上游触发项目的信息提供给下游管道,alias_name作为这些变量名称的一部分被合并:
然后,以下变量将alias_name超感知为ALIAS_NAME
然后,您可以使用:PIPELINEURL="${SYSTEM_TEAMFOUNDATIONSERVERURI}${RESOURCES_PIPELINE_ALIAS_NAME_PROJECTID}/_build?buildId=${RESOURCES_PIPELINE_ALIAS_NAME_RUNID}"构造上游(触发)管道的URL。
并从其中获取已发布的工件。
- task: DownloadPipelineArtifact@2
name: DownloadFromUpstream
displayName: 'Download file from upstream'
condition: eq(variables['Build.Reason'], 'ResourceTrigger')
inputs:
source: specific
project: $(RESOURCES_PIPELINE_ALIAS_NAME_PROJECTID)
pipeline: $(RESOURCES_PIPELINE_ALIAS_NAME_PIPELINEID)
runId: $(RESOURCES_PIPELINE_ALIAS_NAME_RUNID)
preferTriggeringPipeline: true
artifact: 'published-artifact-name'
path: .参考资料:
发布于 2020-07-22 09:14:40
我应该如何在另一条管道的末尾触发一条管道?使用msdocs中的示例将导致“管道资源输入必须有效”错误。
根据错误消息pipeline resource input must be valid,看起来Azure没有像yaml文件中提到的那样选择管道的名称。
应该是管道的名字。要解决此问题,您可以尝试转到管道OtherPipeline的触发器并重命名管道并在完整管道中使用该名称:


如果上面没有解决您的问题,请提供一些截图关于您的YAML名称和真正的价值,在完整的管道(只要隐藏个人信息)。
更新:
好的,修复命名允许每个管道运行。但是,构建管道仍然不会触发部署管道。
在你提供的截图中,有三点需要你注意。
First,因为您使用的是YAML,所以我们不需要在UI中设置配置构建完成触发器:
因此,我们需要从UI中删除它:

因为:
以前,您可能已经导航到YAML管道的经典编辑器,并在UI中配置了生成完成触发器。虽然这种模式仍然有效,但已不再被推荐。建议的方法是在YAML文件中直接指定管道触发器。在经典编辑器中定义的构建完成触发器有各种缺点,现在已经在管道触发器中解决了这些缺陷。例如,无法使用生成完成触发器在与触发管道的分支相同的分支上触发管道。
第二个,我们只需要提供没有完整路径的分支名称,所以YAML应该是:
resources:
pipelines:
- pipeline: WorkspaceBuild
source: UPS1_Workspace
project: UPS1_Workspace
trigger:
branches:
- master
- azure-pipelines-wf第三,如果触发管道位于相同的Azure DevOps项目中,则可以省略指定项目名称。
resources:
pipelines:
- pipeline: WorkspaceBuild
source: UPS1_Workspace
trigger:
branches:
- master
- azure-pipelines-wf如果触发管道位于另一个Azure DevOps项目中,则必须使用项目: OtherProjectName指定项目名称。如果触发管道位于另一个Azure DevOps组织中,则还必须创建到该项目的服务连接并在管道资源中引用它。有关更多信息,请参见管道资源。
有关更多细节,请查看文档触发一个又一个管道。
Update2:
根据您提供的图像:

触发器分支应该包括管道UPS1_Workspace位于的分支,而不是管道wf-stg.yml。
例如,我的管道UPS1_Workspace在分支DemoBranch下

然后将分支DemoBranch添加到wf-stg.yml中作为触发器分支:
resources:
pipelines:
- pipeline: WorkspaceBuild
source: UPS1_Workspace
trigger:
branches:
- master
- DemoBranchhttps://stackoverflow.com/questions/63019825
复制相似问题