一步步掌握Jenkins自動化部署:從環境搭建到實際應用

Jenkins教程(自動化部署)

1. Jenkins是什麼?

Jenkins是一個開源的、提供友好操作介面的持續整合(CI)工具,廣泛用於專案開發,具有自動化構建、測試和部署等功能。Jenkins用Java語言編寫,可在Tomcat等流行的servlet容器中執行,也可獨立執行。通常與版本管理工具(SCM)、構建工具結合使用。

2. 什麼是持續整合(CICD)

因為開發部門同時維護多個版本,多個版本的釋出,測試需要大量人力,所以要有一個專業的持續整合工具來管理持續重複的工作。
個人理解,說白了就是把程式碼測試、打包、釋出等工作交給一些工具來自動完成。這樣可以提高效率,減少失誤,開發人員只需要關心開發和提交程式碼到Git就可以了。

3. Jenkins的安裝

(1)準備條件

安裝JDK

下載JDK壓縮包,並上傳至Linux某個目錄下解壓。
. 配置jdk的環境變數

#進入/etc/profile配置檔案

vim /etc/profile

. 將以下程式碼填入到profile檔案內底
exportJAVA_HOME

=

/usr/

wubin/jdk11

exportCLASSPATH

=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

exportPATH

=$JAVA_HOME/

bin

:$PATH

. 使配置生效
source /etc/profile
. 檢測java環境資訊
javac
輸入javac後出現以下資訊則安裝jdk成功!

(2)安裝Jenkins

1. 下載jenkins
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
2. 啟動jenkins
# 使用nohup命令啟動 nohup 當虛擬機器黑屏時 也會執行 日誌—>輸出到jenkins.log & 後臺執行
nohup java -jar /usr/wubin/jenkins.war --httpPort=8777 --httpsPort=8778 > /usr/wubin/jenkins.log 2>&1 &
3. 使用tail命令檢視啟動日誌,日誌中會輸出jenkins密碼
4. 透過瀏覽器訪問jenkins(埠號必須為8777)
http://你的ip:8777
點選安裝推薦的外掛

(3)Jenkins中配置JDK路徑

jenkins-》全域性工具配置-》JDK-》新增JDK

(4)Jenkins忘記密碼的解決方案

4. 整合Git

為了Jenkins能夠拉取程式碼,需要安裝Git環境和jenkins對應的Git外掛
(1) CentOS 7 上安裝Git環境

# 安裝

$ yum install git -y

# 檢視版本

$ git --version

複製
(2) Jenkins安裝Git外掛
(3) Jenkins配置Git環境
此處無需在jenkins中配置Git環境,採用預設生成的即可
(4) Gitee上任意建一個倉庫
(5) 測試憑據是否能夠使用
jenkins-》新建任務-》自由風格專案
進入jenkins的工作空間檢視檔案是否拉取下來,所有拉取的檔案都會存放在jenkins工作空間中
到這一步使用者名稱和密碼方式的憑證已經打通Git

5. 憑證配置

憑據就是用來儲存需要密文保護的資料庫密碼、Gitee密碼資訊、Docker私有倉庫密碼等,以便 Jenkins可以和這些第三方的應用進行互動。
1. 憑證外掛安裝Credentials Binding
該外掛預設在一開始就會被安裝,安裝後在jenkins-》系統管理-》安全欄目會出現Manage Credentials選項,若沒有需要安裝外掛並重啟。

6. Maven整合

jenkins上釋出Java專案時需要使用Maven來進行構建打包(Gradle專案則需要安裝配置Gradle)

(1) 下載安裝

# 找一個目錄存放maven

cd /usr/wubin/
# 從阿里雲上下載maven安裝包

wget

https

:

//mirrors.aliyun.com/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

# 解壓

tar -zxvf apache-maven-

3.6.3

-bin.tar.gz
# 當前maven的安裝目錄為:

/usr/wubin/

apache-maven-

3.6.3

(2) 環境配置

vi /etc/profile
在最後面

JDK

配置上作出一些更改

exportMAVEN_HOME

=

/usr/

wubin/

apache-maven-

3.6.3

exportPATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
複製

(3) 使配置生效並檢視安裝情況

source /etc/profile

mvn -version

(4) Jenkins配置Maven

(5) 安裝Maven外掛

(6) 在/data/software目錄下新建一個repository資料夾,用來作為maven的倉庫

$ cd /usr/wubin

$ mkdir repository

複製

(7) 使用root賬戶修改Maven的settings.xml檔案(指定倉庫目錄和阿里雲映象)

<settings xmlns=

