首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该如何在另一条管道的末尾触发一条管道?使用msdocs中的示例将导致“管道资源输入必须有效”错误。

我应该如何在另一条管道的末尾触发一条管道?使用msdocs中的示例将导致“管道资源输入必须有效”错误。
EN

Stack Overflow用户
提问于 2020-07-21 17:25:39
回答 2查看 3.4K关注 0票数 3

无法在完成其他管道时触发管道

原创

我正试图在devops管道中为我们的角度应用程序构建几条发布管道。我们使用的是Nx工作区,因此能够在工作区构建的末尾触发这些管道是很重要的。

下面是微软(https://learn.microsoft.com/en-us/azure/devops/pipelines/process/pipeline-triggers?view=azure-devops&tabs=yaml)提供的示例文档代码

代码语言:javascript
复制
# 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

这里是我的完整管道:

代码语言:javascript
复制
# 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'

更新

好的,修复命名允许每个管道运行。但是,构建管道仍然不会触发部署管道。

工作空间构建,wf部署)

部署管道资源标记

部署管道触发器设置

更新2

嘿,这还是没用的。我从触发器ui面板中删除了所有CI设置,并确保没有勾选覆盖框。以下是一些有助于诊断的图像

管道状态

触发管道步进结果

启动触发管道的yml文件

EN

回答 2

Stack Overflow用户

发布于 2021-07-15 15:06:23

刚刚解决了这个错误,管道资源管道名必须是有效的-它实际上意味着给出的source:管道名无效。

在2021年,AzureDevOps上似乎没有UI --这一切都是YAML,这使得事情变得更简单。

假设两个存储库都在同一个高级别项目分组中:

  1. 上游存储库有一个管道(源管道),它具有任意名称--假设这是一个名为My Upstream Pipeline (release)的管道。在此存储库或其管道中不需要特殊配置。
  2. 下游存储库有一个管道,您希望在上游成功构建任何'release/‘分支之后触发该管道。在其yaml中添加以下咒语:
代码语言:javascript
复制
resources:
  pipelines:
    - pipeline: alias_name
      source: 'My Upstream Pipeline (release)'
      trigger:
        branches:
          - release/*

如果您输入‘must管道(释放)’,那么您将得到错误管道资源alias_name必须是有效的。

将构建的下游回购的分支是默认分支--我认为除了更改默认分支之外,没有任何方法可以改变这个分支。

如果需要根据触发管道的标识在下游管道中进行任何额外处理(例如,传递已发布的工件),我建议选择alias_name来匹配上游存储库的名称,并使用环境变量中合法的字符。这是因为ADO通过多个环境变量将关于上游触发项目的信息提供给下游管道,alias_name作为这些变量名称的一部分被合并:

  • RESOURCES_TRIGGERINGALIAS = alias_name

然后,以下变量将alias_name超感知为ALIAS_NAME

  • RESOURCES_PIPELINE_ALIAS_NAME_PROJECTID -上游项目ID
  • RESOURCES_PIPELINE_ALIAS_NAME_PIPELINEID -上游管道ID
  • RESOURCES_PIPELINE_ALIAS_NAME_RUNID -the上游构建或运行ID

然后,您可以使用:PIPELINEURL="${SYSTEM_TEAMFOUNDATIONSERVERURI}${RESOURCES_PIPELINE_ALIAS_NAME_PROJECTID}/_build?buildId=${RESOURCES_PIPELINE_ALIAS_NAME_RUNID}"构造上游(触发)管道的URL。

并从其中获取已发布的工件。

代码语言:javascript
复制
          - 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: .

参考资料:

  1. https://learn.microsoft.com/en-us/azure/devops/pipelines/process/pipeline-triggers
  2. https://learn.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema%2Cparameter-schema#the-pipeline-resource-metadata-as-predefined-variables
票数 2
EN

Stack Overflow用户

发布于 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应该是:

代码语言:javascript
复制
resources:
  pipelines:
  - pipeline: WorkspaceBuild
    source: UPS1_Workspace
    project: UPS1_Workspace
    trigger: 
      branches: 
      - master
      - azure-pipelines-wf

第三,如果触发管道位于相同的Azure DevOps项目中,则可以省略指定项目名称。

代码语言:javascript
复制
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中作为触发器分支:

代码语言:javascript
复制
resources:
  pipelines:
  - pipeline: WorkspaceBuild
    source: UPS1_Workspace
    trigger: 
      branches: 
      - master
      - DemoBranch
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63019825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档