使用Gitlab CI+To be Continuous如何在同一流水线部署至多Openshift实例?
在同一GitLab CI流水线部署到多个OpenShift实例(基于To be Continuous模板)
完全可以实现,核心是利用To be Continuous模板的变量覆盖能力,为每个OpenShift实例单独配置专属变量并创建独立的部署作业。以下是具体操作方案:
1. 配置多实例专属CI变量
在GitLab项目的CI/CD > 变量页面,为两个生产环境的OpenShift实例分别设置带标识前缀的变量:
- 第一个生产实例:
PROD1_OS_TOKEN:对应第一个OpenShift集群的令牌PROD1_OS_SERVER:第一个集群的API地址PROD1_OS_PROJECT:目标项目名称
- 第二个生产实例:
PROD2_OS_TOKEN:第二个OpenShift集群的令牌PROD2_OS_SERVER:第二个集群的API地址PROD2_OS_PROJECT:目标项目名称
建议将这些变量设为保护变量和掩码变量,避免敏感信息泄露。
2. 编写流水线部署作业
在.gitlab-ci.yml中,通过复用To be Continuous的OpenShift模板,为每个实例创建独立的部署作业,覆盖对应的变量:
# 部署到第一个OpenShift生产集群 deploy-prod1: extends: - .to-be-continuous.openshift variables: OS_TOKEN: $PROD1_OS_TOKEN OS_SERVER: $PROD1_OS_SERVER OS_PROJECT: $PROD1_OS_PROJECT CI_ENVIRONMENT_NAME: prod1 CI_ENVIRONMENT_URL: https://your-app-prod1.example.com # 部署到第二个OpenShift生产集群 deploy-prod2: extends: - .to-be-continuous.openshift variables: OS_TOKEN: $PROD2_OS_TOKEN OS_SERVER: $PROD2_OS_SERVER OS_PROJECT: $PROD2_OS_PROJECT CI_ENVIRONMENT_NAME: prod2 CI_ENVIRONMENT_URL: https://your-app-prod2.example.com
3. 可选:控制部署流程
如果需要按顺序部署(比如先部署到第一个集群验证后再部署第二个),可以添加执行条件:
deploy-prod2: extends: - .to-be-continuous.openshift variables: # 变量同上 needs: ["deploy-prod1"] # 等待第一个部署作业完成再执行 when: manual # 手动触发,适合生产环境的二次确认
关键注意事项
- 确保所有变量前缀和名称拼写准确,避免因变量引用错误导致部署失败
- 不要依赖To be Continuous的自动环境检测,明确覆盖
OS_*变量以指定目标集群 - 生产环境的部署作业建议开启手动触发,降低误操作风险
内容的提问来源于stack exchange,提问作者Nicolas B.
相关产品推荐
相关产品推荐

