You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于Kubernetes与Gitlab实现Staging与Production分支差异化部署

GitLab CI 实现 Staging 与 Production 分支的独立部署

你完全可以通过在.gitlab-ci.yml中为生产环境的部署任务设置only: [master]来实现独立部署,这是核心的配置方式,但为了确保两个环境完全隔离、部署流程稳定,还有几个关键细节需要确认:

1. 核心配置:拆分独立的部署任务

首先,你需要在CI配置文件中创建两个独立的部署Job,分别绑定stagingmaster分支,示例如下:

# 部署到Staging环境
deploy_staging:
  stage: deploy
  script:
    # 替换为你实际的Staging部署命令,比如应用K8s的Staging配置文件
    - kubectl apply -f k8s/staging/ --namespace staging
  only:
    - staging
  environment:
    name: staging
    url: https://staging.your-app.com # 可选,配置后GitLab会显示环境访问链接

# 部署到Production环境
deploy_production:
  stage: deploy
  script:
    # 替换为Production的部署命令,注意使用独立的K8s配置和命名空间
    - kubectl apply -f k8s/production/ --namespace production
  only:
    - master
  when: manual # 强烈建议添加!生产环境手动触发,避免误提交直接部署
  environment:
    name: production
    url: https://your-app.com

这样,当staging分支有提交时,只会触发deploy_stagingmaster分支的提交则会触发deploy_production(如果开启手动触发,需要在GitLab界面确认后执行)。

2. 必要的环境隔离配置

除了CI文件的分支绑定,你还需要确保Kubernetes和GitLab层面的环境隔离:

  • Kubernetes命名空间隔离:必须为Staging和Production创建独立的K8s命名空间(比如stagingproduction),避免两个环境的资源(Pod、Service等)互相干扰。
  • GitLab CI变量区分:如果两个环境需要不同的配置参数(比如数据库地址、API密钥),在GitLab项目的Settings > CI/CD > Variables中,为每个环境设置专属变量(比如STAGING_DB_URLPROD_DB_URL),或者利用GitLab的环境变量功能,为每个Job的environment字段关联对应的变量组。
  • Runner权限验证:确保GitLab Runner使用的Kubernetes服务账号,对stagingproduction两个命名空间都拥有足够的权限(比如deployedit等权限),避免部署时出现权限不足的错误。

3. 可选的最佳实践

为了提升生产环境的部署安全性和可追溯性,建议添加以下配置:

  • 为生产环境部署Job添加手动触发when: manual),避免代码提交后自动部署到生产。
  • 在部署前添加前置检查Job(比如代码静态扫描、单元测试、集成测试),只有通过所有检查的提交才能进入部署阶段。
  • 使用GitLab的Environments功能,在GitLab界面可以直观查看每个环境的部署历史、状态,甚至一键回滚到之前的版本。

总结来说,仅设置only: master是实现生产环境部署的基础,但配合环境隔离和最佳实践配置,才能保证两个环境的独立、稳定运行——不需要在GitLab中做额外的复杂全局配置,只需要完善CI文件和必要的环境设置即可。

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

火山引擎 最新活动