You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gitlab CI/CD问题:多容器应用仅构建推送变更镜像失败

问题解决:GitLab CI单仓库多容器变更检测触发构建失败

问题根源

你当前的配置中,rules里的changes使用了矩阵变量$SERVICE,但GitLab CI的规则评估是在流水线初始化阶段完成的,这时候parallel:matrix中的变量还未被实例化,./$SERVICE/**/*会被当作字面量路径处理,无法匹配任何实际的服务目录变更,导致任务始终不执行。

解决方案

方案一:为每个服务单独定义Job

直接拆分出对应每个服务的独立Job,明确指定changes的路径:

build_app_image:
  image: docker:20.10.16
  services:
    - docker:20.10.16-dind
  variables:
    DOCKER_TLS_CERTDIR: "/certs"
    SERVICE: app
  before_script:
    - docker login -u $DOCKERHUB_USER -p $DOCKERHUB_PASS
  script:
    - docker build -t $DOCKERHUB_USER/test:$SERVICE-$VERSION ./$SERVICE/
    - docker push $DOCKERHUB_USER/test:$SERVICE-$VERSION
  rules:
  - if: $CI_COMMIT_BRANCH == "master"
    changes: 
      - ./app/**/*

build_db_image:
  image: docker:20.10.16
  services:
    - docker:20.10.16-dind
  variables:
    DOCKER_TLS_CERTDIR: "/certs"
    SERVICE: db
  before_script:
    - docker login -u $DOCKERHUB_USER -p $DOCKERHUB_PASS
  script:
    - docker build -t $DOCKERHUB_USER/test:$SERVICE-$VERSION ./$SERVICE/
    - docker push $DOCKERHUB_USER/test:$SERVICE-$VERSION
  rules:
  - if: $CI_COMMIT_BRANCH == "master"
    changes: 
      - ./db/**/*

方案二:使用模板复用公共配置

如果服务数量较多,用extends提取公共配置,减少重复代码:

# 定义公共模板
.docker_build_template:
  image: docker:20.10.16
  services:
    - docker:20.10.16-dind
  variables:
    DOCKER_TLS_CERTDIR: "/certs"
  before_script:
    - docker login -u $DOCKERHUB_USER -p $DOCKERHUB_PASS
  script:
    - docker build -t $DOCKERHUB_USER/test:$SERVICE-$VERSION ./$SERVICE/
    - docker push $DOCKERHUB_USER/test:$SERVICE-$VERSION

# 应用服务构建Job
build_app_image:
  extends: .docker_build_template
  variables:
    SERVICE: app
  rules:
  - if: $CI_COMMIT_BRANCH == "master"
    changes: 
      - ./app/**/*

# 数据库服务构建Job
build_db_image:
  extends: .docker_build_template
  variables:
    SERVICE: db
  rules:
  - if: $CI_COMMIT_BRANCH == "master"
    changes: 
      - ./db/**/*

验证效果

修改app目录下的任意文件并推送到master分支,build_app_image任务会自动触发;修改db目录下的文件则触发build_db_image任务,未变更的服务不会执行构建,符合你的需求。

内容的提问来源于stack exchange,提问作者gbelo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 07:07:10