spring boot项目搭建gitlab CI CD持续集成环境之CD部署到容器

回系列博客主目录及代码地址 spring boot项目基于docker搭建gitlab CI CD持续集成环境

本文将会介绍如何使用gitlab CI实现持续部署(CD),将spring boot项目打包并部署到docker容器中。

增加application-prod.yml

一般来说,dev环境的配置会跟prod环境配置分开,所以需要增加一个配置专门用于部署到prod
spring boot的配置是增量配置,只需要将不同的配置分开既可。
在这里插入图片描述

  • dev 环境
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/kelvin?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    username: root
    password: mysql
  • prod 环境
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://${MYSQL_HOST}:3306/testdb?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    username: ${MYSQL_USERNAME}
    password: ${MYSQL_PASSWORD}

mysql的hostname、username、password通过环境变量传入。

容器配置

  • Dockerfile
FROM openjdk:8-jdk-alpine

ENV APP_HOME=/usr/app

COPY ./spring-boot-test-ci.jar ${APP_HOME}/app.jar

RUN chmod 777 ${APP_HOME}/app.jar

VOLUME /usr/app

EXPOSE 8001/tcp

WORKDIR ${APP_HOME}

ENTRYPOINT ["java", "-jar", "app.jar", "--spring.profiles.active=prod"]

看不懂?那就要去温习一下docker基础知识了,嘿嘿!

  • docker-compose.yml
version: '3'
services:
  spring-boot-app:
    image: spring-boot-test-ci:v1
    build:
      dockerfile: Dockerfile
      context: .
    container_name: spring-boot-ci
    environment:
      - MYSQL_HOST=mysql
      - MYSQL_USERNAME=ci
      - MYSQL_PASSWORD=ci
      - DB_NAME=testdb
    privileged: true
    ports:
      - 8001:8001
    depends_on:
      - mysql
    networks:
      - webnet

  mysql:
    image: mysql:5.7
    container_name: mysql
#    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=Password1
      - MYSQL_DATABASE=testdb
      - MYSQL_USER=ci
      - MYSQL_PASSWORD=ci
    ports:
      - 3306:3306
    networks:
      - webnet
    volumes:
      - /home/ci/volumes/mysql/data:/var/lib/mysql

networks:
  webnet:

因为项目需要使用到mysql,所以增加了一个mysql service,如果你不想增加mysql的话,也可以在外部启动一个mysql服务器既可,然后修改application-prod.yml相应connection配置连接到你外部的mysql。
如上,在docker-compose.yml配置environment中定义了mysql连接信息等环境变量,那么在部署启动容器的时候就可以注入到application-prod.yml中使用。

增加deploy job

  • 在.gitlab-ci.yml中增加deploy的job
package:
  stage: package
  cache:
    key: m_m2
    policy: pull-push
    paths:
      - .m2/repository/
  script:
    - mvn clean install -P skipTests -s settings.xml
  artifacts:
    when: on_success
    paths:
      - target/spring-boot-test-ci-1.0.0.jar
  tags:
    - SHARE_MAVEN_JDK

deploy:
  stage: deploy
  image: ictu/sshpass:latest
  script:
    - pwd
    - ls -l
    - ls ./target/
    - sshpass -p ci scp -o StrictHostKeyChecking=no target/spring-boot-test-ci-1.0.0.jar ci@localhost:/home/ci/appsrc/spring-boot-ci/spring-boot-test-ci.jar
    - sshpass -p ci scp -o StrictHostKeyChecking=no deploy/Dockerfile ci@localhost:/home/ci/appsrc/spring-boot-ci/Dockerfile
    - sshpass -p ci scp -o StrictHostKeyChecking=no deploy/docker-compose.yml ci@localhost:/home/ci/appsrc/spring-boot-ci/docker-compose.yml
#    - sshpass -p ci ssh -o StrictHostKeyChecking=no ci@localhost 'docker build -f /home/ci/appsrc/spring-boot-ci/Dockerfile -t spring-boot-test-ci:v1 /home/ci/appsrc/spring-boot-ci/'
    - sshpass -p ci ssh -o StrictHostKeyChecking=no ci@localhost 'docker stop spring-boot-ci'
    - sshpass -p ci ssh -o StrictHostKeyChecking=no ci@localhost 'docker-compose -f /home/ci/appsrc/spring-boot-ci/docker-compose.yml up -d --build'
  tags:
    - SSH_REMOTE_DEPLOY
  only:
    - master

定义了两个job:package, deploy. package想将项目打包成jar,上传到artifacts,然后deploy通过ssh scp命令将jar以及相应的部署配置copy到部署机器(这里本地虚拟机)中,然后重新build image并启动容器,进而实现重新部署。

  • 注册deploy runner
    可以发现deploy使用了另一个tag为SSH_REMOTE_DEPLOY的runner,由于所使用的image不一样所以使用单独一个runner用于deploy。这里没有特别需要注意的,只需要在注册runner最后一步选择image:ictu/sshpass:latest

  • 测试
    尝试修改一些东西,然后push到gitlab触发CI CD,成功后:
    在这里插入图片描述
    查看你的修改是否已经生效。

最后

至此,基于spring boot的CI&CD已经全部搭建成功。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值