如何针对单个分支执行两次构建/部署流程?
实现方案
完全可行,只需要在现有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
相关产品推荐
相关产品推荐

