基于gitlab、jenkins、docker实现CI/CD

一、背景

      这套自动化流程是应用于测试环境的,主要是开发从IDEA修改完代码然后push到gitlab,jenkins拉取gitlab上指定分支代码,编译代码,通过-v选项加载最新代码,重启容器对外提供服务。

二、实现原理

2.1 主要流程

  1. 开发人员提交代码到 Gitlab 代码仓库
  2. 从gitlab上拉取指定分支代码编译
  3. 使用编译好的程序重启docker容器

三、实现过程

3.1 参数化构建过程参数

  • 可选参数 project,项目名称

  • 字符串参数chooseBranch,用于选gitlab上的分支

  • 字符串类型参数waitTime,定义等待时间

3.2 参数化构建过程执行时shell

3.2.1 执行时shell的基本步骤

  1. 拉取指定分支代码到/programs
  2. 删除上一次编译从maven仓库拉取到jar包,避免jar包冲突
  3. 重新启动容器
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. 传入$1作为项目名称
  2. 传入$2作为pinpoint的应用名称
  3. 传入$3作为远程debug端口
  4. 启动已经做好的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 配置好参数的启动脚本

  1. 项目名称为financial-shop-server
  2. pname为financial
  3. 远程debug端口号为8213
  4. 运行端口为9997

] # sh -x financial.sh

/docker/tomcat/bin/tomcat-debug.run financial-shop-server financial 8213 9997
发布了161 篇原创文章 · 获赞 40 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_36441027/article/details/103530395