Heroku 部署

此页面记录了使用 dpl v1 进行部署,该版本目前是默认版本。下一个主要版本 dpl v2 将很快发布,我们建议您开始使用它。有关详细信息,请参阅 我们的博客文章。您可以在 此处找到 dpl v2 文档

Travis CI 可以在构建成功后自动部署您的 Heroku 应用程序。

要使用默认配置,请将您的加密 Heroku api 密钥添加到您的 .travis.yml

deploy:
  provider: heroku
  api_key:
    secure: "YOUR ENCRYPTED API KEY"

如果您同时安装了 HerokuTravis CI 命令行客户端,则可以通过从项目目录运行以下命令来获取密钥、对其进行加密并将其添加到 .travis.yml

travis encrypt $(heroku auth:token) --add deploy.api_key

travis 命令默认为使用 travis-ci.org 作为 API 端点。如果您的构建在 travis-ci.com 上运行(即使您的存储库是公开的),请添加 --pro 标志来覆盖此设置

travis encrypt $(heroku auth:token) --add deploy.api_key --pro

您也可以使用 Travis CI 命令行设置工具 travis setup heroku

部署自定义应用程序名称 #

默认情况下,我们将尝试部署到与存储库同名的应用程序。例如,如果您从 GitHub 存储库 travis-ci/travis-chat 部署应用程序,而没有显式指定应用程序的名称,Travis CI 将尝试部署到名为 travis-chat 的 Heroku 应用。

您可以通过 app 选项显式设置名称

deploy:
  provider: heroku
  api_key: ...
  app: my-app-123

还可以将不同的分支部署到不同的应用程序

deploy:
  provider: heroku
  api_key: ...
  app:
    master: my-app-staging
    production: my-app-production

如果这些应用属于不同的 Heroku 帐户,则需要对 API 密钥执行相同的操作

deploy:
  provider: heroku
  api_key:
    master: ...
    production: ...
  app:
    master: my-app-staging
    production: my-app-production

部署特定分支 #

如果您有特定于分支的选项,如 上所示,Travis CI 将自动确定要从中部署的分支。否则,它只会从您的 master 分支部署。

您也可以使用 on 选项显式指定要从中部署的分支

deploy:
  provider: heroku
  api_key: ...
  on: production

或者,您也可以将其配置为从所有分支部署。

deploy:
  provider: heroku
  api_key: ...
  on:
    all_branches: true

从拉取请求触发的构建永远不会触发部署。

运行命令 #

在某些设置中,您可能希望在 Heroku 上成功部署后运行命令。您可以使用 run 选项执行此操作

deploy:
  provider: heroku
  api_key: ...
  run: "rake db:migrate"

它也接受命令列表

deploy:
  provider: heroku
  api_key: ...
  run:
    - "rake db:migrate"
    - "rake cleanup"

请注意,当我们运行您的命令时,Heroku 应用可能尚未完全部署并准备好提供请求。为了缓解这种情况,您可以在命令之前添加 sleep 语句以添加延迟。

自定义命令的错误日志 #

自定义 Heroku 命令不会影响 Travis CI 构建状态或触发 Travis CI 通知。

使用诸如 PapertrailLogentries 之类的附加组件来获取 rake db:migrate 或其他命令的通知。

这些附加组件具有电子邮件通知系统,可以在 Heroku 日志中出现某些字符串匹配时触发。例如,如果日志包含“此迁移及所有后续迁移已取消”,则可以触发电子邮件通知。

重新启动应用程序 #

有时您希望在命令之间或之后重新启动 Heroku 应用程序。您可以通过添加“restart”命令轻松地做到这一点

deploy:
  provider: heroku
  api_key: ...
  run:
    - "rake db:migrate"
    - restart
    - "rake cleanup"

部署构建工件 #

在您的测试运行并在部署之前,Travis CI 将清理您所做的任何其他文件和更改。

这可能不是您想要的,因为您可能会生成一些也应该部署的工件(考虑资产编译)。现在有一个选项可以跳过清理

deploy:
  provider: heroku
  api_key: ...
  skip_cleanup: true

条件部署 #

可以使用 on 选项使部署成为条件。

deploy:
  provider: heroku
  api_key: ...
  on:
    branch: staging
    rvm: 2.0.0

上述配置将在 Ruby 2.0.0 上通过暂存分支时触发部署。

您还可以添加自定义条件

deploy:
  provider: heroku
  api_key: ...
  on:
    condition: "$CC = gcc"

可用条件为

  • all_branches - 当设置为 true 时,如果通过,则从任何分支触发部署。
  • branch - 要从中部署的分支或分支列表,如果通过,则默认为 master(如果未指定分支)。
  • tags - 当设置为 true 时,Travis CI 仅在标记的构建上部署。由于存在限制,此条件必须与设置为 true 的 `all_branches` 配合使用。否则,分支的默认条件将干扰标签条件。
  • condition - 自定义条件或自定义条件列表
  • jdk - 如果通过,则要从中部署的 JDK 版本。
  • node - 如果通过,则要从中部署的 NodeJS 版本。
  • perl - 如果通过,则要从中部署的 Perl 版本。
  • php - 如果通过,则要从中部署的 PHP 版本。
  • python - 如果通过,则要从中部署的 Python 版本。
  • ruby - 如果通过,则要从中部署的 Ruby 版本。
  • repo - 仅为给定存储库触发构建,以与 fork 良好配合。

部署策略 #

Travis CI 支持不同的机制来部署到 Heroku

  • api: 使用 Heroku 的 构建 API。这是默认策略。
  • git: 通过 HTTPS 执行 git push

它默认为 api,但您可以通过 strategy 选项更改它

deploy:
  provider: heroku
  api_key: ...
  strategy: git

git 策略上使用 .gitignore #

当您使用任何 git 策略时,请注意部署将遵循 .gitignore

如果您的 .gitignore 文件匹配构建创建的内容,请使用 before_deploy 更改其内容。

在部署之前和之后运行命令 #

有时您希望在部署之前或之后运行命令。您可以为此使用 before_deployafter_deploy 阶段。只有当 Travis CI 实际部署时,才会触发这些阶段。

before_deploy: "echo 'ready?'"
deploy:
  ..
after_deploy:
  - ./after_deploy_1.sh
  - ./after_deploy_2.sh