手把手教你Jenkins自動CICD流程

語言: CN / TW / HK

theme: channing-cyan

說在前面:

1.這樣的模式適合容器編排,構造多個replica例項的進行容器編排的時候

2.純手動踩坑

1.準備工作

一個後端springboot專案

一臺Debian的Linux

程式碼託管用的github (可以自建gitlab)

2.安裝jenkins的環境

這邊建議在linux上安裝一個java環境和maven環境,如果是配置springboot專案的話

因為jenkins自動構建的時候,可以用系統預設的(有可能會出問題),也可以選擇虛擬機器自帶的

下面兩步,熟練的可以自行跳過:

2.1 jdk8

連結:https://pan.baidu.com/s/154LaIUdRq1T1xPPCXFP8cg

提取碼:7mj3

2.2 maven

maven 3.9.0版本 https://wwcz.lanzout.com/iQc0P0o25oef
密碼:eba8

配置阿里雲maven倉庫地址啥的相信大家都會

2.3 配置git

拉取程式碼需要我們有git環境(記得把linux的ssh公鑰新增到程式碼倉庫)

sudo apt install git

2.4 jenkins

jenkins是拿java開發的

這裡有個坑,jenkins從2022.06.28之後的版本都是jdk11進行安裝,但是我的示例專案是jdk11

需要jdk8的jenkins:

https://wwcz.lanzout.com/ipg7V0o291mj

安裝:

nohup java -jar jenkins.war --httpPort=8888 & lsof -i:8888 tail -f nohup.out 之後就跟著頁面走就行了,外掛也選預設安裝的。

image-20230219223438547

3.構建pipeline

進去之後有一些報錯,這個和我們沒關係,不用管它。

image-20230219223359720

下面的每一步,建議都做一步測試一步

3.1 新建pipeline

image-20230219213918337

image-20230219214340568

流水線就是我們寫指令碼的地方 image-20230219214537538

整體指令碼: ``` node { def mvnHome stage('Git Pull') { // for display purposes

  git '[email protected]:Ht12137/Metric-Box-backend.git'

} stage('Maven Build') { sh "mvn clean package -DskipTests" } stage('Build Image') { sh "/root/.jenkins/workspace/scripts/Metric-Box-backend_deploy.sh" } stage('Run Image') { sh "/root/.jenkins/workspace/scripts/mbb-run.sh" } } ```

3.2 拉取程式碼

這裡沒有許可權是沒辦法拉取的,注意檢查是否有許可權

``` stage('Git Pull') { // for display purposes

git '[email protected]:Ht12137/Metric-Box-backend.git'

} ```

這裡的程式碼會拉取到/root/.jenkins/workspace下面

3.3 打包

可以跳過測試 stage('Maven Build') { sh "mvn clean package -DskipTests" }

3.4 製作映象

這裡是可以用不同的映象倉庫,比如阿里雲的,實測大概1min多一點拉取一個映象

(但是本地的話基本只要1s) stage('Build Image') { sh "/root/.jenkins/workspace/scripts/Metric-Box-backend_deploy.sh" } 在workspace下面建一個scripts

這些都是正常的指令碼,不過現在由jenkins幫你做

Metric-Box-backend_deploy.sh

記得要改成自己的專案名字

``` cd ../springboot

cat < Dockerfile FROM openjdk:8-jre-alpine COPY target/mb-1.0.0.jar mb.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "mb.har"] EOF

echo "Dockerfile created successfully"

docker build -t mb . ``` EOF就是end of file,可以當做是一個讀取終止的地方

3.5 執行容器

由於我是jenkins和服務在一臺機器上,所以就很方便,如果用docker swarm和k8s等等的容器編排的話,也是非常方便的

stage('Run Image') { sh "/root/.jenkins/workspace/scripts/mbb-run.sh" }

mbb.sh: docker kill mb docker rm mb docker run -d -it -p 8880:8880 --name mb mb

3.6 執行效果圖

image-20230219220204994

image-20230219220256676

4.配置github的Hook

到上面,我們就基本成功了。

但是還是半自動的,提交了程式碼之後還需要我們去手動的啟動jenkins

許多程式碼倉庫都有Hook功能,可以自動觸發一些事件

當我在網上部落格之間迷茫的時候,一位大佬責怪我說為啥不去看官方文件?------有道理

官網: https://plugins.jenkins.io/github/

根據官網有以下的步驟:

4.1 驗證jenkins

image-20230219220714078

image-20230219220815227 選擇新增憑據

這裡需要新增一個金鑰

image-20230219220909690

金鑰獲取方式:

進入github –> setting –> Personal Access Token –> Generate new token image-20230219221450091

可以測試連通性,如圖則成功

image-20230219221555810

4.2 設定hook

image-20230219221709831

image-20230219221755671

會有個hook的地址

在github裡填寫就是當這個倉庫這個分支有變化的話,就觸發這個地址的鉤子

進入GitHub上指定的專案 –> setting –> WebHooks&Services –> add webhook –> 輸入剛剛部署jenkins的伺服器的IP image-20230219221913465

5.最終效果

image-20230219222258181

6 後續的進階

雲原生、k8s等等的自動化部署也在路上了,有興趣的掘友可以點波關注 image-20230219222416782