※ 引述《naticom (踢踢~)》之銘言:
: 最近接觸的工作需要架設build環境
: 但我剛出社會的時候沒有Jenkins也沒有GIT這些先進的環境
: (當初公司用 linux cron job 寫 script 每天晚上build一次,當然也沒有CI/CD..)
: 說實在現在學習起來有點門檻
其實Jenkins 不是什麼偉大的東西,一開始發明的目的也就是為了自動化建置,
然後後來針對很多複雜的情境新增了功能優化而已。
CI/CD 這種概念也不是多新的東西,我看過2000年初的專案就有類似的概念,只是
沒有這麼多方便的工具,所以很多東西都是需要手工做出來。然後這種概念越來越被
重視,後來的人們為了方便討論所以發明CI/CD 這個詞彙來指稱。
: 有些比較細節的問題想要請問專業的大大們
: (我是使用C/C++/JAVA需要編譯的語言)
: 1. Jenkins nightly build flow 通常是每晚把整個目錄清空
: 然後把Master branch拉下來整個重編嗎?
Nightly Build 等同 Daily Build ,是指 每天進行的工作。
這是一種週期性的工作,類似的還有Weekly Build/Monthly Build
至於要針對哪個 Branch 多半沒有特定,有可能是 master,也有可能是active sprint
branch。
: 2. CI的部分你們通常是有checkin就跑, 還是固定時間才拉下來一次呢?
: 跑CI的目錄會每次都全部清空重跑嗎?
: 還是只checkout變更的部分然後做incremental build?
這個是依照時間取捨的結果。如果一個Build job 能夠在幾分鐘內結束,當然用
per-commit clean build。但是如果時間太久,取捨一下變成 per-commit incr build
甚至是 Hourly build/ Daily Build。
決定採用哪種方案通常是 資源 跟 流程之間的取捨。
資源包含時間跟空間,依照產品的不同,一個小app跟android product binary,所
耗用的資源天差地遠。考量的點也不會相同。
流程也有許多差異,有的需要經過Code-Review 與CI/CD 才能 merge 回 remote branch
,有的很鬆散每個人都可以 push。這也影響到是否要做per-commit build。
: 3. 如果CI每次都會清空重跑,是不是和nightly的差別只在拉下來的branch來源不一樣呢?
: 謝謝
總結以上,我認為 CI 與 Nightly 本質上並沒有太大的差異。只是為了顧及到完整性
與效率,會把 Build Job 分成很多等級。週期越長的完整性越高,週期越短的完整性越
少。如果你的完整build task 可以在很短時間內完成,那根本不需要分等級,全部用
最高等級跑就好。
往往都是考慮到資源之後,才會需要區分等級。而且每個專案的分法都不同,不能一概
而論。