这个没啥可说的,主要就是一些配置,不过为了方便同学们,还是放在这里,有需要的自取,当然有更好的建议,请同学们不吝赐教。
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自动化部署的核心了。
我是空谷有来人,感谢支持!