首页 > 解决方案 > Jenkins CI 在 Heroku 上部署 docker 镜像

问题描述

我有一个 Jenkins CI,并使用它使用 Jenkins 脚本管道构建(mvn)和容器化(docker)我的应用程序。最后,我想将我的容器部署到 Heroku dyno(我已经创建了一个应用程序)。

我已遵循此文档https://devcenter.heroku.com/articles/container-registry-and-runtime并已成功将我的 docker 映像推送到 registry.heroku.com/sunset-sailing-4049/web。

问题是自从此公告https://devcenter.heroku.com/changelog-items/1426以来,我现在需要显式执行“heroku container:release web”,以使我的 docker 容器从注册表运行到应用程序测功机。这就是我被卡住的地方。请参阅我的以下问题:

  1. Heroku 不被 Jenkins 识别。(我的 Jenkins 在 ec2 上运行,我已将 heroku toolbelt 安装为 ec2-user 用户。但 Jenkins 抛出错误:heroku:找不到命令)。我该如何解决这个问题?

  2. 如何从 Jenkins 进行“heroku 登录”,因为登录命令会提示浏览器登录。我添加了 ssh 密钥,但我不知道如何从命令行使用它,因此 Jenkins “shell 脚本”

我能想到的唯一另一种方法是使用虚拟 git 存储库通过 heroku 管道进行部署,Jenkins 将在成功构建时将源代码上传到该存储库。

非常感谢您帮助解决上述两个问题。

提前致谢。

标签: dockerjenkinsherokujenkins-pipeline

解决方案


  1. 您需要以运行 jenkins 的用户身份安装 heroku。或者,如果您全局安装它,它可能不在运行 jenkins 的用户的 PATH 中。设置 PATH 有多个选项:

    • 为特定命令设置。如果您的工作是管道,只需将 heroku 命令包装在withEnv闭包中:

      withEnv(['PATH+HEROKU=/use/local/bin/']) { your heroku command here }

    • 设置 jenkins slave 的路径:转到 [Manage Jenkins] -> [Manage Nodes],配置您的节点并将环境变量设置PATH$PATH:/use/local/bin/. 这样,在 slave 上运行的所有作业都将注入环境变量。

  2. 对于自动 cli 交互,heroku 支持 API 令牌。您可以将它~/.netrc放在构建机器上或作为环境变量提供(参见此处)。

推荐阅读