一犁享、GOCD 一些基礎(chǔ)概念
1. Task
任務(wù)或構(gòu)建任務(wù)是需要執(zhí)行的操作文兢。 通常是一個(gè)單一的命令
2. Job
- 由多個(gè) Tasks 組成
- 每個(gè)任務(wù)都是作為一個(gè)獨(dú)立的程序來運(yùn)行的
- Task 執(zhí)行方式為順序執(zhí)行娱两,Task 之間是相互獨(dú)立的熔掺,即修改的環(huán)境變量不會(huì)影響到其它 Task
- 一個(gè) Task 失敗邑茄,則該 Job 失敗蛋叼,除非另有說明落包,否則其余 Task 將不會(huì)運(yùn)行
3. Stage
- 由多個(gè) Jobs 組成,每個(gè) Job 是獨(dú)立的
- Job 執(zhí)行方式為并行部蛇,由于 Job 之間是相互獨(dú)立的,某個(gè) Job 失敗后咐蝇,其它的 Job 會(huì)被運(yùn)行到完成
- 一個(gè) Job 失敗涯鲁,則該 Stage 失敗
4. Pipeline
由多個(gè) Stages 組合而成
Stage 執(zhí)行方式為順序執(zhí)行,一個(gè) Stage 失敗有序,將不會(huì)執(zhí)行后續(xù) Stage
一個(gè) Stage 失敗抹腿,則該 Pipeline 失敗
5. Materials and Triggers
使用Git、SVN時(shí)旭寿,GoCD 可以輪詢檢測其變更警绩,以觸發(fā) Pipeline,也可以手動(dòng)觸發(fā)
Pipeline 可以有多個(gè) material(可以簡單的理解成代碼源)盅称,任何一個(gè) material 變更都可以觸發(fā) Pipeline
6. Pipeline dependency material
-
Pipeline 和 Pipeline 之間可以產(chǎn)生依賴關(guān)系肩祥,例如當(dāng) Pipeline1 完成之后觸發(fā) Pipeline2
-
Pipeline 和Pipeline 之間也可以通過上游 Pipeline 中的某個(gè) Stage 完成后后室,觸發(fā)下游 Pipeline 執(zhí)行
7. Fan-out and fan-in
Fan-out: 一個(gè) material 的完成,觸發(fā)下游多個(gè) Pipeline 混狠,該 material 不一定是 Pipeline 依賴 material 岸霹,可以是任何 material
Fan-in:
- 多個(gè)上游 material 觸發(fā)下游 Pipeline,在觸發(fā)下游 Pipeline 之前将饺,GoCD 將確保上游 Pipeline 的修訂是一致的
如圖贡避,git 觸發(fā) Pipeline1 和 Pipeline2 ,而 Pipeline1 的 Stage2 的完成和Pipeline2 的 Stage1 的完成是觸發(fā) Pipeline3 的條件予弧,如果 Pipeline2 的 Stage1的完成較快而 Pipeline1 的 Stage2 完成較慢刮吧,Pipeline 會(huì)等待 Pipeline1 的Stage2 的完成后被觸發(fā),它不會(huì)觸發(fā)與 Pipeline1 的不一致或舊的修改, 以確保一致性掖蛤。
8. Value Stream Map (價(jià)值流圖)
- VSM 是端到端的視圖杀捻,詳細(xì)描述了它的上下游依賴關(guān)系,在決定哪個(gè) Pipeline
被觸發(fā)時(shí)坠七,GoCD 的 fan-in 和 fan-out 解決方案將始終如一地處理所有依賴項(xiàng)水醋。
如圖旗笔,當(dāng) Repo1(git) 中有新的提交時(shí)彪置,GoCD 不會(huì)立即觸發(fā) Pipeline5,它將等待 Pipeline1 觸發(fā)并成功完成蝇恶,然后等待 Pipeline4 觸發(fā)并成功完成拳魁,最后,
它將觸發(fā) Pipeline5 與 Pipeline1 使用相同的 Repo1 相同的修訂版本撮弧。
9. Artifacts
GoCD 中的 Artifacts 是在 Pipeline 運(yùn)行期間最常生產(chǎn)的文件或目錄潘懊,每一個(gè)Job 都可以選擇發(fā)布 Artifacts,即文件或目錄贿衍。在運(yùn)行 Job 之后授舟,GoCD 將確保已發(fā)布指定的 Artifacts,并向用戶和其他下游階段和管道提供贸辈。
GoCD 提供了一種特殊的任務(wù)释树,稱為“獲取 Artifacts”,它允許從任何祖先 pipline 中提取和使用 Artifacts擎淤,即當(dāng)前 pipline 上游的任何 pipline奢啥。GoCD 將確保獲取 Artifacts 的正確版本,而不考慮系統(tǒng)中可能發(fā)生的任何其他事情嘴拢。
10. Agent
GoCD 的 agent 是 GoCD 生態(tài)系統(tǒng)的工人桩盲。系統(tǒng)中配置的所有任務(wù)都運(yùn)行在GoCD agent 上。GoCD 服務(wù)器輪詢 material 的變化(這發(fā)生在GoCD服務(wù)器本身)席吴,然后赌结,當(dāng)檢測到更改并需要觸發(fā) pipline 時(shí)捞蛋,相應(yīng)的 job 被分配給代理,以便他們執(zhí)行任務(wù)柬姚。
agent 選擇分配給他們的 job 襟交,在 job 中執(zhí)行task ,并向 GoCD 服務(wù)器報(bào)告 job 狀態(tài)伤靠。然后捣域,GoCD 服務(wù)器整理來自不同 job 的所有信息,然后決定 stage 的狀態(tài)宴合。
每個(gè)部署業(yè)務(wù)的機(jī)器上都必須安裝 agent
11. Resources資源是我們打在 Agent 的標(biāo)簽,以表示哪些 Agent 能運(yùn)行這個(gè)Job
如圖焕梅,我們運(yùn)行一個(gè)需要 Firefox 資源的 Job,那么只有 Agent1 和 Agent3 滿足卦洽,如何知道 Agent1 和 Agent3 上有 Firefox 贞言?在這兩個(gè) Agent 上打上標(biāo)簽"Firefox(or XXX)"
12. Environments
- GOCD 中的 Environments 是對(duì) Pipeline 和 Agent 進(jìn)行分組和隔離的一種方式
- Pipeline 可以與最大的一個(gè) Environment 相關(guān)聯(lián)。
- Agent 可以與多個(gè)Environment 或任何 Environment 相關(guān)聯(lián)阀蒂。
- Agent 只能在其關(guān)聯(lián)的 Environment 中提取屬于 Pipeline 的作業(yè)该窗。
- 與 Environment 相關(guān)聯(lián)的 Agent 不能在與任何 Environment 無關(guān)的 Agent 中獲取 job 。
13. Environment Variables -
環(huán)境變量在各層級(jí)都可以配置蚤霞,原則類似于全局變量和局部變量的概念酗失,最底層的變量值會(huì)覆蓋上層的變量值
注:此環(huán)境變量跟上面的 Environment 不要混淆,前者指 a=1 變量賦值昧绣,后者為運(yùn)行環(huán)境
上圖各變量的最終值為:
ENV_ENV => 1
ENV_PIP => 2
ENV_STG => 3
ENV_JOB => 4
MY_VAR => 4
二规肴、Pipelines Dashboard in GoCD
以我的 dashboard 為例,定義了兩個(gè) pipeline group夜畴, 在 dashboard 里 pipeline 被列在他們所屬的 pipeline group 下面
注:
- “觸發(fā)” 按鈕強(qiáng)制一條 pipeline 開始構(gòu)建活動(dòng)拖刃。
-
帶有[選項(xiàng)按鈕的觸發(fā)器], 允許選擇 pipeline 應(yīng)該構(gòu)建的 material 的修訂,并觸發(fā) pipeline贪绘。
- “暫投夷担”(Pause)按鈕暫停 pipeline 的調(diào)度
Dashboard 上的 Personalize 按鈕來定制和控制 Dashboard 看到的 Pipeline ∷肮啵可以選擇要查看的 Pipeline 均函,在這個(gè)列表中,并通過單擊“Apply”按鈕來保存選擇垄琐。從那時(shí)起边酒,Pipeline 指示板將只顯示選擇的。
如果一個(gè)新的 Pipeline 被其他人添加狸窘,Pipeline 也會(huì)顯示在該賬戶的的Dashboard 上墩朦。取消(Show newly created pipelines)復(fù)選框,以防止它們出現(xiàn)在我們的 Dashboard 上翻擒。
有四種配置 Pipeline 的方法:
通過管理界面來配置 Pipeline氓涣。
通過 Pipeline 界面的 “Config XML” 選項(xiàng)卡直接編輯 XML牛哺。
還可以通過調(diào)用配置API來配置 Pipeline
通過文件系統(tǒng)直接進(jìn)行 XML 編輯進(jìn)行配置后。默認(rèn)情況下劳吠,Go服務(wù)器每5秒對(duì)文件系統(tǒng)進(jìn)行輪詢引润,以更改 cruise-config.xml。該文件的位置顯示在 Admin >配置XML選項(xiàng)卡的右上角痒玩。
三淳附、Agent
Agent 頁面列出了服務(wù)器可用的所有代理和它們當(dāng)前的狀態(tài)。當(dāng) Agent 首次連接到服務(wù)器時(shí)蠢古,它是 “Pending”(掛起狀態(tài))奴曙。管理員必須在 GoCD 將工作安排在該Agent 之前啟用 Agent。
管理員也可以禁用 Agent 草讶。GoCD不會(huì)為一個(gè)被 Agent 的代理安排工作洽糟。如果在Agent 被禁用時(shí)正好有一項(xiàng)工作正在該 Agent 上建立,則該工作將被完成;然后才禁用 Agent堕战。管理員在重新安排工作之前需要啟用 Agent坤溃。
管理員可以選擇刪除不再需要的 Agent。在刪除 Agent 之前嘱丢,必須禁用該Agent 薪介。處于(building)狀態(tài)或者(cancelled)狀態(tài)的 Agent 不能被刪除。
可以將資源與 Agent 關(guān)聯(lián)起來屿讽,首先選擇您感興趣的 Agent昭灵。然后點(diǎn)擊 Resources 按鈕。
四伐谈、安裝
服務(wù)器使用的默認(rèn)端口都是 8153(HTTP端口)和 8154(HTTPS端口),一個(gè)或多個(gè) Agent 可以安裝在任何節(jié)點(diǎn)上试疙,而不一定是安裝 GoCD 服務(wù)器的節(jié)點(diǎn)诵棵。唯一的要求是 GoCD 服務(wù)器的端口8153和8154可以從安裝 Agent 的節(jié)點(diǎn)訪問。
服務(wù)器硬件要求:
- 內(nèi)存 - 推薦最少 1GB 或者 2GB
- CPU - 最低2核,2GHz 主頻
- 硬盤 - 最低要求有1GB的剩余空間
依賴關(guān)系:
- Java Runtime Environment (JRE) version 8
- Git or other
運(yùn)行 GoCD 服務(wù)器的主機(jī)應(yīng)該有一個(gè)單獨(dú)的磁盤分區(qū)來存儲(chǔ) GoCD Artifacts祝旷。Artifacts存儲(chǔ)庫可以快速填充(特別是在存儲(chǔ)大型二進(jìn)制文件時(shí))履澳。如果不為Artifacts 創(chuàng)建單獨(dú)的分區(qū),系統(tǒng)磁盤將被填滿怀跛【啻可以在頁面 Pipeline Management 里或者 config xml 里指定 Artifacts 存儲(chǔ)位置。
以我的項(xiàng)目為例吻谋,我的 server 是用 docker 啟動(dòng)的忠蝗,在docker-compose指定了存儲(chǔ)卷
cr-uise--confi-g.xml 和 /godata/artifacts 在 同級(jí)目錄下 /godata/ 下,指定了 artifacts 的位置:
<cruise>
<server artifactsdir="artifacts">
...
</server>
</cruise>
如果需要更改 artifacts 存儲(chǔ)庫漓拾,那么安全的方法是:
- 暫停所有 Pipeline阁最,等待 agent 網(wǎng)格中的所有活動(dòng)作業(yè)完成(所有 agent 都處于狀態(tài) "idle")
- 關(guān)閉 GoCD 服務(wù)器
- 將 artifacts 存儲(chǔ)庫復(fù)制到新位置
- 按照上面的描述手動(dòng)編輯 GoCD 的配置文件戒祠,告訴 GoCD 在哪里可以找到新的 artifacts
- 重啟GoCD服務(wù)器
Agent所在機(jī)器的硬件要求:
- 內(nèi)存 - 推薦最少 128MB 或者 256MB
- CPU - 最低2GHz主頻
依賴關(guān)系: - 需要與 GoCD 服務(wù)器的 Java 版本相同
Agent 本身并不需要太多內(nèi)存或 CPU。 但是速种,需要確保部署為構(gòu)建 Agent 的節(jié)點(diǎn)具有足夠的資源來構(gòu)建項(xiàng)目 --包括足夠的磁盤空間來檢查源代碼控制之外的源代碼姜盈。代碼控制工具(Git、SVN等)的客戶端軟件需要安裝在所有構(gòu)建 Agent 上配阵。另外馏颂,需要安裝任何其他軟件來構(gòu)建應(yīng)用程序(如不直接從源控制中檢出的項(xiàng)目源碼),需要安裝(例如棋傍,Maven或Rake)饱亮。
安裝 agent 之后需要將 GO_SERVER_URL 配置為 server 的地址
參考:
https://docs.gocd.org/current/
https://www.cnblogs.com/elisun/p/7071536.html
`