jenkin配置gitlab持续化构建Spring Cloud微服务
前言:由于公司部分项目采用的是spring cloud微服务,然后我选择了使用gitlab和jenkins持续化集成和自动发布服务。经过长时间的使用,感觉还是非常的方便,特此分享一下自己的配置和脚本。
1、先创建jenkins的item
创建一个任务名,选择构建多配置项目。
2.配置项目
--添加描述,选择Discard old builds 保持最大构建数,输入自己需要保留的构建记录。根据自己需求随意输入,输入以后就会根据数字保留相应的构建记录
--添加构建时使用的参数
我添加的参数有:
branch:类型:(String Parameter),需要构建的分支名称,构建时会选择此分支进行打包发布
repackage: 类型:(Boolean Parameter),是否需要重新打包项目,默认是,一般部署项目都需要重新打包,如果仅仅是重启,则在启动时取消选中即可。
restart:类型:(Boolean Parameter),是否需要重启,默认是,一般部署项目即是启动项目,如果仅仅是打包的话,可以在启动是取消选中即可。
HTY_SERVICE:类型(Choice Parameter),选择需要部署的服务,将所有服务的application-name的名称,复制到这里面,部署项目的时候进行选择。
tar_service_port:类型(Multi-line String Parameter),参数格式是:服务名:端口号:IP:包名,这样可以从shell脚本中读取你选中的服务名,部署到哪个ip,端口号是多少,打包以后的包名是什么,方便进一步部署服务。
3.源码管理
--源码管理选择Git, Repository URL输入项目的gitlab地址,点击添加,配置git的用户名和密码,配置用户名和密码是只需要输入用户名和密码,其他输入框可以不用管。然后选择你的用户名和密码。输入分支变量:*/${branch},匹配刚刚的branch变量值。方便拉取分支。
4.构建,选择执行Excute Shell,输入写好的脚本
脚本如下,仅供参考:
#!/bin/bash
BUILD_ID=dontKillMe
elastic=htlb-elasticsearch-service
echo "********************部署开始********************"
if $repackage; then
for SER_PORT_IP in $(echo $tar_server_port) ; do
SERVICE_NAME=$(echo $SER_PORT_IP | cut -f 1 -d ':' )
SERVICE_PORT=$(echo $SER_PORT_IP | cut -f 2 -d ':' )
SERVER_IP=$(echo $SER_PORT_IP | cut -f 3 -d ':' )
JAR_NAME=$(echo $SER_PORT_IP | cut -f 4 -d ':' )
if [[ "$HTY_SERVICE" == "$SERVICE_NAME" || "$HTY_SERVICE" == "all" ]]; then
echo "********************$SERVICE_NAME部署打包开始********************"
mvn clean package -Dmaven.test.skip=true -pl "${SERVICE_NAME}" -am
scp -P22 $SERVICE_NAME/target/$JAR_NAME.jar aaa@qq.com:/root/home/deployer/projects
echo "********************$SERVICE_NAME部署打包结束********************"
fi
done
fi
if $restart; then
if [ $HTY_SERVICE = $elastic ]; then
echo "current service is htlb-elasticsearch-service"
ssh aaa@qq.com "sh /root/elastic.sh stop"
fi
for SER_PORT_IP in $(echo $tar_server_port) ; do
SERVICE_NAME=$(echo $SER_PORT_IP | cut -f 1 -d ':' )
SERVICE_PORT=$(echo $SER_PORT_IP | cut -f 2 -d ':' )
SERVER_IP=$(echo $SER_PORT_IP | cut -f 3 -d ':' )
JAR_NAME=$(echo $SER_PORT_IP | cut -f 4 -d ':' )
if [[ "$HTY_SERVICE" == "$SERVICE_NAME" || "$HTY_SERVICE" == "all" ]]; then
echo "********************$SERVICE_NAME部署服务开始********************"
echo "scp /root/home/deployer/projects/${JAR_NAME}.jar aaa@qq.com${SERVER_IP}:/root/home/deployer/projects";
scp /root/home/deployer/projects/${JAR_NAME}.jar aaa@qq.com${SERVER_IP}:/root/home/deployer/projects
echo "scp complete!"
ssh aaa@qq.com${SERVER_IP} "mkdir -p /root/home/deployer/workspace/${SERVICE_NAME}-${SERVICE_PORT} && cp /root/home/deployer/projects/${JAR_NAME}.jar /root/home/deployer/workspace/${SERVICE_NAME}-${SERVICE_PORT}/app.jar && curl -fsSL http://127.0.0.1/deployJar.sh | bash -s -- -t/root/home/deployer/workspace/${SERVICE_NAME}-${SERVICE_PORT}/app.jar -p${SERVICE_PORT} -a-Dspring.profiles.active=test -l -f/var/log/deployer/service/${SERVICE_NAME}.log"
echo "********************$SERVICE_NAME部署服务结束********************"
fi
if [ "$HTY_SERVICE" == "all" ]; then
sleep 5
fi
done
if [ $HTY_SERVICE = $elastic ]; then
echo "current service is htlb-elasticsearch-service"
sleep 10
ssh aaa@qq.com "sh /root/elastic.sh restart"
fi
fi
echo "********************部署结束********************"
代码部分解释:es服务单独判断是由于es启动的时候失败了,需要先停掉es的节点,启动成功以后再启动es节点。所以写了个脚本去操作。
all变量是当初想要一键启动所有服务,但是由于服务越来越多,一键启动的话风险太大,所以还是老老实实该启动啥就启动啥吧。
代码中有一段需要执行的shell脚本。http://127.0.0.1/deployJar.sh,里面就是一些普通脚本,判断服务端口,杀掉以后进程,已经重启服务的,也是该配置的核心,我就不放出来。需要的朋友可以私我哈。关注公众号:FOSSspace,联系我哈。如果有困难,也可以帮你参考一下。
下一篇: windows安装MySQL8.0.19