【问题标题】:Cannot trigger build via push to another repository in a YML Pipeline无法通过推送到 YML 管道中的另一个存储库来触发构建
【发布时间】:2019-08-07 22:09:02
【问题描述】:

我有以下存储库:

  • my-app-repo - 包含应用的代码
  • pipeline-repo - 构建 my-app-repo 以及其他管道的集合

我正在尝试在 pipeline-repo 中构建一个 yml 管道,该管道将在提交到 my-app-repo 时触发。

根据the official yml documentation,这听起来可能,但我无法让它工作。

这是我尝试过的:

pipeline-repo/my-app-repo-build.yml

resources:         
  repositories:
  - repository: target_repo      
    type: git
    name: my-project/my-app_repo
    trigger:
      branches:
        include:
        - master

jobs:
  - job: 
    steps:
      - script: echo "Should be triggered from a push to my-app-repo!"

当我推送到my-app-repo 时,构建没有触发。它仅在提交到 source 存储库 (pipeline-repo) 时开始,我无法更改它,因为它包含 yml 定义。

我错过了什么简单的东西吗?

【问题讨论】:

  • 您好,我目前正在寻找这样的功能,我想知道您是否找到了解决此问题的方法或目前没有办法?
  • @Matrix 我也在研究这种类型的设置。你知道它现在是否支持(2020 年 6 月)?
  • @OvidiuBuligan 我不确定,我还没有看到任何关于此的消息。

标签: azure-devops azure-pipelines azure-pipelines-build-task


【解决方案1】:

编辑:

我看到您在您提到的 github 存储库中添加了一个问题。我同意它似乎坏了。

虽然您没有完全尝试为您的管道提供模板功能,但您可以将其用作解决方法,直到您创建的问题得到解决。

我已经在我的操场上对此进行了测试,它似乎可以工作。

在应用程序库中

resources:
  repositories:
    - repository: templates
      type: git
      name: Pipeline-Templates      

trigger:
  branches:
    include:
      - master

jobs:
- template: azure-pipelines-template.yml@templates

在管道存储库中

jobs:
- job: Get_Last_10_Commits
  pool:
    vmImage: 'vs2017-win2016'
  steps:
  - task: PowerShell@2
    inputs:
      targetType: 'inline'
      script: |
        cd $(Build.SourcesDirectory)
        Write-Host "Show git log (last 10):"
        git log --oneline -10

这种解决方法的一个“优势”是您不再需要指定要checkout的存储库是资源存储库而不是self(您的模板存储库)作为 self 存储库是 app-repo。

这将允许您通过将管道核心放在您想要的单独存储库中来限制对管道核心的更改,但仍会在 app-repo master 上触发。

不理想的 b/c 你现在有 2x .yml 文件用于你需要的每个构建,但这基本上是解决方法的定义:不理想


您的 include 语法似乎有误。您是否尝试过使用 simple syntax

所有示例(以及我的经验)表明,当您的触发器具有 includeexclude 规范时,您应该使用通配符语法。

resources:         
  repositories:
  - repository: myPHPApp      
    type: GitHub
    connection: myGitHubConnection
    source: ashokirla/phpApp
    trigger:
      branches:
        include:
        - features/*
        exclude:
        - features/experimental/*
      paths:
        exclude:
        - README.md

【讨论】:

  • 不幸的是,这也行不通。根据 (docs.microsoft.com/en-us/azure/devops/pipelines/build/…) “对于路径,您可以包含 * 作为最后一个字符,但它与单独指定目录名称没有任何不同。”。在我上面的例子中,我只是像链接中的示例一样简单地列出 master。
  • 此外,azure-pipelines-yaml repo 的文档看起来好像已经过时了。它似乎与官方架构参考不匹配 (docs.microsoft.com/en-us/azure/devops/pipelines/…)。我现在不确定我所追求的是否可能。
  • 您是否将 yaml 与源代码分离以使用模板?
  • 不完全是 - 出于组织和访问相关的原因,希望将一组应用程序管道放在一起。
猜你喜欢
  • 2014-08-15
  • 2020-12-05
  • 2015-04-21
  • 2022-11-29
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 2021-05-02
相关资源
最近更新 更多