"http://maven.apache.org/SETTINGS/1.0.0"
xmlns

:xsi=

"http://www.w3.org/2001/XMLSchema-instance"
xsi

:schemaLocation=

"http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"

>
<!--本地倉庫-->

<localRepository>

/data/software/repository

</localRepository>

<mirrors>
<!--阿里雲映象-->
<mirror>
<id>

aliyun-maven

</id>
<mirrorOf>

central

</mirrorOf>
<name>

aliyun maven mirror

</name>
<url>

http://maven.aliyun.com/nexus/content/groups/public/

</url>
</mirror>
</mirrors>

...

...

</settings>

複製

(8) Maven測試專案構建

接下來的步驟是將java專案傳到Gitee上供jenkins拉取打包,如果運維同學不懂Java程式碼,可以直接將我的Git專案fork或採用gitlab 等其他方式進行拉取。
新建Maven專案
在碼雲上建一個同名的git專案
使用Git上傳到碼雲
使用git bash命令將專案初始化,無論是傳到Gitee、GitHub、GitLab、Codeup步驟一樣,如果對Git的安裝部署不熟悉

# 進入到本地的專案資料夾

$ cd existing_folder

# 初始化倉庫

$ git init
# 新增檔案至工作區並提交

$ git add .

$ git commit -m

"first commit"

# 關聯

Gitee

遠端倉庫

$ git remote add origin

https

:

//gitee.com/nobug8/it235-jenkins-jar.git

# 將本地倉庫推送到遠端倉庫的master分支,此處會彈出使用者名稱密碼互動

$ git push -u origin master
## 如果push報錯可以先拉取一下,會有新的gitee生成的檔案拉下來,然後重新新增提交併push

$ git pull origin master --allow-unrelated-histories

$ git add .

$ git commit -m

"拉取下來合併後再次提交"

$ git push -u origin master

複製

(9) Jenkins新增Maven專案任務

①. 新建任務
②. 編寫Maven編譯命令
③. 構建並檢視控制檯日誌
儲存後,點選立即構建,然後進入日誌控制檯檢視日誌
從日誌可以看到程式碼已經在拉取了,而且走的事阿里雲倉庫,第一次拉取過程會比較長。
透過檢視/data/software/repository可以看到有存放拉取的jar包,透過這2個證據可以證明settings.xml檔案配置成功且有效
構建成功後檢視jenkinsworkspace目錄下的jar包
到此Maven整合完畢
配置Post Steps,選中執行shell

7. 配置SSH免密登入

由於jenkins構建消耗記憶體極大,一般jenkins是一臺單獨的工具機器,Java專案一般在其他的機器上,這裡我重新安裝一臺虛擬機器
應用伺服器資訊
  • IP:192.168.223.129
  • JDK:1.8
  • user:root
  • 部署路徑:/data/app/my-boot
  • 埠:9010
免密登入主要是方便jenkins伺服器192.168.223.128的root使用者—》應用伺服器192.168.223.129的root使用者上的jar包複製,部署本就是jar包複製的過程
在192.168.223.128機器上使用root使用者生成秘鑰注意此處是root使用者

$ ssh-keygen -t rsa

#

3

次回車

複製
執行後會在當前使用者的根目錄生成一個.ssh資料夾
ssh資料夾中的檔案描述
  • id_rsa : 生成的私鑰檔案
  • id_rsa.pub :生成的公鑰檔案
接下來需要將公鑰匯入到認證檔案中
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
複製
如果希望ssh公鑰生效需滿足至少下面兩個條件:
  • .ssh目錄的許可權必須是700
  • .ssh/authorized_keys檔案許可權必須是600
給對應檔案授權

$ chmod

700

~/.ssh

$ chmod

600

~

/.ssh/

authorized_keys

複製
authorized_keys檔案複製到另一臺應用伺服器的root使用者.ssh目錄下

# 在應用伺服器(

192.168.223.129

)上用root使用者建立/root/.ssh資料夾 mkdir -p /root/.ssh
# 在jenkins伺服器(

192.168.223.128

)上將pub公鑰檔案複製到應用伺服器的.ssh目錄下
scp -p ~

/.ssh/i

d_rsa.pub root@

192.168.223.129

:

/root/

.ssh/authorized_keys

複製
在jenkins192.168.223.128伺服器上進行免密連線測試

# 在jenkins伺服器的/root/目錄下建立filetest檔案,並複製到應用伺服器

$ cd ~/

$ touch filetest

$ scp -p filetest root@

192.168.223.129

:

/root/

filetest

# 進入到應用伺服器(

