持續(xù)集成/CI(Continuous integration)悔雹,頻繁將已完成的补疑,代碼提交到主干。
持續(xù)交付/CD(Continuous delivery)碳褒,頻繁將軟件最新版本交給質(zhì)量團(tuán)隊(duì)或用戶進(jìn)行評(píng)審折砸。
持續(xù)部署/CD(Continuous deployment),指通過評(píng)審的代碼自動(dòng)部署到生產(chǎn)環(huán)境沙峻。
持續(xù)部署的前提是能自動(dòng)化完成測(cè)試睦授、構(gòu)建、部署等步驟摔寨。
1去枷、docker安裝jenkins
docker pull jenkins/jenkins
mkdir /home/jenkins
chown -R 1000:1000 /home/jenkins/
docker run -itd -p 9090:8080 -p 50000:50000 --name jenkins --privileged=true -v /home/jenkins:/var/jenkins_home jenkins/jenkins:latest
2、jenkins配置
- 安裝默認(rèn)所有插件
- 創(chuàng)建管理員賬號(hào)
- 修改插件國(guó)內(nèi)鏡像源:依次點(diǎn)擊Maanage Jenkins→Manage Plugins→【Advanced是复,劃到最下面修改升級(jí)站點(diǎn)URL
https://repo.huaweicloud.com/jenkins/updates/update-center.json
- 配置
Global Tool Configuration
下的jdk删顶、maven、git等信息淑廊。 - 憑據(jù)配置:依次點(diǎn)擊【Manage Jenkins】→【Manage Credentials】逗余,點(diǎn)擊【全局】→【添加憑據(jù)】添加gitee賬號(hào)密碼。
4季惩、免密訪問應(yīng)用服務(wù)器
- jenkins服務(wù)器生成秘鑰對(duì)录粱,將公鑰復(fù)制到應(yīng)用服務(wù)器的
~/.ssh/authorized_keys
ssh-keygen -m PEM -t rsa
5、創(chuàng)建Maven項(xiàng)目
- 在【Source Code Management】——>【Git】處輸入倉(cāng)庫(kù)地址蜀备、選擇憑據(jù)关摇。
- 配置
Pro Steps
,在Goals and options
添加:clean package -U -Dmaven.test.skip=true
- 點(diǎn)擊【Build Now】進(jìn)行構(gòu)建碾阁,點(diǎn)擊【Build History】下的構(gòu)建進(jìn)程,選擇【Console Output】查看輸出些楣。
- 點(diǎn)擊【W(wǎng)orkspace】查看源代碼脂凶。
- 配置
Post Steps
宪睹, 選擇Execute shell
,放置發(fā)布腳本蚕钦。
程序發(fā)布腳本
#!/bin/bash
# 定義部署的目錄和項(xiàng)目名稱
DIR="/home/project"
projectName="wuzichaoshi"
# 待部署的應(yīng)用服務(wù)器
server_ips="10.112.1.71"
for server_ip in ${server_ips[@]}; do
echo "ssh連接服務(wù)器亭病。"
ssh -Tq -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mkdir -p $DIR/${projectName} $DIR/backup/${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包到目標(biāo)服務(wù)器的tmp目錄下"
scp -q -oStrictHostKeyChecking=no ${WORKSPACE}/target/*.jar root@${server_ip}:/tmp/${projectName}.jar
echo "ssh遠(yuǎn)程連接進(jìn)行發(fā)布操作"
ssh -q -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mv /tmp/${projectName}.jar $DIR/${projectName}/${projectName}.jar
EOF
done
echo "成功!腳本已部署到服務(wù)器嘶居!"
bash $DIR/${projectName}/stop.sh
bash $DIR/${projectName}/start.sh
start.sh
#!/bin/bash
set -e #一旦報(bào)錯(cuò)立即停止
set -o pipefail
# 添加JDK路徑
JAVA_HOME=/usr/local/jdk1.8
# 項(xiàng)目根目錄和項(xiàng)目名稱
DIR="/home/project"
projectName="wuzichaoshi"
nohup $JAVA_HOME/bin/java -jar ${DIR}/${projectName}/${projectName}.jar > release_out.log 2>&1 &
echo $! > /var/run/${projectName}.pid
stop.sh
#!/bin/bash
# 項(xiàng)目根目錄和項(xiàng)目名稱
projectName="wuzichaoshi"
PID=$(cat /var/run/${projectName}.pid)
kill -9 $PID