一. 概述
jenkins是企業(yè)最常用的代碼自動(dòng)構(gòu)建發(fā)版工具, 網(wǎng)上也很多關(guān)于jenkins的文章, 但很少比較詳細(xì)的教程, 本文將從jenkins搭建到創(chuàng)建一個(gè)maven項(xiàng)目實(shí)現(xiàn)遠(yuǎn)程部署,一步到位. jenkins實(shí)現(xiàn)遠(yuǎn)程部署只要清楚流程是很簡(jiǎn)單的,無非就是拉取代碼->打包->上傳包到目標(biāo)服務(wù)器->執(zhí)行腳本啟動(dòng)
二. 安裝jenkins
2.1 docker安裝jenkins
# 拉取鏡像 jenkinsci/blueocean
docker pull jenkinsci/blueocean
# 運(yùn)行
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins jenkinsci/blueocean
2.2 jenkins初始化
2.2.1. 打開網(wǎng)址localhost:8080

image.png
2.2.2. 獲取密碼
# 進(jìn)入容器
docker exec -it jenkins bash
# 查看密碼
cat /var/jenkins_home/secrets/initialAdminPassword
2.2.3. 安裝插件

image.png

image.png
2.2.4. 創(chuàng)建一個(gè)用戶

image.png
2.2.5. 示例配置

image.png
2.2.6. 就緒

image.png
2.3 全局工具配置

image.png

image.png
2.3.1 配置jdk
容器自帶jdk, 進(jìn)入容器查看jdk路徑
# 進(jìn)入容器
docker exec -it jenkins bash
# 查看jdk路徑
echo $JAVA_HOME

image.png
2.3.2 配置maven

image.png
注意:填完記得點(diǎn)[保存]
2.4 安裝插件

image.png
主要安裝3個(gè)插件,搜索插件名勾選,然后點(diǎn)擊下載
- Maven Integration (maven插件)
- Git Parameter (git參數(shù)定義插件)
-
SSH2 Easy(遠(yuǎn)程服務(wù)器上傳文件及執(zhí)行腳本插件)
image.png
下載完點(diǎn)擊重啟

image.png
三. 配置遠(yuǎn)程服務(wù)器ssh連接

image.png

image.png
四. 創(chuàng)建一個(gè)maven項(xiàng)目
4.1 創(chuàng)建項(xiàng)目

image.png

image.png
4.2 配置git分支參數(shù)

image.png

image.png
4.3 配置代碼倉庫

image.png
4.4 配置maven打包命令

image.png
clean package -Dmaven.prod.skip=true -e
4.5 配置jar包上傳指令

image.png

image.png
注意,jenkins打包好的文件在/var/jenkins_home/workspace/目錄下,進(jìn)入容器可以查看
${JOB_NAME} jenkins的預(yù)設(shè)參數(shù),值為項(xiàng)目名
4.6 配置遠(yuǎn)程服務(wù)器執(zhí)行命令啟動(dòng)服務(wù)

image.png

image.png
附: 啟動(dòng)sheel腳本: jar.sh
set +e
source /etc/profile
PROJECT_NAME=$(cd "$(dirname "$0")";pwd)
jar_file=$(ls ${PROJECT_NAME}/*.jar)
mkdir -p ${PROJECT_NAME}/dump
if [ `echo ${jar_file} | xargs -n1 | wc -l` -eq 1 ];then
APP_NAME=${jar_file}
else
echo 'ERR: Twee fles pakkette word nie toegelaat nie.'
exit 2
fi
# help
usage() {
echo "Usage: sh jre.sh [start|stop|restart|status]"
exit 1
}
# check pid
is_exist() {
pid=`ps -ef | grep $APP_NAME | grep java | grep -v grep | awk '{print $2}' `
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
# Start
start() {
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
cd ${PROJECT_NAME}
nohup java -jar $APP_NAME &>logs.out &
fi
}
# Stop
stop() {
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
}
# Status
status() {
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is not running."
fi
}
# Restart
restart() {
stop
start
}
# run
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
4.6 done

image.png
五. 發(fā)版測(cè)試
5.1 構(gòu)建

image.png
5.2 選分支開始構(gòu)建

image.png
5.3 查看構(gòu)建日志

image.png

image.png
