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

如何通过GitLab CI动态将分支部署为DigitalOcean应用?

动态分支部署:GitLab CI + DigitalOcean App Platform 优化方案

核心方案:用yq动态修改App Spec的分支配置

不用维护额外模板文件,也无需新增专用分支,直接在CI流程中修改my-app.yml的分支值,步骤如下:

  1. 获取当前分支
    GitLab CI在分支流水线中自动提供CI_COMMIT_BRANCH环境变量,直接指向当前运行CI的分支。

  2. 用yq修改YAML配置
    yq是轻量的YAML处理工具,可直接在命令行修改YAML内容。在CI流程中加入以下命令,将配置里的硬编码分支替换为当前分支:

yq eval '.workers[0].gitlab.branch = env(CI_COMMIT_BRANCH)' my-app.yml -i
  • -i参数表示直接修改原文件,无需生成新文件
  • 如果配置中有多个worker节点,调整索引[0]对应目标节点即可
  1. 执行部署命令
    修改完成后,正常执行doctl部署命令即可。

完整GitLab CI配置示例

deploy_to_do:
  stage: deploy
  image:
    name: digitalocean/doctl:latest
    entrypoint: [""]  # 重置镜像默认入口,避免冲突
  before_script:
    - apk add --no-cache yq  # 在doctl镜像中安装yq
    - doctl auth init -t $DO_API_TOKEN  # 用预存的API Token认证DigitalOcean
  script:
    # 动态替换分支配置
    - yq eval '.workers[0].gitlab.branch = env(CI_COMMIT_BRANCH)' my-app.yml -i
    # 部署应用(如果是更新现有应用,替换为doctl apps update <APP_ID> --spec my-app.yml)
    - doctl apps create --spec my-app.yml
  only:
    - branches  # 只在分支流水线触发部署

注意事项

  • 确保DO_API_TOKEN已添加到GitLab项目的CI/CD变量中(设置为保护变量更安全)
  • 如果你的App Spec中gitlab节点不在workers[0]下,根据实际结构调整yq的路径表达式
  • 若需部署到不同的DO应用实例,可以结合分支名动态生成应用名称或使用不同的spec文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:45:56