You need to enable JavaScript to run this app. GitLab CI/CD如何自动识别前后端变更执行对应构建部署任务
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI/CD如何自动识别前后端变更执行对应构建部署任务

问题解答

一、按需触发构建部署的配置实现

GitLab原生支持通过目录变更判断任务是否执行,使用rules字段下的changes参数即可实现,无需手动修改配置切换部署目标。
你原有配置存在两个问题:一是没有指定工作目录,执行脚本时会默认在仓库根目录找不到对应文件;二是前端部署S3的脚本错误引用了后端Jar包路径。修正后的完整配置如下:

variables:
  ARTIFACT_NAME: cars-api-v$CI_PIPELINE_IID.jar
  APP_NAME: cars-api
  # 把目录定义成变量,后续修改更方便
  FRONTEND_DIR: "FrontEndCarProject"
  BACKEND_DIR: "BackendCarProject"

stages:
  - build
  - deploy

# 前端构建:仅前端目录变更时执行
build_front:
  stage: build
  image: node:latest
  before_script:
    - cd $FRONTEND_DIR
  script:
    - npm install
    - npm run build # 记得替换为你实际的前端构建命令
  artifacts:
    paths:
      - $FRONTEND_DIR/dist/
  rules:
    # 前端目录下有文件变更时执行
    - changes:
        - $FRONTEND_DIR/**/*
      when: on_success
    # 其他情况不执行
    - when: never

# 后端构建:仅后端目录变更时执行
build_back:
  stage: build
  image: openjdk:12-alpine
  before_script:
    - cd $BACKEND_DIR
  script:
    - ./gradlew build
  artifacts:
    paths:
      - $BACKEND_DIR/build/libs/
  rules:
    - changes:
        - $BACKEND_DIR/**/*
      when: on_success
    - when: never

# 前端部署S3:仅前端目录变更时执行
deploy_s3:
  stage: deploy
  image: python:latest
  before_script:
    - pip install awscli
    - aws configure set region us-east-1
  script:
    # 已修正为复制前端dist目录到S3
    - aws s3 cp $FRONTEND_DIR/dist/ s3://$S3_BUCKET/ --recursive
  rules:
    - changes:
        - $FRONTEND_DIR/**/*
      when: on_success
    - when: never

# 后端部署Elastic Beanstalk:仅后端目录变更时执行
deploy_back_end:
  stage: deploy
  image: banst/awscli
  script:
    - aws configure set region us-east-1
    - aws s3 cp $BACKEND_DIR/build/libs/$ARTIFACT_NAME s3://$S3_BUCKET/$ARTIFACT_NAME
    - aws elasticbeanstalk create-application-version --application-name $APP_NAME --version-label $CI_PIPELINE_IID --source-bundle S3Bucket=$S3_BUCKET,S3Key=$ARTIFACT_NAME
    - aws elasticbeanstalk update-environment --application-name $APP_NAME --environment-name "production" --version-label=$CI_PIPELINE_IID
  rules:
    - changes:
        - $BACKEND_DIR/**/*
      when: on_success
    - when: never

如果需要实现「修改.gitlab-ci.yml时全量构建前后端」的逻辑,在每个任务的rules的changes数组里新增.gitlab-ci.yml路径即可。


二、单仓库存前后端是否为最佳实践

没有绝对的最佳实践,根据你的团队规模和迭代模式选择即可:

  • 单仓(Monorepo)适合小团队、前后端迭代耦合度高的场景:优势是前后端关联变更可以放在同一次提交,版本对应关系清晰,不需要跨仓库同步版本。你的场景下如果没有特殊的权限隔离、独立迭代要求,完全不需要拆分仓库,上述配置已经可以满足需求。
  • 多仓适合大团队、前后端完全独立迭代的场景:优势是权限可以分开管控,各自的CI配置更简单,不会互相影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 21:45:04