TeamCity构建依赖项
構(gòu)建依存關(guān)系的主題既不重要也不是次要的。 各種構(gòu)建工具從不同的角度處理此主題,從而提供各種解決方案,每種解決方案都有其優(yōu)點(diǎn)和缺點(diǎn)。
熟悉發(fā)行版和快照依賴項(xiàng)的Maven和Gradle用戶可能不了解TeamCity快照依賴項(xiàng),或者認(rèn)為他們與Maven相關(guān)(這是不正確的)。 熟悉工件和快照依賴關(guān)系的TeamCity用戶可能不知道,除了TeamCity提供的插件之外,添加Artifactory插件還使他們能夠使用工件并建立依賴關(guān)系。
上面提到的某些名稱(chēng)似乎建立得不夠充分,而其他一些則可能需要討論其使用方式。 考慮到這一點(diǎn),我決定在自己的博客文章中探索每種解決方案,并設(shè)定了提供足夠信息的目標(biāo),以便人們可以選擇最有效的方法。
第一篇文章探討了 Maven快照和發(fā)行版的依賴關(guān)系。 這是第二篇文章,其中介紹了TeamCity提供的工件和快照的依賴關(guān)系,而第三篇也是最后一部分將介紹TeamCity Artifactory插件提供的工件和構(gòu)建的依賴關(guān)系。
非Maven依賴項(xiàng)
雖然基于Java的Maven依賴關(guān)系管理和工件存儲(chǔ)庫(kù)在Java中非常普遍并且分布廣泛,但是在某些情況下,您仍然可能發(fā)現(xiàn)它們不足或不足以滿足您的需求。 首先,您可能沒(méi)有使用Java進(jìn)行開(kāi)發(fā),或者您的構(gòu)建工具可能未提供與Maven存儲(chǔ)庫(kù)的內(nèi)置集成,就像Ant (或它的Gant和NAnt衍生產(chǎn)品), SCons , Rake或MSBuild一樣 。 其次,快照Maven依賴項(xiàng)提供了自己的挑戰(zhàn),這在上一篇博客文章中已涉及到,這使得更難確保在構(gòu)建鏈中使用正確的快照依賴項(xiàng)。
為了解決這些情況,TeamCity提供了兩種方法來(lái)連接相關(guān)的構(gòu)建配置及其結(jié)果: 工件和快照相關(guān)性。
TeamCity神器依賴項(xiàng)
TeamCity中工件依賴的想法非常簡(jiǎn)單:在當(dāng)前版本開(kāi)始之前,下載另一版本生成的工件。 將工件下載到指定的文件夾(默認(rèn)情況下為checkout目錄)之后,您的構(gòu)建腳本可以使用它們來(lái)實(shí)現(xiàn)其目標(biāo)。 您可以在TeamCity文檔中找到配置詳細(xì)信息。
自然,此方案不適用于具有自動(dòng)依賴項(xiàng)管理的構(gòu)建工具,但它與接受或期望本地路徑(相對(duì)于checkout目錄)的構(gòu)建或shell腳本一起使用時(shí)效果很好。 請(qǐng)注意,復(fù)制不僅適用于生成的生成二進(jìn)制文件,而且還適用于任何類(lèi)型的二進(jìn)制文件或文本文件,例如上面的屏幕截圖所示的TeamCity覆蓋率報(bào)告。
關(guān)于指定工件依賴項(xiàng)有一個(gè)重要的細(xì)節(jié),即“從中獲取工件”配置,在此配置中,您應(yīng)指定應(yīng)從中獲取文件的構(gòu)建類(lèi)型。 該字段的可能值為“最后成功”,“完成”,“固定”或“標(biāo)記構(gòu)建”,以及構(gòu)建號(hào)或“從同一鏈構(gòu)建”。 盡管大多數(shù)值對(duì)于理解“上一次成功構(gòu)建”是默認(rèn)且普遍適用的選項(xiàng)來(lái)說(shuō)應(yīng)該是微不足道的,但“相同鏈”構(gòu)建的定義與TeamCity 快照依賴關(guān)系直接相關(guān)。
TeamCity快照依賴項(xiàng)
想象一下一個(gè)整體的多步驟構(gòu)建過(guò)程(構(gòu)建,測(cè)試,打包,部署),您決定將其拆分為多個(gè)較小的構(gòu)建,依次調(diào)用它們,形成執(zhí)行鏈。 這樣做可以使每個(gè)步驟分別配置或觸發(fā),并并行運(yùn)行某些步驟,以加快流程速度(例如執(zhí)行測(cè)試或構(gòu)建獨(dú)立的組件)。 最重要的是,它使整體維護(hù)非常容易。 但是,這樣做時(shí),即使在鏈步驟運(yùn)行的同時(shí)進(jìn)行了新的提交,也需要確保每個(gè)鏈步驟都使用從VCS提取的相同的一致源集。 這就是TeamCity 快照依賴項(xiàng)的目的:它們將多個(gè)構(gòu)建配置連接到稱(chēng)為執(zhí)行鏈的單個(gè)執(zhí)行鏈中 ,并且每個(gè)步驟都使用相同的源集 ,而與VCS更新無(wú)關(guān)。 請(qǐng)注意,TeamCity使用術(shù)語(yǔ)“快照依賴關(guān)系”可能會(huì)使熟悉Maven快照依賴關(guān)系的人們感到困惑,這是兩個(gè)不相關(guān)的概念。
快照依賴項(xiàng)的配置類(lèi)似于工件依賴項(xiàng)。 您可以在TeamCity文檔中找到配置詳細(xì)信息。
一起使用工件和快照依賴項(xiàng)
如果適用,建議定義構(gòu)建配置之間的兩種依賴關(guān)系,因?yàn)檫@不僅可以確保在整個(gè)鏈步驟中使用一致的源集,而且還可以確保生成的工件始終如一。 現(xiàn)在,上面提到的工件依賴項(xiàng)中的“從同一鏈構(gòu)建”的定義變得很清楚,因?yàn)檫@是此方案中唯一有意義的選項(xiàng)。
從某種意義上講,您可以考慮在獲取第一個(gè)源的“快照”之后,構(gòu)建鏈步驟與VCS更新隔離地運(yùn)行。 鏈工件可以從相同來(lái)源重新創(chuàng)建,也可以通過(guò)與工件相關(guān)的鏈步驟傳遞。 這使得鏈接步驟一致,可重現(xiàn)并且始終是最新的(當(dāng)應(yīng)用于使用鏈接工件時(shí)),而使用Maven快照依賴項(xiàng)則無(wú)法輕松實(shí)現(xiàn)。
TeamCity 7.0中的構(gòu)建鏈可見(jiàn)性
TeamCity 7.0通過(guò)為構(gòu)建鏈提供新的UI,使構(gòu)建鏈的步驟可見(jiàn)并可以重新運(yùn)行,從而將構(gòu)建鏈的概念提升到了一個(gè)全新的水平。 定義快照依賴關(guān)系后,新的“構(gòu)建鏈”選項(xiàng)卡將出現(xiàn)在項(xiàng)目報(bào)告中,以可視化方式表示所有相關(guān)的構(gòu)建鏈,并提供一種方法,使用原始提取的同一組資源手動(dòng)重新運(yùn)行任何鏈步驟。
建立鏈觸發(fā)
將構(gòu)建配置與快照相關(guān)性相關(guān)聯(lián),因此將其構(gòu)建分組到構(gòu)建鏈中,不僅使它們?cè)谑褂玫脑捶矫娓右恢?#xff0c;還影響將構(gòu)建添加到構(gòu)建隊(duì)列的方式:觸發(fā)某個(gè)鏈步驟后,默認(rèn)行為是除了最初觸發(fā)的步驟之外,還添加所有前面的鏈?zhǔn)讲襟E,并保持其各自的順序。 為了更加清楚,讓我重復(fù)一遍: 觸發(fā)某些鏈配置會(huì)在構(gòu)建隊(duì)列中添加之前的配置(在其左側(cè)),而不是在其后的(在其右側(cè))配置 ,盡管乍一看似乎是違反直覺(jué)的。 想法是標(biāo)記鏈執(zhí)行停止的位置,這恰好是最初觸發(fā)的配置。 它成為最后的執(zhí)行步驟。
要在鏈配置中發(fā)現(xiàn)VCS更改時(shí)觸發(fā)后續(xù)鏈步驟,您可以將帶有“快照依賴項(xiàng)更改觸發(fā)”選項(xiàng)的VCS觸發(fā)器添加到配置中,這將是最后一個(gè)執(zhí)行步驟。 然后,只要更新任何前面的鏈?zhǔn)讲襟E,就會(huì)觸發(fā)此配置,從而調(diào)度整個(gè)鏈?zhǔn)綀?zhí)行。
考慮到此行為,因此,您需要確定自動(dòng)觸發(fā)哪些配置以及應(yīng)手動(dòng)運(yùn)行哪些配置。 通常,VCS觸發(fā)器可以自動(dòng)觸發(fā)對(duì)外部環(huán)境沒(méi)有影響的較早的鏈?zhǔn)讲襟E,但是在人工驗(yàn)證了先前的鏈?zhǔn)浇Y(jié)果之后,會(huì)手動(dòng)調(diào)用最終鏈?zhǔn)讲襟E(可能會(huì)修改外部系統(tǒng))。 手動(dòng)運(yùn)行最終鏈?zhǔn)讲襟E的過(guò)程通常稱(chēng)為“促進(jìn)”先前完成的構(gòu)建。
樣本構(gòu)建鏈:編譯,測(cè)試,部署
想象一下連接到構(gòu)建鏈中的三個(gè)示例構(gòu)建配置: "Compile" , "Test"和"Deploy" : "Deploy"是依賴于"Test"的快照,快照依賴于"Compile" 。
在此示例場(chǎng)景中,遵循上面給出的建議,將自動(dòng)觸發(fā)"Compile"和"Test"配置,而手動(dòng)觸發(fā)"Deploy" 。 "Compile"配置中的VCS更改僅觸發(fā)該鏈?zhǔn)讲襟E的執(zhí)行,而"Test"配置中的VCS更改則觸發(fā)"Compile"和"Test"執(zhí)行(按此順序)。
將"Compile"配置添加到構(gòu)建隊(duì)列后,其源時(shí)間戳記將記錄在服務(wù)器上,以用于所有后續(xù)鏈?zhǔn)讲襟E。 如果將任何鏈?zhǔn)讲襟E連接到不同的VCS根,則其源也將根據(jù)相同的時(shí)間戳拉出。
促進(jìn)完成的構(gòu)建
一旦自動(dòng)鏈執(zhí)行停止(運(yùn)行"Test" ),您可以通過(guò)單擊未觸發(fā)的"Deploy"配置上相應(yīng)的“運(yùn)行”按鈕來(lái)繼續(xù)執(zhí)行(請(qǐng)參見(jiàn)上面的構(gòu)建鏈屏幕截圖)。 或者,可以通過(guò)其“構(gòu)建操作”促進(jìn)完成的"Test"構(gòu)建,并調(diào)用依賴于快照的配置-在這種情況下為"Deploy"配置。
摘要
本文概述了TeamCity工件和快照依賴項(xiàng),構(gòu)建鏈,如何觸發(fā)其步驟以及如何促進(jìn)完成的構(gòu)建。 我希望您現(xiàn)在除了了解構(gòu)建工具(例如Maven)提供的依賴關(guān)系之外,還應(yīng)該了解其工作原理以及何時(shí)(或不適合)使用TeamCity構(gòu)建依賴關(guān)系。
請(qǐng)參考TeamCity文檔以獲取有關(guān)此主題的更多信息:
- 依賴構(gòu)建
- 建立鏈
該系列的最后一篇博客文章將揭示如何使用TeamCity Artifactory插件來(lái)實(shí)現(xiàn)類(lèi)似于基于Maven的依賴管理的項(xiàng)目構(gòu)建鏈的行為。 敬請(qǐng)關(guān)注!
參考:來(lái)自Goldman ++博客的JCG合作伙伴 Evgeny Goldin的TeamCity構(gòu)建依賴項(xiàng) 。
翻譯自: https://www.javacodegeeks.com/2012/04/teamcity-build-dependencies.html
總結(jié)
以上是生活随笔為你收集整理的TeamCity构建依赖项的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: FXML:使用BuilderFactor
- 下一篇: 华为全新 85 英寸智慧屏通过 3C 认