springcloud中配置ci/cd集成docker的配置文件

这个没啥可说的,主要就是一些配置,不过为了方便同学们,还是放在这里,有需要的自取,当然有更好的建议,请同学们不吝赐教。

1. gitlab-ci.yml

复制代码
stages:
  - build
  - deploy

# 全局环境变量
variables:
  MAVEN_OPTS: "-Xmx2048m -Dmaven.wagon.http.retryHandler.count=5 -Dmaven.javadoc.skip=true -Dmaven.repositoryLockTimeout=300"
  DOCKER_HOST: unix:///var/run/docker.sock
  DOCKER_TLS_CERTDIR: "/certs"
  DOCKER_PULL_POLICY: "if-not-present"
  MAVEN_SETTINGS: /root/.m2/settings.xml

# 分支规则:develops/hotfix 手动触发,失败不阻断流水线
.rules_dev_hotfix:
  rules:
    - if: $CI_COMMIT_BRANCH == "develops"
      when: manual
      allow_failure: true
    - if: $CI_COMMIT_BRANCH == "hotfix"
      when: manual
      allow_failure: true

# Runner 标签匹配模板
.tags_docker_java:
  tags:
    - docker
    - java
    - vue
    - dev
    - deploy

# Deploy强制拉代码模板
.clone_full_code:
  variables:
    GIT_STRATEGY: fetch
    GIT_CHECKOUT: "true"
  before_script:
    - git config --global http.sslVerify false

