簡體   English   中英

我可以設置一個 Azure DevOps 管道來跨多個存儲庫在 PR 中檢查/格式化源文件嗎?

[英]Can I set up a single Azure DevOps pipeline to lint/format source files in a PR across multiple repos?

簡而言之,每當對數十個存儲庫中的任何一個的拉取請求進行提交時,我都希望此管道運行以檢查源文件是否滿足某些 clang 格式標准,如果不滿足標准則發出警告。

最初,我只想格式化我們的源文件。 將來,我們可能想要更改格式化模式或添加 linter,因此這需要具有靈活性。

到目前為止,我已經建立了一個在單個回購協議上執行此操作的管道。 但是,這對我們的項目不起作用,因為為每個 repo 提供單獨的管道是不可行的。 對一個管道上的 linting/格式設置所做的任何更改都不會應用於其他管道。

在我為單個存儲庫設置管道的情況下,我向默認分支添加了一個構建驗證策略,它按預期工作。

為了將此解決方案擴展到整個項目,我將構建驗證添加到我們所有存儲庫的默認分支(作為可選的策略要求),然后修改管道,以便它格式化任何觸發它的存儲庫。 在我的測試 PR 中,我可以看到繼承策略包含的格式檢查,我可以看到構建尚未運行,我可以看到一個Queue按鈕,但我無法通過提交 PR 來觸發運行或者單擊Queue按鈕。

這是我認為管道可能的樣子。

resources:
  repositories:
  - repository: repo_1
    type: git
    name: repo_1
    ref: develop
    trigger:
      branches:
        include:
        - develop
  - repository: repo_2
    type: git
    name: repo_2
    ref: develop
    trigger:
      branches:
        include:
        - develop
  - repository: repo_N
    type: git
    name: repo_N
    ref: develop
    trigger:
      branches:
        include:
        - develop

pool:
  vmImage: 'ubuntu-latest'

steps:
- checkout: self
- checkout: repo_1
- checkout: repo_2
- checkout: repo_N

- task: Bash@3
  displayName: Install Tools
  inputs:
    targetType: 'inline'
    script: |
      sudo apt install clang-format

- task: Bash@3
  displayName: Format Source Files
  inputs:
    targetType: 'inline'
    script: |
      echo "Formatting source files in ... $(Resources.TriggeringAlias)"
      find $(Resources.TriggeringAlias)/src/ -iname *.hpp -o -iname *.cpp | xargs clang-format -style="LLVM" -i

它將為我們所有的回購設置開發觸發器(我的組織的默認設置),在觸發運行的任何回購中格式化源文件,然后返回該運行的結果。 據推測,我會添加一些東西來提醒提交 PR 的人管道進行了格式更改,表明他們應該格式化他們的源文件以匹配我們使用的任何標准,然后再進行一次提交。

仔細閱讀文檔后,我不確定 DevOps 是否支持我正在嘗試做的事情。 上面的 .yml 中的觸發器不會像構建驗證那樣在提交到 PR 時激活,僅在 PR 合並時激活(我假設)。

希望我已經正確解釋了我的問題。 讓我知道是否需要提供更多信息:)

根據我的理解,您期望的是當任何 repo 有提交時,管道可以由 PR 觸發。 我不確定您是如何配置構建策略的,但我的測試沒有問題。 下面是我的YAML和repo信息,供大家參考。

在我的測試中,這里有三個repos,MainRepo、Repo1 和Repo2。 管道的YAML文件存放在MainRepo中。 YAML 文件:

resources:
 repositories:
   - repository: Repo1
     name: Repo1
     type: git
     trigger:
      branches:
        include:
        - main
   
   - repository: Repo2
     name: Repo2
     type: git
     trigger:
      branches:
        include:
        - main

pool:
  vmImage: ubuntu-latest

steps:
- checkout: self
- checkout: Repo1
- checkout: Repo2

在 YAML 中,Repo1 和 Repo2 被指定為 repo 資源。

我在回購協議的所有主要分支上配置了構建策略。 在此處輸入圖像描述

當用於從其他分支合並到主分支的PR有新的commit時,就會觸發pipeline。 在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM