一、码云配置
-
任务全局配置
-
源码管理配置
二、Maven构建配置
clean package -pl nevo-register -am
三、构建触发器配置
- build whenever a snapshot dependency is built,当job依赖的快照版本被build时,执行本job。
- 触发远程构建 (例如,使用脚本):这里使用于自动化构建,拼接url后写入代码中可以实现在脚本或者工具执行构建。
什么是远程构建呢?
上面提示你了,通过复制这个URL地址,在别的机器上打开这个URL就相当于给这个jenkins服务器发送了一个构建请求。只不过这个请求是在其他人电脑上发出的。这里重点来看看URL的组成,
第一个参数JENKINS_URL
,这里我们写IP地址或者机器hostname,
第二个参数TOKEN_NAME
就是你在身份验证令牌文本输入框输入的值。这里我们把令牌设置成123456,然后我就在我机器的另外一个浏览器来模拟远程构建,这个时候我的远程构建地址就是这样的:localhost:8080/job/nevo-register/build?token=123456
构建测试:
构建地址:http://192.168.77.129:8080/job/nevo-register/build?token=123456
-
build after other projects are built,当本job依赖的job被build时,执行本job
Projects to watch输入任务名称的名称:
启动第一个Job完成后,就能接着启动第二个Job了。
Build periodically 周期性进行项目构建,这个是到指定的时间必须触发构建任务
定时构建语法:
* * * * *
(五颗星,中间用空格隔开)
第一颗*表示分钟,取值0~59
第二颗*表示小时,取值0~23
第三颗*表示一个月的第几天,取值1~31
第四颗*表示第几月,取值1~12
第五颗*表示一周中的第几天,取值0~7,其中0和7代表的都是周日
1.每30分钟构建一次:
H/30 * * * *
2.每2个小时构建一次
H H/2 * * *
3.每天早上8点构建一次
0 8 * * *
4.每天的8点,12点,22点,一天构建3次
0 8,12,22 * * *
(多个时间点,中间用逗号隔开)
Build when a change is pushed to GitLab. GitLab webhook URL: http://192.168.77.129:8080/project/nevo-register
GitLab 项目构建触发规则。(这个是管理GitLab 上代码有变动时构建)-
Gitee webhook 触发构建,需要在 Gitee webhook 中填写 URL: http://192.168.77.129:8080/project/nevo-register
码云项目构建触发规则。(这个是管理码云上代码有变动时构建)
新建码云仓库WebHook:
进入源码管理配置中设置的码云仓库中,进入管理 -> WebHooks。
添加WebHooks:
注:使用Hook功能,要求jenkins必须布署在公网。
GitHub hook trigger for GITScm polling
GitHub项目构建触发规则。(这个是管理GitHub上代码有变动时构建)Poll SCM 设置定时检查代码仓库是否有变更,有变更则构建
例:
H/5 * * * *
表示每隔五分钟去检查一遍代码仓库,如果代码发生变化则执行构建,否则不构建。
四、 构建后配置
步骤流程:
- 设定java环境变量
- 创建备份
- 杀掉原有服务进程
- 启动服务
# 定义日期
DATE=$(date +%Y%m%d)
# 配置环境变量
export JAVA_HOME PATH CLASSPATH
# 定义环境变量
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
# 定义目录
DIR=/root/nevo
# 定义源目录,此地址一定要查看生成的具体实际jar包地址
BASE_DIR=/var/lib/jenkins/workspace/nevo-register/nevo-register/target/
# 执行cd命令并 显示jar文件
JARFILE=`cd $BASE_DIR && ls *.jar`
# 输出jar文件信息
echo $JARFILE
# 判断目录是否存在
if [ ! -d $DIR/backup ];then
mkdir -p $DIR/backup
fi
cd $DIR
# 判断文件是否存在
if [ ! -f "$JARFILE" ];then
echo "文件不存在"
else
# 移动文件到备份目录
mv $JARFILE backup/$JARFILE-$DATE
fi
# 当前文件名
CURFILE=nevo-register-1.0.0
# 获取ID
tpid=`ps -ef|grep $CURFILE|grep -v grep|grep -v kill|awk '{print $2}'`
echo $tpid
# 如果进程存在,将其杀死
if [ ${tpid} ]; then
echo 'Stop Process...'
kill -15 $tpid
fi
# 间隔5秒
sleep 5
# 获取id数据
tpid=`ps -ef|grep $CURFILE|grep -v grep|grep -v kill|awk '{print $2}'`
echo $tpid
# 杀死该进程
if [ ${tpid} ]; then
echo 'Kill Process!'
kill -9 $tpid
else
echo 'Stop Success!'
fi
# 移动文件到指定目录
mv -f /var/lib/jenkins/workspace/nevo-register/nevo-register/target/$JARFILE .
# 运行jar
# nohup java -jar springboot.jar &
nohup java -jar $JARFILE >log.file 2>&1 &
OLD_BUILD_ID=$BUILD_ID
echo $OLD_BUILD_ID
BUILD_ID=dontKillMe
nohup java -jar $JARFILE >log.file 2>&1 &
sleep 3s
# 改回原来的BUILD_ID值
BUILD_ID=$OLD_BUILD_ID
echo $BUILD_ID
if [ $? = 0 ];then
sleep 30
tail -n 50 log.file
fi
cd backup/
ls -lt|awk 'NR>5{print $NF}'|xargs rm -rf
五、查看服务
六、常见问题:
- 解决jenkins自动杀掉衍生进程
BUILD_ID=dontKillMe
- 普通jar包打包问题
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source> <!--指明源码用的Jdk版本-->
<target>1.8</target> <!--指明打包后的Jdk版本-->
</configuration>
</plugin>
</plugins>
</build>
并且将父依赖的SpringBoot插件配置去掉。