使用 Dpl 作为部署工具

  • Tier: 基础版, 专业版, 旗舰版
  • Offering: JihuLab.com, 私有化部署

Dpl(发音为字母 D-P-L)是一个用于持续部署的工具,由 Travis CI 开发并使用,也可以与极狐GitLab CI/CD 一起使用。

Dpl 可以用于部署到任何支持的提供者。

前提条件#

要使用 Dpl,你至少需要 Ruby 1.9.3 并具有安装 gems 的能力。

基本用法#

Dpl 可以在任何机器上安装:

shell
gem install dpl

这允许你从本地终端测试所有命令,而不是必须在 CI 服务器上测试。

如果你没有安装 Ruby,可以在兼容 Debian 的 Linux 上执行:

shell
apt-get update apt-get install ruby-dev

Dpl 提供对大量服务的支持,包括:Heroku、Cloud Foundry、AWS/S3 等。要使用它,请定义提供者和提供者所需的任何附加参数。

例如,如果你想使用它将应用程序部署到 Heroku,你需要指定 heroku 作为提供者,指定 api_keyapp。所有可能的参数可以在 Heroku API 部分中找到。

yaml
1staging: 2 stage: deploy 3 script: 4 - gem install dpl 5 - dpl heroku api --app=my-app-staging --api_key=$HEROKU_STAGING_API_KEY 6 environment: staging

在上面的例子中,我们使用 Dpl 将 my-app-staging 部署到 Heroku 服务器,API 密钥存储在 HEROKU_STAGING_API_KEY 安全变量中。

使用 Dpl 和 Docker#

在大多数情况下,你已配置 极狐GitLab Runner 使用服务器的 shell 命令。这意味着所有命令都在本地用户的上下文中运行(例如 gitlab_runnergitlab_ci_multi_runner)。这也意味着很可能在你的 Docker 容器中没有安装 Ruby 运行时。你必须安装它:

yaml
1staging: 2 stage: deploy 3 script: 4 - apt-get update -yq 5 - apt-get install -y ruby-dev 6 - gem install dpl 7 - dpl heroku api --app=my-app-staging --api_key=$HEROKU_STAGING_API_KEY 8 rules: 9 - if: $CI_COMMIT_BRANCH == "main" 10 environment: staging

第一行 apt-get update -yq 更新了可用软件包的列表,第二行 apt-get install -y ruby-dev 在系统上安装了 Ruby 运行时。以上示例适用于所有兼容 Debian 的系统。

在暂存和生产中的用法#

在开发工作流程中,拥有暂存(开发)和生产环境是很常见的。

让我们考虑以下示例:我们希望将 main 分支部署到 staging,并将所有标签部署到 production 环境。最终的 .gitlab-ci.yml 设置如下所示:

yaml
1staging: 2 stage: deploy 3 script: 4 - gem install dpl 5 - dpl heroku api --app=my-app-staging --api_key=$HEROKU_STAGING_API_KEY 6 rules: 7 - if: $CI_COMMIT_BRANCH == "main" 8 environment: staging 9 10production: 11 stage: deploy 12 script: 13 - gem install dpl 14 - dpl heroku api --app=my-app-production --api_key=$HEROKU_PRODUCTION_API_KEY 15 rules: 16 - if: $CI_COMMIT_TAG 17 environment: production

我们创建了两个部署作业,这些作业在不同的事件上执行:

  • staging: 针对所有推送到 main 分支的提交执行
  • production: 针对所有推送的标签执行

我们还使用了两个安全变量:

  • HEROKU_STAGING_API_KEY: 用于部署暂存应用的 Heroku API 密钥
  • HEROKU_PRODUCTION_API_KEY: 用于部署生产应用的 Heroku API 密钥

存储 API 密钥#

要将 API 密钥存储为安全变量:

  1. 在左侧边栏中,选择 搜索或转到 并找到你的项目。
  2. 选择 设置 > CI/CD
  3. 展开 变量

在项目设置中定义的变量与构建脚本一起发送到 runner。安全变量存储在仓库之外。切勿在项目的 .gitlab-ci.yml 文件中存储密钥。确保密钥的值在作业日志中隐藏也很重要。

通过在变量名称前添加 $(非 Windows runner)或 %(Windows Batch runner)访问添加的变量:

  • $VARIABLE: 用于非 Windows runner
  • %VARIABLE%: 用于 Windows Batch runner

阅读更多关于 CI/CD 变量