CI 全名 Continuous Integration(持續整合)
顧名思義,當一個團隊在協同開發一個專案的時候,肯定要持續不斷的整合測試,確保這次的change有沒有影響到原本的功能,但是工程師不可能每次都手動build code, build image, 掃程式碼漏洞, 單元測試.....,這樣肯定會花掉很多時間。
因此,CI指的是自動化持續整合,每當工程師push code到git後,CI工具會自動幫忙做一連貫的整合測試,如build code, build image, code scan, unit test...等等,及時幫忙找出build code有無fail,程式碼有無critical issue等等,分析軟體甚至會有如何修改code的建議呢!
因此,工程師可以透過report知道哪邊有問題,把時間花在開發上面,節省了很多人工整合測試的時間呢!
Note: 其中code scan,常見如程式碼品質分析=>SonarQube、程式碼安全分析=>Black Duck、WhiteSource 等等。
CD 全名Continuous Deployment(持續部署)
顧名思義,其實就是自動化部屬的意思!透過自動化將程式自動部屬到server。
例如,我有一個project是web系統,我將code push到git後,透過上述的CI之後就會進行CD這個階段,自動幫我把build好的war/ear等丟到jboss/wildfly等web server,或是把build好的war自動部屬到docker container中的web server,build成image再部屬到k8s上。
結論:
透過CI/CD工具,如最常見的Jenkins,可以讓工程師專注在開發上,只要將code push到git後,就會有一整套完整的整合、測試、部屬流程,可以大大節省很多時間呢。 甚至這個自動化流程是可以透過config客製化的,可以根據需求訂出符合每個團隊的自動化流程!