【gitlab+jenkins+docker】第七节 自动生成docker容器并启动项目

【gitlab+jenkins+docker】手把手教你搭建基于gitlab+jenkins+docker的项目的自动化部署流程

    • 前言
    • jenkins
    • Post Steps
    • 运行job
    • 验证
    • 后记
    • 跳转

前言

下面我们进行最后的工作,生成容器启动项目。

jenkins

回到我们的jenkins页面,点击我们的任务,进入配置:
【gitlab+jenkins+docker】第七节 自动生成docker容器并启动项目_第1张图片
拉至最末端的Post Steps:
【gitlab+jenkins+docker】第七节 自动生成docker容器并启动项目_第2张图片
下面介绍下这段代码。

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包全路径名称(无需更改);
    根据项目情况,进行修改后,点击保存退出。

运行job

点击立即构建后,进入构建过程:

【gitlab+jenkins+docker】第七节 自动生成docker容器并启动项目_第3张图片
查看控制台输出:
【gitlab+jenkins+docker】第七节 自动生成docker容器并启动项目_第4张图片
等待片刻后,执行成功:
【gitlab+jenkins+docker】第七节 自动生成docker容器并启动项目_第5张图片

验证

查看构建容器目录:
【gitlab+jenkins+docker】第七节 自动生成docker容器并启动项目_第6张图片
查看容器是否启动:
在这里插入图片描述
进入docker容器查看java进程是否正常:
在这里插入图片描述
页面访问一下服务:
【gitlab+jenkins+docker】第七节 自动生成docker容器并启动项目_第7张图片
OK,均正常,到这里,我们的框架算是搭完了,以后有项目,直接往jenkins上面配。

后记

关于远程触发(十分实用)存有疑问的朋友,可以下方留言交流。

跳转

第一节 基础环境介绍与准备
第二节 docker版gitlab安装和配置
第三节 docker版jenkins安装和配置
第四节 docker版mysql安装和配置
第五节 docker信息明细表设计与实现(含收集脚本)
第六节 docker容器自动化生成脚本
第七节 自动生成docker容器并启动项目

你可能感兴趣的:(Docker,docker,gitlab,jenkens)