一个工程多Module的微服务项目,如何在GitLab中配置CI/CD - 教程

常规操作

首先你需要部署好GitLab的CI/CD,该步骤参考网上教程

gitlab-ci 配置

一个工程多Module的微服务项目一般是这样的结构:
├── service-a/ # 服务A
│ └── service-a-api
│ └── service-a-service
│ └── target/
│ └── service-a.jar
│ └── pom.xml
├── service-b/ # 服务B
│ └── service-b-api
│ └── service-b-service
│ └── target/
│ └── service-b.jar
│ └── pom.xml
├── service-c/ # 服务C
│ └── service-c-api
│ └── service-c-service
│ └── target/
│ └── service-c.jar
│ └── pom.xml
└── .gitlab-ci.yml
└── pom.xml

在根目录下执行mvn clean package,这样把所有的服务包都打好了就是大家打包一般
service-x.jar 是我们要部署的jar包

每次全部部署就是要利用gitlab的CI/CD来自动部署我们修改过的服务,不

使用git 来查询有变化的文件,然后跟所有要部署的服务中进行匹配,存在的话就表示该服务需要进行部署,提取出要部署的服务名(我这里的情况是每个服务的最后一个单词来做为服务别名)。

下面是我这里检测变化服务的CI/CD配置,供参考

variables:
ALL_SERVICES: "gateway admin"
detect_changed_services:
stage: detect_change
script:
# 关键修复1:用|包裹if语句块,确保正确换行,查询有变化的文件
- |
if [ -n "$(git rev-parse HEAD^ 2>/dev/null)" ]; then
CHANGED_FILES=$(git diff --name-only HEAD^ HEAD)
else
CHANGED_FILES=$(git ls-files)
fi
- echo "变更文件列表:"
- echo "$CHANGED_FILES"
# 初始化变更服务列表
- CHANGED_SERVICES=""
# 跟配置的服务进行匹配,匹配成功表示,该服务需要部署
- |
for SERVICE in $ALL_SERVICES; do
if echo "$CHANGED_FILES" | grep -q "$SERVICE"; then
CHANGED_SERVICES="$CHANGED_SERVICES $SERVICE"
echo "检测到变更:$SERVICE"
fi
done
# 格式化服务列表
- |
CHANGED_SERVICES=$(echo "$CHANGED_SERVICES" | xargs | tr ' ' '\n' | sort -u | tr '\n' ' ')
echo "最终需要处理的服务:$CHANGED_SERVICES"
echo "CHANGED_SERVICES=$CHANGED_SERVICES" >> variables.env
artifacts:
reports:
dotenv: variables.env
tags:
- maven
only:
- dev
# 后面的阶段省略,提取出要部署的服务后就好办了
posted @ 2025-09-03 18:13  yfceshi  阅读(19)  评论(0)    收藏  举报