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