Help us learn about your current experience with the documentation. Take the survey.

使用 Dpl 作为部署工具

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

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

Dpl 可以部署到任何 支持的提供商

前提条件

使用 Dpl 至少需要 Ruby 1.9.3,并且能够安装 gems。

基本用法

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

gem install dpl

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

如果您没有安装 Ruby,可以在兼容 Debian 的 Linux 系统上安装:

apt-get update
apt-get install ruby-dev

Dpl 支持大量服务,包括:Heroku、Cloud Foundry、AWS/S3 等。 要使用它,需要定义提供商以及提供商所需的任何额外参数。

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

staging:
  stage: deploy
  script:
    - gem install dpl
    - dpl heroku api --app=my-app-staging --api_key=$HEROKU_STAGING_API_KEY
  environment: staging

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

要使用不同的提供商,请查看 支持的提供商 的长列表。

在 Docker 中使用 Dpl

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

staging:
  stage: deploy
  script:
    - apt-get update -yq
    - apt-get install -y ruby-dev
    - gem install dpl
    - dpl heroku api --app=my-app-staging --api_key=$HEROKU_STAGING_API_KEY
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
  environment: staging

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

在暂存和生产环境中的使用

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

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

staging:
  stage: deploy
  script:
    - gem install dpl
    - dpl heroku api --app=my-app-staging --api_key=$HEROKU_STAGING_API_KEY
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
  environment: staging

production:
  stage: deploy
  script:
    - gem install dpl
    - dpl heroku api --app=my-app-production --api_key=$HEROKU_PRODUCTION_API_KEY
  rules:
    - if: $CI_COMMIT_TAG
  environment: production

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

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

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

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

存储 API 密钥

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

  1. 在左侧边栏,选择 Search or go to 并找到您的项目。
  2. 选择 Settings > CI/CD
  3. 展开 Variables

在项目设置中定义的变量会随构建脚本一起发送给 runner。 安全变量存储在仓库之外。切勿将机密信息存储在项目的 .gitlab-ci.yml 文件中。重要的是,机密值应在作业日志中隐藏。

您可以通过在变量名前加上 $(非 Windows runner)或 %(Windows Batch runner)来访问添加的变量:

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

阅读更多关于 CI/CD 变量 的信息。