一、背景
这套自动化流程是应用于测试环境的,主要是开发从IDEA修改完代码然后push到gitlab,jenkins拉取gitlab上指定分支代码,编译代码,通过-v选项加载最新代码,重启容器对外提供服务。
二、实现原理
2.1 主要流程
- 开发人员提交代码到 Gitlab 代码仓库
- 从gitlab上拉取指定分支代码编译
- 使用编译好的程序重启docker容器
三、实现过程
3.1 参数化构建过程参数
- 可选参数 project,项目名称
- 字符串参数chooseBranch,用于选gitlab上的分支
- 字符串类型参数waitTime,定义等待时间
3.2 参数化构建过程执行时shell
3.2.1 执行时shell的基本步骤
- 拉取指定分支代码到/programs
- 删除上一次编译从maven仓库拉取到jar包,避免jar包冲突
- 重新启动容器
contentName="$project-TB"
echo "stop $contentName"
docker stop $contentName
echo "" > /docker/tomcat/logs/$project/catalina.out
echo "编译开始……"
cd /programs
if [ -d $project ]; then
echo $project" is exist"
else
git clone [email protected]:backstage/$project.git
fi
cd /programs/$project/
git fetch origin //获取远程分支
git checkout $chooseBranch
git pull origin $chooseBranch
rm -rf ~/.m2/repository/com/mogucaifu/
mvn clean package install
echo "编译完成。"
echo "start "$contentName
OLD_BUILD_ID=$BUILD_ID
echo $OLD_BUILD_ID
BUILD_ID=$project
docker start $contentName
sleep $waitTime
tail -n 500 /docker/tomcat/logs/$project/catalina.out
BUILD_ID=$OLD_BUILD_ID
echo $BUILD_ID
3.3 业务服务镜像制作过程
3.1.1 可远程debug的tomcat镜像启动
- 传入$1作为项目名称
- 传入$2作为pinpoint的应用名称
- 传入$3作为远程debug端口
- 启动已经做好的tomcat-jdk8:latest镜像,制作过程参考 通过Dockerfile编写tomcat镜像
] # vim tomcat-debug.sh
project=$1
pro=${project//_/-}
projectName="$1-TB"
ipaddr=$(ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}'|head -1);
ipaddr=${ipaddr:9}
pname=${2}
port=${3}
RUN_PORT=${4}
JVM_OPTION="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=$port -Duser.timezone=GMT+08
-server -Xms256m -Xmx1024m -Dpinpoint.agentId=${pname}-${ipaddr} -Dpinpoint.applicationName=${pname} "
echo "JVM_OPTION=$JVM_OPTION"
docker stop $projectName && docker rm $projectName
docker run -d --name $projectName --net=host \
-v /opt/image_data:/image_data:rw \
-v /opt/image_data:/opt/image_data:rw \
-v /docker/tomcat/logs/$project:/opt/tomcat/logs \
-v /programs/$project/target/$pro:/opt/tomcat/webapps/$pro \
-e RUN_OPTION="$JVM_OPTION" -e RUN_PORT=$RUN_PORT \
registry.moguyun.com/tomcat-jdk8
sleep 2s
tail -f ../logs/$project/catalina.out
3.1.2 配置好参数的启动脚本
- 项目名称为financial-shop-server
- pname为financial
- 远程debug端口号为8213
- 运行端口为9997
] # sh -x financial.sh
/docker/tomcat/bin/tomcat-debug.run financial-shop-server financial 8213 9997