一、背景
这套自动化流程是应用于测试环境的,主要是开发从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包冲突
-
重新启动容器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 1contentName="$project-TB"
2echo "stop $contentName"
3docker stop $contentName
4
5echo "" > /docker/tomcat/logs/$project/catalina.out
6
7echo "编译开始……"
8cd /programs
9
10if [ -d $project ]; then
11 echo $project" is exist"
12else
13 git clone git@gitlab.moguyun.com:backstage/$project.git
14fi
15
16cd /programs/$project/
17git fetch origin //获取远程分支
18git checkout $chooseBranch
19git pull origin $chooseBranch
20
21rm -rf ~/.m2/repository/com/mogucaifu/
22
23mvn clean package install
24echo "编译完成。"
25
26echo "start "$contentName
27OLD_BUILD_ID=$BUILD_ID
28echo $OLD_BUILD_ID
29BUILD_ID=$project
30docker start $contentName
31sleep $waitTime
32tail -n 500 /docker/tomcat/logs/$project/catalina.out
33BUILD_ID=$OLD_BUILD_ID
34echo $BUILD_ID
35
36
3.3 业务服务镜像制作过程
3.1.1 可远程debug的tomcat镜像启动
- 传入$1作为项目名称
- 传入$2作为pinpoint的应用名称
- 传入$3作为远程debug端口
- 启动已经做好的tomcat-jdk8:latest镜像,制作过程参考 通过Dockerfile编写tomcat镜像
] # vim tomcat-debug.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 1project=$1
2pro=${project//_/-}
3projectName="$1-TB"
4ipaddr=$(ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}'|head -1);
5ipaddr=${ipaddr:9}
6pname=${2}
7port=${3}
8RUN_PORT=${4}
9
10JVM_OPTION="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=$port -Duser.timezone=GMT+08
11 -server -Xms256m -Xmx1024m -Dpinpoint.agentId=${pname}-${ipaddr} -Dpinpoint.applicationName=${pname} "
12
13echo "JVM_OPTION=$JVM_OPTION"
14
15docker stop $projectName && docker rm $projectName
16docker run -d --name $projectName --net=host \
17 -v /opt/image_data:/image_data:rw \
18 -v /opt/image_data:/opt/image_data:rw \
19 -v /docker/tomcat/logs/$project:/opt/tomcat/logs \
20 -v /programs/$project/target/$pro:/opt/tomcat/webapps/$pro \
21 -e RUN_OPTION="$JVM_OPTION" -e RUN_PORT=$RUN_PORT \
22 registry.moguyun.com/tomcat-jdk8
23
24sleep 2s
25
26tail -f ../logs/$project/catalina.out
27
3.1.2 配置好参数的启动脚本
- 项目名称为financial-shop-server
- pname为financial
- 远程debug端口号为8213
- 运行端口为9997
] # sh -x financial.sh
1
2 1/docker/tomcat/bin/tomcat-debug.run financial-shop-server financial 8213 9997
2