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

释放双眼,带上耳机,听听看~!

一、背景

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

二、实现原理

2.1 主要流程

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

三、实现过程

3.1 参数化构建过程参数

  • 可选参数 project,项目名称

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

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

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

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

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

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

3.2.1 执行时shell的基本步骤

  1. 拉取指定分支代码到/programs

  2. 删除上一次编译从maven仓库拉取到jar包,避免jar包冲突

  3. 重新启动容器


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. 传入$1作为项目名称
  2. 传入$2作为pinpoint的应用名称
  3. 传入$3作为远程debug端口
  4. 启动已经做好的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 配置好参数的启动脚本

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

] # sh -x financial.sh


1
2
1/docker/tomcat/bin/tomcat-debug.run financial-shop-server financial 8213 9997
2

 

给TA打赏
共{{data.count}}人
人已打赏
安全运维

故障复盘的简洁框架-黄金三问

2021-9-30 19:18:23

安全运维

OpenSSH-8.7p1离线升级修复安全漏洞

2021-10-23 10:13:25

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索