一个工程多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配置,供参考

yml 复制代码
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

# 后面的阶段省略,提取出要部署的服务后就好办了
相关推荐
庚昀◟17 小时前
腾讯云 CVM + Docker + Jenkins + GitLab CI/CD 全流程指南(python、flask实现简单计算器)
python·ci/cd·docker·flask·jenkins
亚历克斯神17 小时前
Java 开发者 2026 成长路线图:从初级到架构师
java·spring·微服务
亚历克斯神17 小时前
Java 代码质量保障:静态分析与代码审查实践
java·spring·微服务
twc82918 小时前
【无标题】
软件测试·微服务·链路追踪
番茄去哪了18 小时前
单体转微服务:正确的拆分思路与实战原则(上)
java·微服务·架构
牛奶咖啡1318 小时前
CI/CD——使用Jenkins实现自动化部署与持续集成
ci/cd·jenkins·jenkins是什么?有啥用·jenkins有哪些适用场景·jenkins的优缺点·jenkins的安装部署·jenkins安装必备环境
rKWP8gKv71 天前
Java微服务性能监控:Prometheus与Grafana集成方案
java·微服务·prometheus
aXin_ya1 天前
微服务第八天 Sentinel 四种分布式事务模式
java·数据库·微服务
该昵称用户已存在1 天前
以开源筑基,架构先行——深度拆解 MyEMS 微服务能源管理系统的技术内核
微服务·架构·开源
身如柳絮随风扬1 天前
多数据源切换实战:从业务场景到3种实现方案全解析
java·分布式·微服务