基于springboot的多环境应用CI/CD应用实践

  • 持续集成/部署应用实践
  • 1.jenkins配置
  • 2.Gitlab配置
  • 3.代码的自动编译打包
  • 4.docker容器编排
  • 5.jenkins执行docker-compose命令


持续集成/部署应用实践

本项目基于原生开源框架springCloud开发,由于eureka 2.0停更,注册中心已更换为nacos,另外也集成启用了nacos的配置中心功能。为了实现应用的自动化打包部署,我们基于springboot对多环境配置的支持,结合git+gitlab+jenkins+maven+docker+harbor+docker-compose等工具达到目的。

各个工具的安装配置是第一步,网上的安装手册很多,这里就不再赘述,直接来看持续集成发布的配置过程。

1.jenkins配置

首先,在jenkins中新建项目——“构建一个自由风格的软件项目”,关联上Gitlab上的地址,并添加用来拉取代码git账户。

然后,构建触发器选择 “Build when a change is pushed to GitLab” ,注意: 复制出 URL 和 Token,我们后面配置 Gitlab 的 Webhook 会用到。

springboot cxf 客户端 springboot cicd_docker


springboot cxf 客户端 springboot cicd_ci_02

另外,在jenkins中配置环境变量参数用于区分测试环境、生产环境。

springboot cxf 客户端 springboot cicd_spring boot_03


在Post steps阶段,将配置文件参数替换、docker镜像制作、上传镜像仓库等命令填入到 “execute shell”中。

#!/bin/bash
echo $version $config
#使用sed替换启动配置文件中的字符串,设置为test/prod环境
sed -i "s/"@profilesActive@"/$config/g" src/main/resources/bootstrap.yml
# 多环境配置通过bootstrap-dev.yml、bootstrap-test.yml、bootstrap-prod.yml进行区分
/opt/apache-maven-3.5.0/bin/mvn -U -Dmaven.test.failure.ignore clean package -P$config
rm -f src/main/resources/bootstrap.yml
# 使用项目根目录下的Dockerfile文件构建镜像
docker build -t 192.168.1.88:8022/ebid/$JOB_BASE_NAME-$config .
docker tag 192.168.1.88:8022/ebid/$JOB_BASE_NAME-$config 192.168.1.88:8022/ebid/$JOB_BASE_NAME-$config:$version
# 上传本地镜像至远程私有仓库harbor
# push命令需要使用docker login先登录harbor私仓,登录一次会在~/.docker/config.json 中生成 auth 串
# 在后续对docker进行pull和push的时候,这个auth就是凭证,后续不需要再登录
docker push 192.168.1.88:8022/ebid/$JOB_BASE_NAME-$config
docker push 192.168.1.88:8022/ebid/$JOB_BASE_NAME-$config:$version
# 删除本地镜像
docker image rm -f 192.168.1.88:8022/ebid/$JOB_BASE_NAME-$config
docker image rm -f 192.168.1.88:8022/ebid/$JOB_BASE_NAME-$config:$version

最后点击保存,则jenkins持续集成配置完成。

2.Gitlab配置

首先,打开 Gitlab 的 Repo 的 Settings-Integrations。

然后,URL 和 Secret Token 填写 Jenkins 项目中构建触发器部分生成的(见图1),点击 “Add webhook”,即完成配置!

3.代码的自动编译打包

在前两个步骤完成后,一旦工程项目中有merge命令提交,则gitlab将会自动发起jenkins里的项目构建请求,进而触发项目编译、项目打包、启动文件配置参数替换、docker镜像制作、docker镜像标记、docker镜像推送等一系列操作。

4.docker容器编排

docker镜像发布到远程私有仓库地址后,接下来到了发布环节。由于项目涉及到数十个服务,为了管理方便,安装docker-compose工具来对docker容器进行管理编排工作。

#docker-compose.yml文件单个服务的配置节选
ebid-bjca:
    container_name: ebid-bjca
    image: 192.168.1.88:8022/ebid/ebid-bjca-${config}
    restart: always
    ports:
      - "9530:9530"
    networks:
      -  "ebid"
    environment:
      - JAVA_ARGS=-server -Xms128M -Xmx128M -Xmn64M
    volumes:
      - /etc/localtime:/etc/localtime
      - ./logs/ebid-bjca:/opt/run/logs

5.jenkins执行docker-compose命令

在前4步完成后,镜像已经上传到私仓,docker-compose命令也已经编辑好,最后一步就是执行docker-compose命令。在这里继续使用jenkins,进入到服务器中,并通过docker-compose命令拉取镜像和启动容器。

springboot cxf 客户端 springboot cicd_springboot cxf 客户端_04


通过以上5个步骤,就完成了项目的持续集成与部署,部分细节有简化处理,如有疑问,欢迎交流~