192.168.223.129

),檢查/root目錄下是否出現filetest
# 在jenkins伺服器上使用ssh進行免密連線測試,成功後會出現

LastLogin

的提示

$ ssh root@

192.168.223.129
Lastlogin

:

SunSep2021

:

53

:

032020

$ exit

複製
到此免密登入和複製實現成功,為接下來jar包部署提供了快捷的幫助

8. 編寫Jenkins釋出指令碼

注意下面程式碼第6行程式碼server_ips=”需要部署到的機器ip”

#!

/bin/

bash
echo

"部署的目錄和專案名稱"
DIR

=

"/data/app"

projectName=

"my-boot"

echo

"待部署的應用伺服器,可多臺"

server_ips=

"192.168.223.139"
for

server_ip

in

${server_ips[@]}

do

echo

"ssh連線進行備份操作"

ssh -

Tq

-oStrictHostKeyChecking=no root@${server_ip} <<

EOF

mkdir -p $DIR/backup/${projectName}

mkdir -p $DIR/${projectName}

if

[ -f

"$DIR/${projectName}/${projectName}.jar"

];then

mv $DIR/${projectName}/${projectName}.jar $DIR/backup/${projectName}/${projectName}-

`date "+%Y%m%d_%H%M%S"`

.jar

fi

EOF

echo

"複製jar包到目標伺服器的tmp目錄"

scp -q -oStrictHostKeyChecking=no ${

WORKSPACE

}/target

/*.jar root@${server_ip}:/tmp/${projectName}.jar
echo "ssh遠端連線進行釋出操作"

ssh -q -oStrictHostKeyChecking=no root@${server_ip} <<EOF

mv /tmp/${projectName}.jar $DIR/${projectName}/${projectName}.jar
EOF
done
echo "success"

9. 編寫應用啟動指令碼

/data/app/my-boot目錄下建立啟動指令碼start.sh

$ touch start.sh

$ vi start.sh

# 將下面程式碼貼上到start.sh中

#!

/bin/

bash

set -e #任何命令出錯就退出

set -o pipefail

APP_ID

=my-boot

APP_DIR

=

"/data/app"

nohup java -jar ${

APP_DIR

}/${

APP_ID

}/${

APP_ID

}.jar > release_out.log &

start_ok=

false
if

[[ $? =

0

]];then

sleep

3

tail -n

10

release_out.log

sleep

5

tail -n

50

release_out.log

fi

aaa=

`grep "Started" release_out.log | awk '{print $1}'`
if

[[ -n

"${aaa}"

]];then

echo

"Application started ok"

exit

0
else

echo

"Application started error"

exit

1

fi

/data/app/my-boot目錄下建立停止指令碼stop.sh

$ touch stop.sh

$ vi stop.sh

# 將下面程式碼貼上到stop.sh中

#!

/bin/

bash

APP_ID

=my-boot

ps aux | grep ${

APP_ID

} | grep -v

"grep"

| awk

'{print "kill -9 "$2}'

| sh

並進行啟動和停止測試,檢視日誌輸出是否正常
將下述啟動程式碼配置jenkins

sh $DIR/${projectName}/stop.sh

sh $DIR/${projectName}/start.sh

訪問並測試程式碼是否生效
如果是虛擬機器則需要給防火牆新增9010埠

$ su root

# 開啟防火牆

9010

$ firewall-cmd --zone=public --add-port=

9010

/tcp --permanent

# 使配置生效

$ firewall-cmd --reload

複製
修改程式碼返回值,提交至Gitee,並再次進行構建釋出,訪問http://192.168.223.129:9010檢視結果是否更新
連結:https://www.cnblogs.com/smile635664087/p/16922110.html
                                                              (版權歸原作者所有,侵刪)

文末福利

最後給大家送上一份新年禮物華為《Linux核心筆記》,共計1456頁,確實乾貨,運維必須收藏備用!同時也非常適合專業的運維人員,幫你提高效率,早早下班的好輔助!(文末免費一鍵領取)

這份筆記非常全面且詳細,從Linux基礎到shell指令碼,再到防火牆、資料庫、日誌服務管理、Nginx、高可用叢集、Redis、虛擬化、Docker等等,與其說Linux學習筆記,不如說是涵蓋了運維各個核心知識。


並且圖文並茂,程式碼清晰,每一章下面都有更具體詳細的內容,十分適合Linux運維學習參考!

領取方式

掃碼加上小助理(秒發)
回覆暗號“1456頁Linux筆記“,
即可100%免費領取成功
(注意:後臺回覆無效,是掃碼領取哦)

相關文章