# 打包构建推送镜像模板
.build_docker_template:
  stage: build
  image: dind-jdk17-mvn:27
  services:
    - docker:27-dind
  timeout: 60m
  extends: [.rules_dev_hotfix, .tags_docker_java]
  cache:
    paths:
      - .m2/repository
    key:
      files:
        - pom.xml
      prefix: $CI_COMMIT_BRANCH-$MODULE_NAME
    policy: pull
  before_script:
    - git config --global http.sslVerify false
  script:
    - mkdir -p .m2 /root/.m2
    # 修复后无XML语法错误的settings.xml
    - echo '<?xml version="1.0" encoding="UTF-8"?><settings xmlns="http://maven.apache.org/SETTINGS/1.2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd"><servers><server><id>nexus-releases</id><username>admin</username><password>Liuyihui1234</password></server><server><id>nexus-snapshots</id><username>admin</username><password>Liuyihui1234</password></server></servers><mirrors><mirror><id>nexus-public</id><mirrorOf>*</mirrorOf><name>Nexus私服公共组</name><url>http://10.11.11.102:8081/repository/maven-public/</url></mirror></mirrors><profiles><profile><id>nexus</id><repositories><repository><id>nexus-releases</id><url>http://10.11.11.102:8081/repository/maven-releases/</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></repository><repository><id>nexus-snapshots</id><url>http://10.11.11.102:8081/repository/maven-snapshots/</url><releases><enabled>false</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>nexus-releases</id><url>http://10.11.11.102:8081/repository/maven-releases/</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></pluginRepository><pluginRepository><id>nexus-snapshots</id><url>http://10.11.11.102:8081/repository/maven-snapshots/</url><releases><enabled>false</enabled></releases><snapshots><enabled>true</enabled></snapshots></pluginRepository></pluginRepositories></profile></profiles><activeProfiles><activeProfile>nexus</activeProfile></activeProfiles></settings>' > .m2/settings.xml
    - cp .m2/settings.xml $MAVEN_SETTINGS
    - cat $MAVEN_SETTINGS

    - mvn -s $MAVEN_SETTINGS clean package -T 1C -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Dmaven.compile.fork=true -Dmaven.resolver.transferParallel=8 -pl $MODULE_PATH -am
    - ls -lh $MODULE_PATH/target/*.jar
    - export ENV_TAG=$CI_COMMIT_BRANCH
    - cd $MODULE_PATH

    # - docker pull ${ENV_TAG}_$MODULE_NAME:latest || true
    - docker build --cache-from ${ENV_TAG}_$MODULE_NAME:latest -t ${ENV_TAG}_$MODULE_NAME:latest .

    - docker image prune -f --filter "until=24h"

# 单模块部署脚本
.deploy_single_script:
  script:
    - export ENV_TAG=$CI_COMMIT_BRANCH
    - ls -la
    - cd compose-${ENV_TAG}
    - ENV_TAG=${ENV_TAG} docker-compose up -d --force-recreate --pull never $MODULE_NAME

# 全量部署脚本
.deploy_all_script:
  script:
    - export ENV_TAG=$CI_COMMIT_BRANCH
    - ls -la
    - cd compose-${ENV_TAG}
    - ENV_TAG=${ENV_TAG} docker-compose up -d

# 并行构建任务
build_pig-register:
  extends: .build_docker_template
  variables:
    MODULE_PATH: pig-register
    MODULE_NAME: pig-register

build_pig-gateway:
  extends: .build_docker_template
  variables:
    MODULE_PATH: pig-gateway
    MODULE_NAME: pig-gateway

build_pig-upms-biz:
  extends: .build_docker_template
  variables:
    MODULE_PATH: pig-upms/pig-upms-biz
    MODULE_NAME: pig-upms-biz

build_iot-develops-biz:
  extends: .build_docker_template
  variables:
    MODULE_PATH: iot-develops/iot-develops-biz
    MODULE_NAME: iot-develops-biz

build_pig-auth:
  extends: .build_docker_template
  variables:
    MODULE_PATH: pig-auth
    MODULE_NAME: pig-auth

build_data-center-biz:
  extends: .build_docker_template
  variables:
    MODULE_PATH: data-center/data-center-biz
    MODULE_NAME: data-center-biz

# 单模块部署任务
deploy_pig-register:
  stage: deploy
  image: docker:latest
  timeout: 5m
  needs: [build_pig-register]
  extends: [.rules_dev_hotfix, .tags_docker_java, .clone_full_code, .deploy_single_script]
  variables:
    MODULE_NAME: pig-register

deploy_pig-gateway:
  stage: deploy
  image: docker:latest
  timeout: 5m
  needs: [build_pig-gateway]
  extends: [.rules_dev_hotfix, .tags_docker_java, .clone_full_code, .deploy_single_script]
  variables:
    MODULE_NAME: pig-gateway

deploy_pig-upms-biz:
  stage: deploy
  image: docker:latest
  timeout: 5m
  needs: [build_pig-upms-biz]
  extends: [.rules_dev_hotfix, .tags_docker_java, .clone_full_code, .deploy_single_script]
  variables:
    MODULE_NAME: pig-upms-biz

deploy_iot-develops-biz:
  stage: deploy
  image: docker:latest
  timeout: 5m
  needs: [build_iot-develops-biz]
  extends: [.rules_dev_hotfix, .tags_docker_java, .clone_full_code, .deploy_single_script]
  variables:
    MODULE_NAME: iot-develops-biz

deploy_pig-auth:
  stage: deploy
  image: docker:latest
  timeout: 5m
  needs: [build_pig-auth]
  extends: [.rules_dev_hotfix, .tags_docker_java, .clone_full_code, .deploy_single_script]
  variables:
    MODULE_NAME: pig-auth

deploy_data-center-biz:
  stage: deploy
  image: docker:latest
  timeout: 5m
  needs: [build_data-center-biz]
  extends: [.rules_dev_hotfix, .tags_docker_java, .clone_full_code, .deploy_single_script]
  variables:
    MODULE_NAME: data-center-biz

2. docker-compose.yml

复制代码
name: develops-ms
services:
  pig-register:
    image: develops_pig-register:latest
    container_name: develops_pig-register
    restart: always
    ports:
      - "8848:8848"
      - "9848:9848"
    environment:
      MODE: standalone
      ENV_NAME: develops
    networks:
      - develops_net

  pig-gateway:
    image: develops_pig-gateway:latest
    ports:
      - "7777:7777"
    environment:
      # Nacos地址:指向宿主机运行的hotfix nacos
      SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR: 10.11.11.101:8848
      SPRING_CLOUD_NACOS_CONFIG_SERVER-ADDR: 10.11.11.101:8848
      # 填入刚才创建的develops命名空间ID
      SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE: "700f7bf3-8576-4d80-a5c4-13e78c09f856"
      SPRING_CLOUD_NACOS_CONFIG_NAMESPACE: "700f7bf3-8576-4d80-a5c4-13e78c09f856"
      # nacos登录账号密码
      SPRING_CLOUD_NACOS_USERNAME: nacos
      SPRING_CLOUD_NACOS_PASSWORD: nacos
    networks:
      - develops_net

  pig-upms-biz:
    image: develops_pig-upms-biz:latest
    environment:
      # Nacos地址:指向宿主机运行的hotfix nacos
      SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR: 10.11.11.101:8848
      SPRING_CLOUD_NACOS_CONFIG_SERVER-ADDR: 10.11.11.101:8848
      # 填入刚才创建的develops命名空间ID
      SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE: "700f7bf3-8576-4d80-a5c4-13e78c09f856"
      SPRING_CLOUD_NACOS_CONFIG_NAMESPACE: "700f7bf3-8576-4d80-a5c4-13e78c09f856"
      # nacos登录账号密码
      SPRING_CLOUD_NACOS_USERNAME: nacos
      SPRING_CLOUD_NACOS_PASSWORD: nacos
    networks:
      - develops_net

  iot-develops-biz:
    image: develops_iot-develops-biz:latest
    environment:
      # Nacos地址:指向宿主机运行的hotfix nacos
      SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR: 10.11.11.101:8848
      SPRING_CLOUD_NACOS_CONFIG_SERVER-ADDR: 10.11.11.101:8848
      # 填入刚才创建的develops命名空间ID
      SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE: "700f7bf3-8576-4d80-a5c4-13e78c09f856"
      SPRING_CLOUD_NACOS_CONFIG_NAMESPACE: "700f7bf3-8576-4d80-a5c4-13e78c09f856"
      # nacos登录账号密码
      SPRING_CLOUD_NACOS_USERNAME: nacos
      SPRING_CLOUD_NACOS_PASSWORD: nacos
    networks:
      - develops_net

  pig-auth:
    image: develops_pig-auth:latest
    environment:
      # Nacos地址:指向宿主机运行的hotfix nacos
      SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR: 10.11.11.101:8848
      SPRING_CLOUD_NACOS_CONFIG_SERVER-ADDR: 10.11.11.101:8848
      # 填入刚才创建的develops命名空间ID
      SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE: "700f7bf3-8576-4d80-a5c4-13e78c09f856"
      SPRING_CLOUD_NACOS_CONFIG_NAMESPACE: "700f7bf3-8576-4d80-a5c4-13e78c09f856"
      # nacos登录账号密码
      SPRING_CLOUD_NACOS_USERNAME: nacos
      SPRING_CLOUD_NACOS_PASSWORD: nacos
    networks:
      - develops_net

  data-center-biz:
    image: develops_data-center-biz:latest
    environment:
      # Nacos地址:指向宿主机运行的hotfix nacos
      SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR: 10.11.11.101:8848
      SPRING_CLOUD_NACOS_CONFIG_SERVER-ADDR: 10.11.11.101:8848
      # 填入刚才创建的develops命名空间ID
      SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE: "700f7bf3-8576-4d80-a5c4-13e78c09f856"
      SPRING_CLOUD_NACOS_CONFIG_NAMESPACE: "700f7bf3-8576-4d80-a5c4-13e78c09f856"
      # nacos登录账号密码
      SPRING_CLOUD_NACOS_USERNAME: nacos
      SPRING_CLOUD_NACOS_PASSWORD: nacos
    networks:
      - develops_net

networks:
  develops_net:
    driver: bridge

name: hotfix-ms
services:
  pig-register:
    image: hotfix_pig-register:latest
    container_name: hotfix_pig-register
    restart: always
    ports:
      - "8848:8848"
      - "9848:9848"
    environment:
      MODE: standalone
      ENV_NAME: hotfix
    networks:
      - hotfix_net

  pig-gateway:
    image: hotfix_pig-gateway:latest
    container_name: hotfix_pig-gateway
    restart: always
    ports:
      - "17777:17777"
    environment:
      ENV_NAME: hotfix
    depends_on:
      - pig-registername: hotfix-ms
services:
  pig-register:
    image: hotfix_pig-register:latest
    container_name: hotfix_pig-register
    restart: always
    ports:
      - "8848:8848"
      - "9848:9848"
    environment:
      MODE: standalone
      ENV_NAME: hotfix
    networks:
      - hotfix_net

  pig-gateway:
    image: hotfix_pig-gateway:latest
    ports:
      - "17777:17777"
    environment:
      # Nacos地址:指向宿主机运行的hotfix nacos
      SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR: 10.11.11.101:8848
      SPRING_CLOUD_NACOS_CONFIG_SERVER-ADDR: 10.11.11.101:8848
      # 填入刚才创建的develops命名空间ID
      SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE: "0fdb7c54-c112-4b51-80f5-9ef3b9b33190"
      SPRING_CLOUD_NACOS_CONFIG_NAMESPACE: "0fdb7c54-c112-4b51-80f5-9ef3b9b33190"
      # nacos登录账号密码
      SPRING_CLOUD_NACOS_USERNAME: nacos
      SPRING_CLOUD_NACOS_PASSWORD: nacos
    networks:
      - hotfix_net

  pig-upms-biz:
    image: hotfix_pig-upms-biz:latest
    environment:
      # Nacos地址:指向宿主机运行的hotfix nacos
      SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR: 10.11.11.101:8848
      SPRING_CLOUD_NACOS_CONFIG_SERVER-ADDR: 10.11.11.101:8848
      # 填入刚才创建的develops命名空间ID
      SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE: "0fdb7c54-c112-4b51-80f5-9ef3b9b33190"
      SPRING_CLOUD_NACOS_CONFIG_NAMESPACE: "0fdb7c54-c112-4b51-80f5-9ef3b9b33190"
      # nacos登录账号密码
      SPRING_CLOUD_NACOS_USERNAME: nacos
      SPRING_CLOUD_NACOS_PASSWORD: nacos
    networks:
      - hotfix_net

  iot-develops-biz:
    image: hotfix_iot-develops-biz:latest
    environment:
      # Nacos地址:指向宿主机运行的hotfix nacos
      SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR: 10.11.11.101:8848
      SPRING_CLOUD_NACOS_CONFIG_SERVER-ADDR: 10.11.11.101:8848
      # 填入刚才创建的develops命名空间ID
      SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE: "0fdb7c54-c112-4b51-80f5-9ef3b9b33190"
      SPRING_CLOUD_NACOS_CONFIG_NAMESPACE: "0fdb7c54-c112-4b51-80f5-9ef3b9b33190"
      # nacos登录账号密码
      SPRING_CLOUD_NACOS_USERNAME: nacos
      SPRING_CLOUD_NACOS_PASSWORD: nacos
    networks:
      - hotfix_net

  pig-auth:
    image: hotfix_pig-auth:latest
    environment:
      # Nacos地址:指向宿主机运行的hotfix nacos
      SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR: 10.11.11.101:8848
      SPRING_CLOUD_NACOS_CONFIG_SERVER-ADDR: 10.11.11.101:8848
      # 填入刚才创建的develops命名空间ID
      SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE: "0fdb7c54-c112-4b51-80f5-9ef3b9b33190"
      SPRING_CLOUD_NACOS_CONFIG_NAMESPACE: "0fdb7c54-c112-4b51-80f5-9ef3b9b33190"
      # nacos登录账号密码
      SPRING_CLOUD_NACOS_USERNAME: nacos
      SPRING_CLOUD_NACOS_PASSWORD: nacos
    networks:
      - hotfix_net

  data-center-biz:
    image: hotfix_data-center-biz:latest
    environment:
      # Nacos地址:指向宿主机运行的hotfix nacos
      SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR: 10.11.11.101:8848
      SPRING_CLOUD_NACOS_CONFIG_SERVER-ADDR: 10.11.11.101:8848
      # 填入刚才创建的develops命名空间ID
      SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE: "0fdb7c54-c112-4b51-80f5-9ef3b9b33190"
      SPRING_CLOUD_NACOS_CONFIG_NAMESPACE: "0fdb7c54-c112-4b51-80f5-9ef3b9b33190"
      # nacos登录账号密码
      SPRING_CLOUD_NACOS_USERNAME: nacos
      SPRING_CLOUD_NACOS_PASSWORD: nacos
    networks:
      - hotfix_net

networks:
  hotfix_net:
    driver: bridge
    networks:
      - hotfix_net

  pig-upms-biz:
    image: hotfix_pig-upms-biz:latest
    container_name: hotfix_pig-upms-biz
    restart: always
    environment:
      ENV_NAME: hotfix
    depends_on:
      - pig-register
    networks:
      - hotfix_net

  iot-develops-biz:
    image: hotfix_iot-develops-biz:latest
    container_name: hotfix_iot-develops-biz
    restart: always
    environment:
      ENV_NAME: hotfix
    depends_on:
      - pig-register
    networks:
      - hotfix_net

  pig-auth:
    image: hotfix_pig-auth:latest
    container_name: hotfix_pig-auth
    restart: always
    environment:
      ENV_NAME: hotfix
    depends_on:
      - pig-register
    networks:
      - hotfix_net

  data-center-biz:
    image: hotfix_data-center-biz:latest
    container_name: hotfix_data-center-biz
    restart: always
    environment:
      ENV_NAME: hotfix
    depends_on:
      - pig-register
    networks:
      - hotfix_net

networks:
  hotfix_net:
    driver: bridge

3. Dockerfile

复制代码
# 业务基础镜像
FROM openjdk:17-jdk
# CI传入模块路径,自动适配多级目录
WORKDIR /app
# 动态拷贝对应模块的jar包
COPY target/*.jar app.jar
# 暴露端口,按需修改
EXPOSE 7002
# 启动命令
ENTRYPOINT ["java","-Duser.timezone=Asia/Shanghai", "-jar", "app.jar"]

主要就是以上三个文件的配置,就是gitlab自动化部署的核心了。

我是空谷有来人,感谢支持!

相关推荐
code_slave(码畜)22 分钟前
微服务架构落地:消息队列架构设计(下篇)——消息堆积、死信治理与集群监控告警实战
spring boot·spring cloud·微服务·云原生·中间件·架构
灯澜忆梦1 小时前
【docker】#2 | 基础命令
docker·容器·eureka
程序员老赵3 小时前
Docker 部署 WordPress:轻松搭建开源内容管理平台
docker·开源·wordpress
知守观3 小时前
feign-core 就在依赖树里,运行时却找不到类:一次 provided scope 引发的启动失败排查
java·spring cloud·maven
sbjdhjd4 小时前
云安全 | 从特权容器到旧版 runC:Docker 宿主机访问与运行时缺陷复盘
运维·网络安全·docker·云原生·kubernetes·云计算·云安全
Pocker_Spades_A6 小时前
Penpot自托管设计协作:Docker部署、MCP接入与Codex生成UI实操记录
ui·docker·容器
阿狗童鞋6 小时前
高并发系统设计实战指南
java·spring boot·spring cloud
Lvan的前端笔记15 小时前
docker:每个前端项目一个 Nginx 容器还是只有一个Nginx容器
前端·nginx·docker
sbjdhjd20 小时前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全