2017-10-19 63 views
10

將TeamCity與git結合使用。
目前TeamCity設置爲「master」作爲默認分支。阻止TeamCity構建在快速合併上,以便在該構建中存在SHA1的情況下

通常情況下,開發發生在另一個分支(例如「dev」) - TeamCity設置爲監視「dev」上的更改並自動構建。

如果DEADBEEF-SOME-SHA已建成&標記通過的TeamCity作爲構建1.2.3.4的「dev」我們是Git可以SHA1快進合併爲「master」,TeamCity的仍執行構建 - 所以我們最終DEADBEEF-SOME-SHA被標記作爲1.2.3.4和1.2.3.5。

據我所知,製作「dev」默認分支會阻止這一點。
是否有另一種方法來阻止TeamCity執行構建,如果構建已經成功執行相同的SHA1?

請注意,如果我們直接推送到master(並且SHA1在其他分支上不存在/尚未構建),我仍然希望看到構建。

我想在TeamCity中完全實現這一點 - 如果可能的話 - 沒有額外的腳本/文件寫入等等等

+0

我想在TeamCity中完成這一切 - 理想情況下全部都在觸發器配置部分內完成。 – eddiewould

回答

1

如果僅僅希望限制構建自動觸發的分支,請爲VCS觸發器設置分支過濾器:

項目設置=>觸發器=> VCS觸發器(編輯)=>分支過濾器

設置分支濾波器

+:dev 

然後(儘管「主人」是默認的分支)建立纔會自動觸發的開發。仍然有可能在其他分支上執行ad-hoc構建(假設VCS root允許它)

+0

有趣。比我的答案更精確。 +1 – VonC

5

您可以查詢特定SHA1的構建...但是您可以查詢have to know your previous buildID for that

所以我會做的是:

  • 寫在一個專用的文件夾中(所有代理訪問),在每個作業年底建成的SHA1
  • 只有當SHA1文件是觸發一個新的工作尚不存在。
+0

感謝您的建議,但正在嘗試避免更多移動部分(寫入文件) – eddiewould

2

也許我錯過了一些東西:

如果提交的標籤在你的回購,開始一個新構建之前,你可以檢查頭部提交尚未標記:

# if you use exclusively lightweigth tags : 
git show-refs --tags | grep $(git rev-parse HEAD) 
# also check that the tag looks like a build tag, e.g : refs/tags/1.2.3.4 
    | grep "refs/tags/[1-9.]*$" 

# if you use annotated tags : 
git show-refs --tags --dereference | grep $(git rev-parse HEAD) 
# the grepped line may look like : refs/tags/1.2.3.4^{} 
    | grep -E "refs/tags/[1-9.]*(\^\{\})?$" 
+0

您能否詳細說明在哪裏放置?在VCS觸發器規則部分? – eddiewould

相關問題