2016-07-05 63 views
2

我正致力於改進我們當前的構建系統,以實現非常大的.Net項目。把它放在上下文中 - 這個項目有178個Visual Studio Solutions和超過800個csproj文件。Gitlab-CI:只在特定文件夾更新時觸發構建

我們目前正在使用TeamCity,但隨着團隊數量的增加,它變得非常混亂,並且變得非常難以維護。在某個時候,我們遷移到了Gitlab(在我到達之前),並且我正在嘗試使用Gitlab-CI獲得可行的解決方案。

我已經設法構建,測試和打包,使用Gitlab-CI的每個組件,但它並不漂亮,因爲一切都在1 Job中完成。我們現在決定這樣做,因爲如果我們構建單個組件,管理Gitlab-CI中的所有工件非常困難(並且很慢)。但我會留下的另一個SO問題... ;-)

我今天的問題是如何配置我的.gitlab-ci.yml文件只執行一項工作,如果該特定文件夾的變化?

考慮這個(簡體)目錄樹: . ├── Build ├── Config ├── Core ├── Database ├── Services └── Websites

如果更改在合併到主影響核心或配置,那麼整個樹應當建立和測試,因爲一切都取決於這些組件。 但是,如果對服務進行更改,則不需要構建和測試服務以外的任何其他服務。

同樣,也許這太複雜了,如果數據庫發生變化,那麼只能建立數據庫和服務。

+0

你使用專用支路的成分? – Martin

+0

@mgansler我假設你是指git分支?在這個階段沒有 - 所有的東西都坐在一個倉庫裏。通常情況下,一個團隊將分出主要的回購,然後將他們的更改合併回去。 –

+0

是的,我的意思是git分支。如果你要爲每個組件引入一個專用分支,你可以使用gitlab-ci的'only':http://docs.gitlab.com/ce/ci/yaml/README.html#only-and-except – Martin

回答

1

只是偶然發現了你的問題。

這只是和想法,但在您的構建腳本中,您可以將git log -n 1 --pretty=format:%h Databasegit log -n 1 --pretty=format:%h進行比較,只有在不同時才重建。

git log -n 1將向您顯示關於您的回購或特定目錄/文件的最新提交的一些信息。

commit <full sha hash of current commit> 
Author: Author Name <[email protected]> 
Date: Fri Mar 10 11:08:42 2017 +0100 

    commit message 

--pretty=format:%h只會輸出縮短的散列

git log -n 1 --pretty=format:%h 
1234567 

git log -n 1 --pretty=format:%h Database 
7654321 
相關問題