一、什么是CI/CD
企業應用程序開發參與者通常由開發人員,測試人員/QA工程師,運維工程師以及SRE(站點可靠性工程師)或IT運營團隊組成。他們緊密合作,目標是高質量軟件交付。CI/CD是兩個獨立過程的組合:CI(持續集成)/CD(持續部署)。
通過CI/CD流水線,軟件研發可以實現從代碼簽入、測試、構建和部署直至生產階段都在流水線中向前推進。
本文描述如何通過jenkins實現代碼的流水線編譯。
二、鏡像制作
在代碼編譯過程中,編譯環境是個重要因素,有可能由于不同研發人員的機器環境有差異,導致編譯失敗。為了實現標準化流程,可以采用基礎鏡像和容器使得編譯環境統一。
鏡像制作過程與常用docker命令:
1. 編寫Dockerfile
Dockerfile 是一個文本文件,包含了構建 Docker 鏡像的所有指令。通過定義一系列命令和參數,Dockerfile 指導 Docker 構建一個自定義的鏡像。
可以通過FORM命令指定該鏡像基于哪個基礎鏡像制作,相當于拿哪一臺電腦作為基礎,在上面安裝需要的工具。
2. 構建鏡像
使用ducker build 進行鏡像構建,-t后面指定nginx為鏡像名稱,:后面是給這個鏡像打一個標簽;注意最后的.代表當前目錄,可以將工具的安裝包和Dockerfile都放在當前文件中,默認使用Dockerfile文件,或者使用-f參數指定自定義的文件名稱
docker build -f Dockerfile -t nginx:v3 .
3. 查看鏡像
Docker images查看本地鏡像
4. 推送倉庫存儲
可以使用docker push將鏡像推送到harbor倉庫存儲,若本地鏡像丟失,機器會去harbor上拉取對應的鏡像
三、容器編譯
通過docker run啟動一個容器,在容器中使用編譯命令進行編譯
四、jenkins編寫流水線
Jenkins是一個可以持續集成,持續交付,持續部署的自動化工具。
通過將腳本寫到jenkinsfile中,是機器按照腳本中的命令執行各個階段的操作。
Jenkinsfile由幾個部分組成:
(1)Agent: 指定執行的節點
(2)Options: 運行時的選項
(3)Environment:定義環境變量
(4)Stages:階段(具體的操作在這里完成)
(5)Post:構建后的操作(包含不同情況:總是、成功、失敗、取消后)
Jenkinsfile的階段:
一個流水線可以有一個或多個階段,在每個階段里定義步驟,步驟中編寫具體的腳本。
stages {
stage('Checkout') { //代碼檢出
steps {
script {...}
}
}
stage('Build-Package') { //編譯打包
when { 設置觸發條件 }
steps {
script {...}
}
}
stage('Upload') { //介質上傳
steps {
script {...}
}
}
}
post {
success{ //成功時后續操作
script {...}
}
failure{ //失敗時后續操作
script {...}
}
}