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

