1. CI/CD
1.1 概念
持續(xù)集成(Continuous integration)是一種軟件開發(fā)實踐,即團隊開發(fā)成員經(jīng)常集成他們的工作,通常每個成員每天至少集成一次,也就意味著每天可能會發(fā)生多次集成。每次集成都通過自動化的構(gòu)建(包括編譯,發(fā)布,自動化測試)來驗證,從而盡早地發(fā)現(xiàn)集成錯誤。
持續(xù)部署(Continuous Deployment)強調(diào)部署代碼的過程實現(xiàn)自動化。
1.2 必要性
將機械的行為自動化,節(jié)省開發(fā)、測試、運維的工作量,且自動化行為不容易出錯。
2.CI/CD工具
工欲善其事,必先利其器。 -- 《論語》
持續(xù)集成/部署最流行的工具當屬Jenkins和gitlab了。
這兩種工具的docker方式安裝我之前都寫過博文記錄了。
docker搭建Jenkins平臺
docker搭建gitlab平臺
在以上基礎(chǔ)上,我們來體驗一下Jenkins pipelines和gitlab pipelines的效果。
2.1 Jenkins 流水線實踐
假設(shè)你已經(jīng)根據(jù)搭建好了你自己的Jenkins平臺。
下面我們來創(chuàng)建一個簡單的流水線示例。
-
創(chuàng)建一個任務
image.png -
填寫名稱->選擇流水線->確定
image.png 配置以下的流水線步驟,其它可以不配置
下面的pipeline包括了三個階段stage,Build->Test->Deploy,Deploy對sh 'echo "retry again"'做了是吧
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'echo "Building environment"'
}
}
stage('Test') {
steps {
sh 'echo "Code Test"'
}
}
stage('Deploy') {
steps {
timeout(time: 3, unit: 'MINUTES') {
retry(3) {
sh 'echo "retry again"'
}
}
sh 'echo "Deploy success"'
}
}
}
}

-
構(gòu)建一下
image.png -
我在構(gòu)建一次,點logs還可以看輸出
image.png
image.png
具體可以參考Jenkins文檔:
pipeline 執(zhí)行多個步驟(step)
流水線
- 總結(jié)
流水線其實就是一個自動化建模系統(tǒng),可以實現(xiàn)很多流程化的東西,比如環(huán)境構(gòu)建,代碼單元測試,代碼發(fā)布,發(fā)布完成通知等等。最后引用Jenkins文檔的一段話做一個完整的論述:
本質(zhì)上,Jenkins 是一個自動化引擎,它支持許多自動模式。 流水線向Jenkins中添加了一組強大的工具, 支持用例 簡單的持續(xù)集成到全面的CD流水線。通過對一系列的相關(guān)任務進行建模, 用戶可以利用流水線的很多特性:
Code: 流水線是在代碼中實現(xiàn)的,通常會檢查到源代碼控制, 使團隊有編輯, 審查和迭代他們的交付流水線的能力。
Durable: 流水線可以從Jenkins的主分支的計劃內(nèi)和計劃外的重啟中存活下來。
Pausable: 流水線可以有選擇的停止或等待人工輸入或批準,然后才能繼續(xù)運行流水線。
Versatile: 流水線支持復雜的現(xiàn)實世界的 CD 需求, 包括fork/join, 循環(huán), 并行執(zhí)行工作的能力。
Extensible:流水線插件支持擴展到它的DSL 的慣例和與其他插件集成的多個選項。
然而, Jenkins一直允許以將自由式工作鏈接到一起的初級形式來執(zhí)行順序任務, 流水線使這個概念成為了Jenkins的頭等公民。
構(gòu)建一個的可擴展的核心Jenkins值, 流水線也可以通過 Pipeline Shared Libraries 的用戶和插件開發(fā)人員來擴展。
下面的流程圖是一個 CD 場景的示例,在Jenkins中很容易對該場景進行建模:





