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

如何针对单个分支执行两次构建/部署流程?

实现方案

完全可行,只需要在现有CI配置中新增针对main分支的演示环境构建、部署任务,并通过环境变量区分API地址即可,具体操作如下:

1. 核心调整思路

在main分支更新时,同时触发生产环境和演示环境两套独立的构建、部署流程:

  • 构建阶段:给演示环境的构建任务注入指向演示API的专属环境变量
  • 部署阶段:将演示环境的构建产物同步到对应的服务器目录

2. 修改后的完整CI配置

stages:
- build
- deploy
- test

include:
- template: Security/SAST.gitlab-ci.yml
- template: Security/Secret-Detection.gitlab-ci.yml

# 原有生产环境构建任务
build-main:
  image: node:12
  stage: build
  only:
  - main
  script:
  - yarn global add @quasar/cli
  - rm package-lock.json
  - yarn
  - npm run build:prod
  artifacts:
    expire_in: 1 hour
    paths:
    - dist
# 原有生产环境部署任务
deploy-main:
  stage: deploy
  only:
  - main
  script:
  - echo $CI_PROJECT_DIR
  - whoami
  - sudo rsync -rav --exclude '.git' $CI_PROJECT_DIR/dist/spa/. /var/www/console
  tags:
  - deploy

# ===== 新增:演示环境构建任务 =====
build-main-demo:
  image: node:12
  stage: build
  only:
  - main
  script:
  - yarn global add @quasar/cli
  - rm package-lock.json
  - yarn
  # 注入演示API地址,替换为你的实际变量名和API地址
  - VUE_APP_API_URL=https://demo-api.your-domain.com npm run build:prod
  artifacts:
    expire_in: 1 hour
    paths:
    - dist
    name: "dist-demo" # 可选:自定义产物名称,避免与生产环境混淆
# ===== 新增:演示环境部署任务 =====
deploy-main-demo:
  stage: deploy
  only:
  - main
  needs: ["build-main-demo"] # 确保只在演示构建完成后执行
  script:
  - echo $CI_PROJECT_DIR
  - whoami
  - sudo rsync -rav --exclude '.git' $CI_PROJECT_DIR/dist/spa/. /var/www/console.demo
  tags:
  - deploy

# 原有beta、dev环境任务保留
build-beta:
  image: node:12
  stage: build
  only:
  - beta
  script:
  - yarn global add @quasar/cli
  - rm package-lock.json
  - yarn
  - npm run build:beta
  artifacts:
    expire_in: 1 hour
    paths:
    - dist
deploy-beta:
  stage: deploy
  only:
  - beta
  script:
  - echo $CI_PROJECT_DIR
  - whoami
  - sudo rsync -rav --exclude '.git' $CI_PROJECT_DIR/dist/spa/. /var/www/console.beta
  tags:
  - deploy
build-dev:
  image: node:12
  stage: build
  only:
  - dev
  script:
  - yarn global add @quasar/cli
  - rm package-lock.json
  - yarn
  - npm run build:dev
  artifacts:
    expire_in: 1 hour
    paths:
    - dist
deploy-dev:
  stage: deploy
  only:
  - dev
  script:
  - echo $CI_PROJECT_DIR
  - whoami
  - sudo rsync -rav --exclude '.git' $CI_PROJECT_DIR/dist/spa/. /var/www/console.dev
  tags:
  - deploy
sast:
  stage: test
  artifacts:
    reports:
      sast: gl-sast-report.json
    paths:
    - 'gl-sast-report.json'

3. 细节优化建议

  • 环境变量安全管理:不要硬编码API地址,把演示API地址存到GitLab项目的「Settings > CI/CD > Variables」中(比如命名为DEMO_API_URL),然后在构建脚本中替换为$DEMO_API_URL。
  • npm脚本简化:可以在package.json中新增build:demo脚本,比如"build:demo": "VUE_APP_API_URL=$DEMO_API_URL quasar build",之后CI脚本直接执行npm run build:demo即可。
  • 产物隔离:如果担心生产和演示的构建产物互相覆盖,可通过artifacts:name自定义名称,或者在构建脚本中指定不同的输出目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:36:22