[英]Azure DevOps - Git Repository setup
我們有一個應用程序依賴於多個獨立的代碼模塊——它們之間沒有交互。 請參閱下面的粗略示例:
…………
考慮到代碼全部用於一個應用程序,但每個模塊彼此獨立,我如何為其設置存儲庫以使其完成以下任務:
我看到的唯一解決方案是為每個模塊創建一個 repo,但我希望有人知道比這更優雅的方法。
注意:我不是全職開發人員——我有更多的運營管理資格,而且我對 Git/repos/etc 的了解有限——所以我承認我可能遺漏了一條明顯的信息,這會使這個問題變得毫無意義。
為了實現您的目標,您應該考慮以下步驟:
specific path build
trigger:
branches:
include:
- master
- releases/*
paths:
include:
- Module-1/*
exclude:
- '*'
上面的配置只為 Module-1 設置了一個 CI 觸發器,忽略了其他目錄中的更改。 稍后在該腳本中,您可以為 Module-1 准備 package 和部署
如果您決定執行上述步驟,您還應該考慮使用模板以避免重復自己。 請檢查文檔。
您還應該 [添加分支策略] 來阻止直接提交到 master 分支。 在這里,您還可以考慮獲得額外服務的批准,以檢查您是否在幾個模塊中完成了 PR 更改。 在這種情況下,您可以決定該 PR 失敗。 有關更多信息,請檢查這兩個鏈接:
上面的步驟應該給你選擇性的構建和部署,並且當更改傳播到許多模塊時 PR 失敗。 我知道這離可行的解決方案還很遠,但我希望至少我向您展示了您應該遵循的方向。
如果您有很多模塊並且不想為每個模塊創建管道,您可以考慮以下解決方法。
如果 module1 在您的 repo 的文件夾 module1 中。 您可以在腳本任務中運行 git 命令git diff --name-only HEAD HEAD~1
以獲取更新哪個模塊。 並使用語句##vso[task.setvariable]
將模塊文件夾設置為變量。 然后您可以配置構建任務以僅構建更改的模塊。 請查看以下示例:
查看文檔以了解有關task.setvariable的更多信息。 點擊這里了解更多關於條件的信息。
steps:
- powershell: |
#get the changed files
$a = git diff --name-only HEAD HEAD~1
#get the changed module folders
$folders = $a | foreach {$_.split("/")[0]}
#assign the folders to variable folderName
echo "##vso[task.setvariable variable=folderName]$folders"
#this build task will only be executed when module1 changed
- task: VSBuild@1
displayName: Build Module1
condition: contains(variables.folderName, 'module1')
#this build task will only be executed when module2 changed
- task: VSBuild@1
displayName: Build Module2
condition: contains(variables.fileName, 'module2')
上面yaml是一個簡單的例子。 您可能需要根據您的項目稍微更改 powershell 任務腳本。 如果所有模塊都使用相同的構建配置,則只能使用一個構建任務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.