1、登录Jenkins
1.1 输入用户名/密码,登录Jenkins进入系统页面
2、创建任务
2.1 点击左侧菜单中 “新建Item” 进入到新项目创建页面,创建一个新的构建任务
2.2 在任务创建页面,第一步,“输入一个任务名称”;第二步,任务类型点击“构建一个maven项目”;第三步,点击“确定”,此时,构建任务创建完成。
2.3 任务创建完成后,系统页面自动跳转到任务配置页面;
2.4 此时,在Jenkins首页可以看到刚刚创建的名称为les-service的构建任务,点击任务名称后面的下拉箭头,点击“配置”可以进入到步骤2.2中的构建任务配置页面。
3 构建任务配置
3.1 General(全局配置):以下(1)(2)(3)(4)(5)操作都为非必输项,可以忽略掉,不影响任务的构建。
(1)描述:输入要部署到的远程服务器的信息,以及本次发布架包的信息;
(2)勾选Discard old builds(丢弃旧的构建版本),我这里要设置丢弃旧的构建版本信息;
(3)策略,选择Log Rotation(日志循环);
(4)“保持构建天数”中输入7,表示构建记录保存7天;
(5)“保持构建的最大个数”中输入7,表示最多保存7个构建记录;
3.2 源码管理:主要填写GitLab上的项目源码信息
(1)勾选Git;
(2)输入“Repository URL”内容,填写GitLab上项目的仓库地址,如下GitLab截图中的序号2,复制地址输入到“Repository URL”中;
(3)点击Credentials下面的“添加”按钮,添加访问仓库项目的凭证(账号/密码),Domain(范围)选择“全局凭据”,后面创建该项目的前端构建任务时,可以复用;类型选择“Username with password”;“用户名”输入有访问该gitlab项目权限的用户名;“密码”用户的密码;点击下方“添加”按钮,凭据添加完成;
(4)选择Credentials访问仓库项目的凭证(gitlab用户名/密码)
(5)输入,GitLab上的分支,我这里是dev分支
3.3 构建环境,非必填项;勾选“Provide Configuration files”和“Add timestamps to the Console Output”,选择File和输入Target,target输入要被替换的路径以及文件名称,路径写相对路径(即,构建项目包里面文件夹的路径);如果要替换多个文件,点击“Add file”继续添加文件
(1) 勾选“Provide Configuration files”(提供配置文件),可以替换构建包中配置文件,方便数据库、注册中等地址的修改,file的添加在 Dashboard-》Manage Jenkins-》Managed files中;
(2)点击"Add a new Config"添加一个新配置,选择“Cutom file”自由风格的文件(这个可以自由定义配置文件的扩展名),点击“Next”
(3)“name”中输入配置文件的名称(随便取名,最好和项目中的一致方便识别),“Content”输入配置文件的内容,点击“Subimit”;
3.4 Build构建,填写打包相关的信息
(1)Root POM,输入POM的根路径,根据项目的实际路径填写;
(2)Goals and options,目标选项中输入打包要执行的maven命令,输入clean package -Dmaven.test.skip=true(先清理掉以前的包,并跳过测试打包,这里可以打war包或jar包,存放在target目录下)
小扩展:-DskipTests 和 -Dmaven.test.skip=true 的区别
-DskipTests:不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下;
-Dmaven.test.skip=true:不执行测试用例,也不编译测试用例类;
3.5 post step 构建后操作(pre step构建前操作)
(1)我这里选择“Run regardless or build result”,表示不管上面构建结构都运行(此处根据自己情况也可以选择其他选项);
(2)点击“Add post-build step”,增加构建够操作;
(3)选择“Send files or execute commands over SSH”,通过SSH发送文件或执行命令,弹出到传输设置信息
(4)name:选择一个要运行jar包的远程服务器;远程服务器配置如下3.5.1:
(5)Source files:jenkins工作目录下,打包好的jar包文件的路径,这里要写相对路径,开始不要加斜杠“/”(/var/lib/jenkins/workspace/les_service/ 下面的路径);
(6)Remove prefix:去掉Source file中的前缀;
(7)Remote directory:jar包要部署的远程服务器上位置的路径;
(8)Exec command:要执行的shell脚本
(9)点击“Add Transfer Set”可以添加多个jar传到服务器;
(10)在最后一个jar传输信息的Exec command中的shell命令框中 可执行命令的最上面加上 ./etc/profile 重新加载下环境变量,解决脚本不执行或找不到环境变量问题 ;
./service.sh为执行命令脚本文件,把service.sh脚本和jar放在同一文件夹下,
service.sh内容为:
#!/bin/sh
export GATEWAY=les-gateway.jar
export AUTH=les-auth.jar
export WMS=modules-wms-system.jar
export MASTERDATA=les-modules-masterData.jar
export LES=modules-les-system.jar
export JOB=les-modules-job.jar
export FILE=les-modules-file.jar
export GATEWAY_port=8080
export AUTH_port=9205
export WMS_port=9201
export MASTERDATA_port=8085
export LES_port=9203
export JOB_port=9211
export FILE_port=9300
case "$1" in
start)
## 启动gateway
echo "--------开始启动GATEWAY---------------"
nohup java -jar $GATEWAY >/dev/null 2>&1 &
GATEWAY_pid=`lsof -i:$GATEWAY_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$GATEWAY_pid" ]
do
GATEWAY_pid=`lsof -i:$GATEWAY_port|grep "LISTEN"|awk '{print $2}'`
done
echo "GATEWAY pid is $GATEWAY_pid"
echo "---------GATEWAY 启动成功-----------"
## 启动auth
echo "--------开始启动AUTH---------------"
nohup java -jar $AUTH >/dev/null 2>&1 &
AUTH_pid=`lsof -i:$AUTH_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$AUTH_pid" ]
do
AUTH_pid=`lsof -i:$AUTH_port|grep "LISTEN"|awk '{print $2}'`
done
echo "AUTH pid is $AUTH_pid"
echo "---------AUTH 启动成功-----------"
## 启动MASTERDATA
echo "--------MASTERDATA 开始启动--------------"
nohup java -jar $MASTERDATA >/dev/null 2>&1 &
MASTERDATA_pid=`lsof -i:$MASTERDATA_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$MASTERDATA_pid" ]
do
MASTERDATA_pid=`lsof -i:$MASTERDATA_port|grep "LISTEN"|awk '{print $2}'`
done
echo "MASTERDATA pid is $MASTERDATA_pid"
echo "--------MASTERDATA 启动成功--------------"
## 启动LES
echo "--------开始启动LES---------------"
nohup java -jar $LES >/dev/null 2>&1 &
LES_pid=`lsof -i:$LES_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$LES_pid" ]
do
LES_pid=`lsof -i:$LES_port|grep "LISTEN"|awk '{print $2}'`
done
echo "LES pid is $LES_pid" sleep 10
echo "---------LES 启动成功-----------"
## 启动WMS
echo "--------开始启动WMS---------------"
nohup java -jar $WMS >/dev/null 2>&1 &
WMS_pid=`lsof -i:$WMS_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$WMS_pid" ]
do
WMS_pid=`lsof -i:$WMS_port|grep "LISTEN"|awk '{print $2}'`
done
echo "WMS pid is $WMS_pid"
echo "---------WMS 启动成功-----------"
## 启动FILE
echo "--------开始启动FILE---------------"
nohup java -jar $FILE >/dev/null 2>&1 &
FILE_pid=`lsof -i:$FILE_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$FILE_pid" ]
do
FILE_pid=`lsof -i:$FILE_port|grep "LISTEN"|awk '{print $2}'`
done
echo "FILE pid is $FILE_pid"
echo "---------WMS 启动成功-----------"
## 启动JOB
echo "--------开始启动JOB---------------"
nohup java -jar $JOB >/dev/null 2>&1 &
JOB_pid=`lsof -i:$JOB_port|grep "LISTEN"|awk '{print $2}'`
until [ -n "$JOB_pid" ]
do
JOB_pid=`lsof -i:$JOB_port|grep "LISTEN"|awk '{print $2}'`
done
echo "JOB pid is $JOB_pid"
echo "---------JOB 启动成功-----------"
echo "===startAll success==="
;;
stop)
P_ID=`ps -ef | grep -w $GATEWAY | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===GATEWAY process not exists or stop success"
else
kill -9 $P_ID
echo "GATEWAY killed success"
fi
P_ID=`ps -ef | grep -w $FILE| grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===FILE| process not exists or stop success"
else
kill -9 $P_ID
echo "FILE| killed success"
fi
P_ID=`ps -ef | grep -w $AUTH | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===AUTH process not exists or stop success"
else
kill -9 $P_ID
echo "AUTH killed success"
fi
P_ID=`ps -ef | grep -w $WMS | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===WMS process not exists or stop success"
else
kill -9 $P_ID
echo "WMS killed success"
fi
P_ID=`ps -ef | grep -w $MASTERDATA | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===MASTERDATA process not exists or stop success"
else
kill -9 $P_ID
echo "MASTERDATA killed success"
fi
P_ID=`ps -ef | grep -w $LES | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===LES process not exists or stop success"
else
kill -9 $P_ID
echo "LES killed success"
fi
P_ID=`ps -ef | grep -w $JOB | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "===JOB process not exists or stop success"
else
kill -9 $P_ID
echo "JOB killed success"
fi
echo "===stop success==="
;;
restart)
$0 stop
sleep 2
$0 start
echo "===restart success==="
;;
esac
exit 0
3.5.1 SSH私钥公钥配置
1、生成私钥和公钥,在Jenkins服务器下输入 ssh-keygen -t rsa
2、一路回车,可以看到私钥id_rsa 和 公钥id_rsa.pub 生成在/root/.ssh/文件夹下
3、把私钥id_rsa中的内容放在Jenkins中,公钥id_rsa.pub的内容放在远程服务器上的authorized_keys文件中
(1)把私钥id_rsa的内容复制到 Jenkins中,Dashboard->Manage Jenkins->Configure System 中的key下;Path to key下填写私钥的路径;
(2)在 Jenkins的Dashboard->Manage Jenkins->Configure System中配置远程服务器信息;信息配置完成后,点击“Test Configuration”测试连接情况,弹出“Success”说明配置成功
name:服务器名称(根据自己习惯填写即可)
Hostname:服务器IP地址
Username:服务器登录用户名
Remote Directory:远程服务器上要部署包存放的位置(这里可以不填,在Jenkins任务的配置中填写也行,个人建议在任务的配置中填写,因为一个服务器可能部署多个包到多个位置)
(3)公钥id_rsa.pub放在远程服务器上的authorized_keys文件中,如果找不到authorized_keys这个文件,就在/root/.ssh/ 文件夹下创建这个文件,如果在远程服务器上找不到/root/.ssh/这个文件夹,直接在远程服务器上执行一下 ssh-keygen -t rsa,然后cd /root/.ssh/ 进入到该文件夹下执行 touch authorized_keys 创建authorized_keys文件,把公钥id_rsa.pub里的内容复制到authorized_keys文件中。
3.6 完成配置
上述全部配置完成后,点击“保存”按钮,完成配置;
3.7 构建
点击如图所示进行构建;
3.8 构建日志查看
(1)构建过程中的任务,直接点击左下角的进度条便可进入到控制台实时查看日志
(2)也可以直接点击 任务名称—》构建信息—》控制台输出,查看日志信息
版权归原作者 吹吹风~in 所有, 如有侵权,请联系我们删除。