天天看點

DevOps實戰(Docker+Jenkins+Git)

基于Docker+Jenkins+Git的CI/CD實戰

與上一篇随筆:基于 Jenkins+Docker+Git 的CI流程初探 有所不同,該内容更偏向于實際業務的基礎需求。

有幾點需要注意:

該實戰中沒有涉及到鏡像倉庫,是以略去了鏡像推送階段,可以參考基于 Jenkins+Docker+Git 的CI流程初探。

與上一篇對比,該實戰是基于外網伺服器進行的,是以加入了Jenkins自動觸發拉取代碼以及發送建構報告功能。

實戰中的Jenkins也是基于docker運作,對于Jenkins資料持久化是通過VOLUME實作的。

不再進行自建git代碼倉庫,選擇使用Gitee管理代碼。

實驗環境均已提前準備完畢。

啟動後設定使用者與密碼

名稱:java-devops-demo

建立流水線

選擇儲存

Jenkins流水線工作流程:

  先定義一個流水線項目,指定項目的git位置

  流水線啟動

  a.先去git位置自動拉取代碼

  b.解析拉取代碼裡面的Jenkinsfile檔案

  c.按照Jenkinsfile指定的流水線開始加工項目

Jenkins重要的點

  1) jenkins的家目錄 /var/jenkins_home 已經被我們docker外部挂載了/var/lib/docker/volumes/jenkins-data/_data

  2)WORKSPACE(工作空間)=/var/jenkins_home/workspace/java-devops-demo每一個流水線項目,占用一個檔案夾位置

  3)BUILD_NUMBER=5;目前第幾次建構

  4)WORKSPACE_TMP(臨時目錄)=/var/jenkins_home/workspace/java-devops-demo@tmp 

Jenkinsfile部分是逐漸測試,按階段寫成。

Dockerfile:

Jenkinsfile與Dockerfile均位于java-devops-jemo目錄下,由Jenkins從git倉庫拉取。

期望效果: 遠端的github代碼送出了,jenkins流水線自動觸發建構。 

實作條件:

保證jenkins所在主機能被遠端通路。

jenkins中遠端觸發需要權限,我們應該使用使用者進行授權。

配置gitee,webhook進行觸發。

實作過程:

1)進入流水線配置頁,填入身份驗證令牌

 2)遠端建構即使配置了gitee/github 的webhook,預設會403。我們應該使用使用者進行授權 

  a.建立一個使用者 (主界面>管理Jenkins>管理user>建立使用者)

  b.建立使用者後一定要重新登陸激活一次,進入使用者清單>點選目前使用者名>設定

  c.生成一個apitoken (生成後立即複制,隻出現一次)

3)碼雲端配置WebHooks,進入碼雲對應代碼倉庫-配置-WebHooks-添加WebHook

URL配置格式:http://dk:使用者dk的apitoken@主機的公網ip:8080/job/java-devops-demo/build?token=身份驗證令牌

添加成功後可測試與Jenkins主機的連通性。

至此,當本地修改代碼,git push送出到gitee/github後,Jenkins就能夠自動建構,建構成功即可檢視前端頁面的變化。

(使用自定義agent的方式引入maven環境,利用多階段建構不同場景下的複雜環境)

1)安裝docker pipeline插件

2)自定義agent(在stages内部)

3)配置maven加速(配置國内阿裡雲)

把Maven的配置檔案放在jenkins-data裡面的某個位置。預設所有的可變配置項都推薦放在jenkins-home的位置,增強移植性。

4)緩存必要jar包,下次建構無需下載下傳

注:jenkins不配置任何環境的情況下, 僅适用docker相容所有場景。

臨時容器導緻的問題(每個stage都會回到預設workspace,臨時容器産生的打包資料不能被利用)

第一次檢出代碼,預設在 /var/jenkins_home/workspace/【java-devops-demo】

使用docker臨時agent的時候,每一個臨時容器運作又配置設定臨時目錄 /var/jenkins_home/workspace/java-devops-demo@2;預設就是workspace/java-devops-demo 的内容

在臨時容器裡面 運作的mvn package指令,會在 /var/jenkins_home/workspace/java-devops-demo@2 進行工作 

package到了 /var/jenkins_home/workspace/java-devops-demo@2 位置

進入下一步(stage)進行打包鏡像,又會回到 /var/jenkins_home/workspace/【java-devops-demo】(預設workspace)這個位置

 這個位置沒有運作過 mvn clean package ,是以沒有target。 預設的 工作目錄 沒有 target

     解決方法:在臨時容器内部切換到Jenkins的預設工作目錄,再進行maven打包。

使用郵件擴充插件:Email Extension Plugin-2.71 (對于每個stage執行的任務成功與否可以通過後置執行post來進行感覺)

系統管理>系統配置>配置管理者郵箱(系統管理者郵件位址)、SMTP服務相關及其他

DevOps實戰(Docker+Jenkins+Git)
DevOps實戰(Docker+Jenkins+Git)

下圖Use SMTP Authentication部分在高版本插件中已不再支援

DevOps實戰(Docker+Jenkins+Git)

填寫完畢,可以通過發送測試郵件進行測試。

DevOps實戰(Docker+Jenkins+Git)

上圖的郵件使用者的授權碼需要配置郵件發送的認證權限資訊

登入自己郵箱,開啟POP3/SMTP郵件服務

擷取到自己的授權碼(tlqhksolsmeodjad)

配置并測試好郵件發送即可

郵件模闆内容見Jenkinsfile中報告推送階段。

至此,開發送出代碼後,将自動觸發建構過程,建構結束後發送此次建構郵件報告如下:

DevOps實戰(Docker+Jenkins+Git)