提交 GitHub PR 时未触发 PR(Azure 管道 YAML)

4

目标

我对Azure和pipelines相当陌生,正尝试从Github的pr触发pipeline。

这是pipeline yaml:pipeline.yml

trigger: none # I turned this off for to stop push triggers (but they work fine)

pr:
  branches:
    include:
      - "*" # This does not trigger the pipeline 

stages:
  - stage: EchoTriggerStage
    displayName: Echoing trigger reason
    jobs:
      - job: A
        steps:
          - script: echo 'Build reason::::' $(Build.Reason)
            displayName: The build reason

# ... some more stages here triggered by PullRequests....
# ... some more stages here triggered by push (CI)....

Github上的PR看起来像这样:

enter image description here

问题

然而,当推送触发器正常工作时,管道并未被触发。

我已经在文档中阅读过,但我不知道为什么这不起作用。

当我通过git push触发它时,管道运行得非常好。但是,当我尝试使用Github上的PR来触发它时,什么也没发生。在上面的代码中,我尝试关闭推送触发器,并允许所有PR触发管道。但仍然没有反应。

我不想删除管道然后创建新的管道。

更新

我根据下面的建议更新了yaml文件。由于管道现在实际上通过一个推送命令运行,因此yaml文件的其余细节无关紧要,已省略。

我尝试过的其他方法

  • 在Github上开启新的PR
  • 在Github上关闭/重新打开PR
  • 对现有的PR进行更改

-> 仍然没有触发管道。

4个回答

4

你的管道有错误,应该像这样:

trigger: none # turned off for push

pr:
  - feature/automated-testing

steps:
- script: echo "PIPELINE IS TRIGGERED FROM PR"

请修改此处。

  - stage:
      - script: echo "PIPELINE IS TRIGGERED FROM PR"

to

  - stage:
    jobs:
    - job:
      steps:
      - script: echo "PIPELINE IS TRIGGERED FROM PR"

编辑

我使用了您的流程


trigger: none # I turned this off for to stop push triggers (but they work fine)

pr:
  branches:
    include:
      - "*" # This does not trigger the pipeline 

stages:
  - stage: EchoTriggerStage
    displayName: Echoing trigger reason
    jobs:
      - job: A
        steps:
          - script: echo 'Build reason::::' $(Build.Reason)
            displayName: The build reason

# ... some more stages here triggered by PullRequests....
# ... some more stages here triggered by push (CI)....

看起来一切都正常。

这是PR,这是为它构建的代码

enter image description here

我没有那样做,但你可以尝试通过分支策略来强制执行。请按照以下步骤进入存储库设置:

enter image description here


3
解决方案是前往Azure管道->编辑管道->触发器->启用PR验证。

“启用PR验证”似乎不再存在了 - 有什么想法吗?我正在使用Azure Git存储库而不是GitHub,可能这就是为什么它丢失的原因... - Emil

1

您可以按照以下步骤来解决管道问题。

1、首先,您需要确保从Azure DevOps门户中的yaml文件创建了一个管道。请参见本教程中的示例

2、您的yaml文件的以下部分是不正确的。- script任务应该在steps部分下面。

更改为:

stages:
- stage:
    - script: echo "PIPELINE IS TRIGGERED FROM PR"

至:

 stages:
 - stage:
   jobs:
   - job:
     step:
     - script: echo "PIPELINE IS TRIGGERED FROM PR"

3、我看到你在yaml文件中使用了模板,请确保模板yaml文件格式正确。例如:

你的dockerbuild-dashboard-client.yml模板是一个步骤模板。你需要确保它的内容如下:

parameters:
...
steps:
- script: echo "task 1"
- script:  echo "task 2"

你的 webapprelease-dashboard-dev-client.yml 是一个 作业模板。其内容应如下:

parameters:
  name: ''
  pool: ''
  sign: false

jobs:
- job: ${{ parameters.name }}
  pool: ${{ parameters.pool }}
  steps:
  - script: npm install
  - script: npm test
  - ${{ if eq(parameters.sign, 'true') }}:
    - script: sign

4、在 Azure DevOps 门户上创建了流水线之后,您可以手动运行此流水线,以确保 yaml 文件中没有错误并且可以成功执行流水线。

5、如果以上所有内容都已检查,但 PR 触发器仍然无法正常工作,则可以尝试删除在第一步创建的 Azure DevOps 门户上创建的流水线,并从 yaml 文件重新创建一个新的流水线。


谢谢。管道正在Azure上运行,并且使用了trigger:git push,因此语法应该没问题。然而PR仍然无法正常工作。 - meerkat
@meerkat,我复制了你更新的yaml文件。PR触发器在我的端上完美地工作了。你能否尝试从Azure管道中删除管道定义(而不是GitHub中的yaml文件),并重新创建一个新的管道?从现有的azure-pipelines.yml文件中重新创建管道定义非常容易。 - Levi Lu-MSFT
@meerkat,您需要确保azure-pipelines.yml文件也存在于pr目标分支中。 - Levi Lu-MSFT
azure-pipelines.yml 文件存在于目标分支和基础分支中。通过删除 pipeline 定义,您的意思是删除 Pipelines 中的整个 pipeline 吗?然后从 yaml 文件中重新创建相同的 pipeline? - meerkat
@meerkat 是的,在 Pipelines 中删除管道定义。然后从 yaml 创建相同的管道定义。 - Levi Lu-MSFT

0
非常糟糕。我在整个Azure上一直遇到很多问题。
关闭“限制来自分叉的GitHub存储库的构建拉取请求”功能后,启用了流水线的PR触发器。
在您的DevOps组织下:

enter image description here

enter image description here

这很糟糕,因为据说这个设置是来自一个分叉仓库而不是从同一分支的检出。

看起来Azure团队在这方面没有经过深思熟虑,如果可以像这里提到的那样通过“启用PR验证”来禁用它,那就更好了。这已经是我第二次寻找一个在论坛上被认为易于配置的设置,但现在却完全无效了。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接