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

如何配置GitLab CI/CD:为Dev/Prod环境实现同构流水线

GitLab CI/CD 双环境(dev/prod)流水线配置方案

以下是重构后的完整配置,实现代码推送到develop分支触发dev环境部署、推送到main分支触发prod环境部署的同构流水线:

image: node:16.13-stretch

stages:
  - install_dependencies
  - database_migration
  - deploy

variables:
  npm_config_cache: '$CI_PROJECT_DIR/.npm'
  # 分支与环境映射,方便后续维护
  DEVELOP_BRANCH: develop
  PROD_BRANCH: main

# 依赖缓存通用模板
.dependencies_cache:
  cache:
    key:
      files:
        - package-lock.json
    paths:
      - .npm
    policy: pull

# 安装依赖通用模板
.base_install_dependencies:
  stage: install_dependencies
  extends: .dependencies_cache
  cache:
    policy: pull-push
  artifacts:
    expire_in: 6h
    paths:
      - node_modules
  script:
    - echo "Node:" && node -v
    - echo "NPM:" && npm -v
    - echo "Installing package dependencies"
    - if [ ! -d "node_modules" ]; then npm install; fi
    - echo "Running lint"
    - npm run lint

# 数据库迁移通用模板
.base_database_migration:
  stage: database_migration
  script:
    - npx prisma migrate deploy

# 部署通用模板
.base_deploy:
  stage: deploy
  cache:
    key: $CI_COMMIT_REF_SLUG-$CI_PROJECT_DIR
    paths:
      - node_modules/
    policy: pull
  script:
    - echo "Installing serverless globally"
    - npm i -g serverless@2.64.1
    - echo "Setting up serverless credentials"
    - npx serverless config credentials --provider aws --key $AWS_ACCESS_KEY_ID --secret $AWS_SECRET_ACCESS_KEY
    - echo "Preparing package"
    - npx serverless package --stage $ENV_STAGE
    - echo "Deploying application"
    - npx serverless deploy --stage $ENV_STAGE

# --------------------------
# Dev环境具体Job
# --------------------------
install_dependencies_dev:
  extends: .base_install_dependencies
  environment:
    name: dev
  only:
    - $DEVELOP_BRANCH

database_migration_dev:
  extends: .base_database_migration
  environment:
    name: dev
  only:
    - $DEVELOP_BRANCH

deploy_dev:
  extends: .base_deploy
  environment:
    name: dev
  variables:
    ENV_STAGE: dev
  only:
    - $DEVELOP_BRANCH

# --------------------------
# Prod环境具体Job
# --------------------------
install_dependencies_prod:
  extends: .base_install_dependencies
  environment:
    name: prod
  only:
    - $PROD_BRANCH

database_migration_prod:
  extends: .base_database_migration
  environment:
    name: prod
  only:
    - $PROD_BRANCH

deploy_prod:
  extends: .base_deploy
  environment:
    name: prod
  variables:
    ENV_STAGE: prod
  only:
    - $PROD_BRANCH

关键改动说明

  1. 模板化复用代码:把三个阶段的通用逻辑抽成.base_xxx模板job,避免重复编写相同脚本,后续修改只需维护模板即可。
  2. 分支与环境映射:在variables中定义分支对应关系,后续分支名变更时只需修改此处,无需逐个调整job的触发规则。
  3. 环境变量隔离:
    • 在GitLab项目的「Settings > CI/CD > Variables」中,分别创建dev和prod环境的专属变量(如AWS密钥、Prisma数据库连接字符串等),设置对应的「Environment scope」为dev或prod。
    • 每个环境的job会自动加载对应环境范围的变量,实现dev和prod环境变量的完全隔离。
  4. 动态部署参数:部署脚本中的--stage参数使用$ENV_STAGE变量,每个环境的job单独赋值该变量,确保部署到对应Serverless阶段。
  5. 精准分支触发:每个环境的job通过only字段绑定对应分支,确保只有推送到develop时执行dev流水线,推送到main时执行prod流水线。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:37:16