下面我们进行最后的工作,生成容器启动项目。
jenkins回到我们的jenkins页面,点击我们的任务,进入配置:
拉至最末端的Post Steps:
下面介绍下这段代码。
代码明细:
PATH1="/var/jenkins_home/workspace/server-eureka/market/eureka-server";
ZIP_NAME="server_eureka";
JAR_NAME="euraka-server-1.0.0-SNAPSHOT.jar";
JOB_NAME="server-eureka";
TOKEN_ID="94503900";
ports="8765";
command1="--";
docker="docker3";
YMLN="application.yml";
IP=宿主机IP #请更改
# 网卡名
NETWORK="aidata_network";
# 网卡ip
NW_IP="10.111.113.";
# 宿主机ip
BINDING_IP="宿主机IP"; #请更改
# 注册域名(宿主机)
BINDING_NAME="docker-server-host1";
project=${ZIP_NAME}
ZIP_PATH=/${ZIP_NAME}
PATH_ZIP="${ZIP_PATH}/${ZIP_NAME}.zip";
echo "*************************部署 ${project} 开始*************************"
backup_dir=`date "+%F_%Hh%Mm%Ss"`
# 形成zip包
mkdir -p ${PATH1}/zip/config;
mkdir -p ${PATH1}/zip/logs;
mv ${PATH1}/target/${JAR_NAME} ${PATH1}/zip;
mv ${PATH1}/src/main/resources/*.xml ${PATH1}/src/main/resources/*.yml ${PATH1}/zip/config;
mv ${PATH1}/config/* ${PATH1}/zip;
cd ${PATH1}/zip;
#zip -q -r ${ZIP_NAME}.zip *;
tar -cvf ${ZIP_NAME}.tar.gz *
ssh root@${IP} << remotessh
rm -rf ${ZIP_PATH};
mkdir ${ZIP_PATH};
exit
remotessh
scp -P 22 ${ZIP_NAME}.tar.gz root@${IP}:${ZIP_PATH}
ssh root@${IP} << remotessh
tar -xvf ${ZIP_PATH}/${ZIP_NAME}.tar.gz -C ${ZIP_PATH}
rm -rf ${ZIP_PATH}/${ZIP_NAME}.tar.gz
cd ${ZIP_PATH}
zip -q -r ${ZIP_NAME}.zip ${ZIP_PATH}/*
#mv /root/${ZIP_NAME}.zip ${ZIP_PATH}
sh /opt/automation/docker_job/deploy/start.sh ${PATH_ZIP} ${ports} ${command1} ${docker} ${project} ${YMLN} ${NETWORK} ${NW_IP} ${BINDING_IP} ${BINDING_NAME}
sh /opt/automation/docker_job/docker_ssh.sh
#rm -rf ${ZIP_PATH}
exit
remotessh
echo "****************************部署 ${project} 至${docker}完毕! ****************************"
相关变量的释义如下:
PATH1: jenkins拉取gitlab项目代码在本地的存放路径(直接取到所部署项目的pom文件的父目录,比如在这里eureka的pom文件就在/var/jenkins_home/workspace/server-eureka/market/eureka-server下),路径构成中,/var/jenkins_home/workspace/是固定的,server-eureka是jenkins作业名,/market/eureka-server是项目结构(需更改); ZIP_NAME: 项目及相关文件打成的zip包名,约定是server_xxx或web_xxx(需更改,要遵循约定); JAR_NAME: 项项目jar包名(需更改); JOB_NAME:作业名,约定是server-xxx,或者web-xxx(需更改,要遵循约定); TOKEN_ID: 如果采用了shell远程触发模式的话,这里填写一下id就好,否则该参数可以注释掉(视情况,可选择注释掉); ports: 项目绑定的端口(docker容器的,不是宿主机的),这要去看你的项目设定(如果是springboot项目就去看看生效的application.yml里面设定的是哪个端口),不要担心端口已被占用,自动化部署脚本里面有逻辑分发一个可用的端口(视情况,需修改) command1: 用来充填docker-compose的command属性,必要的操作已经封装在python代码中,“–”代表无需充填,若需要充填,则用“;”分隔命令,同时要注意转义,如:“cd\;ll”(视情况,根据需求决定要不要添加) docker: 宿主机代号,约定为docker1/docker2/docker3……形式,单机版统一约定为docker3(单机版无需修改); YMLN: 此配置针对的是spring boot项目,这里指定哪个yml生效(一般有application.yml、application-dev.yml、application-test.yml、application-prod.yml),若是web项目就直接写application.yml就好了(视情况需更改); IP: 宿主机IP(需更改); NETWORK: docker桥接网卡名,第一节的时候创建过(一般无需更改); NW_IP: 网卡ip网段,最后一位数字不要填,因为是要动态生成的(一般无需更改); BINDING_IP: 宿主机IP(视情况需更改) BINDING_NAME:注册eureka域名注册域名(这里有个小知识点,就是docker桥接模式下,容器进行服务注册,拿到容器的服务名无法寻回的问题,笔者踩了这个坑,并用这种方法填坑,即用宿主机的域名注册服务)(无需更改); project: 项目名(无需更改); ZIP_PATH: 宿主机中的ZIP包父路径(无需更改); PATH_ZIP: 宿主机中的ZIP包全路径名称(无需更改);点击立即构建后,进入构建过程:
查看控制台输出:
等待片刻后,执行成功:
查看构建容器目录:
查看容器是否启动:
进入docker容器查看java进程是否正常:
页面访问一下服务:
OK,均正常,到这里,我们的框架算是搭完了,以后有项目,直接往jenkins上面配。
关于远程触发(十分实用)存有疑问的朋友,可以下方留言交流。
跳转第一节 基础环境介绍与准备
第二节 docker版gitlab安装和配置
第三节 docker版jenkins安装和配置
第四节 docker版mysql安装和配置
第五节 docker信息明细表设计与实现(含收集脚本)
第六节 docker容器自动化生成脚本
第七节 自动生成docker容器并启动项目