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

GitLab新手求教:如何用多集群Agent实现单Pipeline跨环境部署

GitLab Pipeline 多集群部署(基于Kubernetes Agent)

可以通过单个Pipeline完成所有集群的部署,核心是为每个环境定义专属的部署Job,并绑定对应的Kubernetes Agent即可。下面是具体的实现方法:

前提准备

确保你的三个Kubernetes Agent(对应dev/test/prod集群)已经完成GitLab项目/组的关联,并且每个Agent在GitLab中有唯一的名称(比如agent-dev、agent-test、agent-prod),同时Agent已在对应集群正常运行。

具体实现步骤

1. 编写.gitlab-ci.yml配置

在项目根目录创建.gitlab-ci.yml,通过定义多环境Job,并为每个Job指定对应的Agent,实现同一个Pipeline部署到不同集群。

示例配置:

stages:
  - build
  - deploy

# 构建镜像Job(根据你的实际流程调整,若已有镜像源可省略)
build-image:
  stage: build
  script:
    - docker build -t your-app-image:${CI_COMMIT_SHORT_SHA} .
    - docker push your-app-image:${CI_COMMIT_SHORT_SHA}
  only:
    - main

# 部署到dev集群
deploy-dev:
  stage: deploy
  environment:
    name: dev
    url: https://dev.your-app.com
  script:
    - kubectl apply -f k8s/deployment.yaml -n dev
    - kubectl set image deployment/your-app your-app=your-app-image:${CI_COMMIT_SHORT_SHA} -n dev
  kubernetes:
    agent:
      name: agent-dev  # 绑定dev集群的Agent
  only:
    - main

# 部署到test集群(依赖dev部署完成)
deploy-test:
  stage: deploy
  environment:
    name: test
    url: https://test.your-app.com
  script:
    - kubectl apply -f k8s/deployment.yaml -n test
    - kubectl set image deployment/your-app your-app=your-app-image:${CI_COMMIT_SHORT_SHA} -n test
  kubernetes:
    agent:
      name: agent-test  # 绑定test集群的Agent
  only:
    - main
  needs: [deploy-dev]

# 部署到production集群(手动触发,依赖test部署完成)
deploy-prod:
  stage: deploy
  environment:
    name: production
    url: https://your-app.com
  script:
    - kubectl apply -f k8s/deployment.yaml -n prod
    - kubectl set image deployment/your-app your-app=your-app-image:${CI_COMMIT_SHORT_SHA} -n prod
  kubernetes:
    agent:
      name: agent-prod  # 绑定prod集群的Agent
  only:
    - main
  when: manual  # 手动触发,防止误部署
  needs: [deploy-test]

2. 关键配置说明

  • 指定Agent:每个部署Job通过kubernetes.agent.name字段绑定对应的Agent,GitLab会自动通过该Agent连接到目标Kubernetes集群执行kubectl命令。
  • 环境标识:environment.name标记不同环境,GitLab会在界面上展示各环境的部署状态,还可配合环境保护规则(比如prod环境需审批)。
  • 部署顺序:用needs关键字控制部署流程,确保dev部署完成后再部署test,最后手动触发prod;若不需要顺序执行,可删除needs让多个部署Job并行。
  • 镜像版本:使用${CI_COMMIT_SHORT_SHA}作为镜像标签,保证每次部署用的是当前提交构建的镜像,避免版本混乱。

3. 优化建议

如果多个部署Job的脚本逻辑重复,可以用extends提取公共模板,减少冗余代码:

# 定义公共部署模板
.deploy-template:
  script:
    - kubectl apply -f k8s/deployment.yaml -n $ENV_NAME
    - kubectl set image deployment/your-app your-app=your-app-image:${CI_COMMIT_SHORT_SHA} -n $ENV_NAME

deploy-dev:
  extends: .deploy-template
  stage: deploy
  environment:
    name: dev
    url: https://dev.your-app.com
  kubernetes:
    agent:
      name: agent-dev
  variables:
    ENV_NAME: dev
  only:
    - main

另外,建议把Kubernetes部署文件(deployment.yaml、service.yaml等)放在项目的k8s目录下,方便Pipeline调用;生产环境建议开启GitLab的环境保护功能,限制部署权限。

内容的提问来源于stack exchange,提问作者Andrea Maestroni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:02:14