Jenkins教程(自動化部署)
1. Jenkins是什麼?
2. 什麼是持續整合(CICD)
3. Jenkins的安裝
(1)準備條件
安裝JDK
#進入/etc/profile配置檔案
vim /etc/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
javac

(2)安裝Jenkins
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
nohup java -jar /usr/wubin/jenkins.war --httpPort=8777 --httpsPort=8778 > /usr/wubin/jenkins.log 2>&1 &





(3)Jenkins中配置JDK路徑


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

4. 整合Git
# 安裝
$ yum install git -y
# 檢視版本
$ git --version

jenkins
中配置Git環境,採用預設生成的即可








jenkins
的工作空間檢視檔案是否拉取下來,所有拉取的檔案都會存放在jenkins
工作空間中
5. 憑證配置

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測試專案構建


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專案任務



/data/software/repository
可以看到有存放拉取的jar包,透過這2個證據可以證明settings.xml
檔案配置成功且有效
jenkins
的workspace
目錄下的jar包



7. 配置SSH免密登入
jenkins
構建消耗記憶體極大,一般jenkins是一臺單獨的工具機器,Java專案一般在其他的機器上,這裡我重新安裝一臺虛擬機器-
IP:192.168.223.129
-
JDK:1.8
-
user:root
-
部署路徑:/data/app/my-boot
-
埠:9010
$ ssh-keygen -t rsa
#
3
次回車

-
id_rsa
: 生成的私鑰檔案 -
id_rsa.pub
:生成的公鑰檔案
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
-
.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
# 在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
8. 編寫Jenkins釋出指令碼

#!
/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
$ su root
# 開啟防火牆
9010
埠
$ firewall-cmd --zone=public --add-port=
9010
/tcp --permanent
# 使配置生效
$ firewall-cmd --reload
http://192.168.223.129:9010
檢視結果是否更新

文末福利






領取方式
掃碼加上小助理(秒發)
回覆暗號“1456頁Linux筆記“,
即可100%免費領取成功
