docker - 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 容器从注册表运行到应用程序测功机。这就是我被卡住的地方。请参阅我的以下问题:
Heroku 不被 Jenkins 识别。(我的 Jenkins 在 ec2 上运行,我已将 heroku toolbelt 安装为 ec2-user 用户。但 Jenkins 抛出错误:heroku:找不到命令)。我该如何解决这个问题?
如何从 Jenkins 进行“heroku 登录”,因为登录命令会提示浏览器登录。我添加了 ssh 密钥,但我不知道如何从命令行使用它,因此 Jenkins “shell 脚本”
我能想到的唯一另一种方法是使用虚拟 git 存储库通过 heroku 管道进行部署,Jenkins 将在成功构建时将源代码上传到该存储库。
非常感谢您帮助解决上述两个问题。
提前致谢。
解决方案
您需要以运行 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 上运行的所有作业都将注入环境变量。
- 对于自动 cli 交互,heroku 支持 API 令牌。您可以将它
~/.netrc
放在构建机器上或作为环境变量提供(参见此处)。
推荐阅读
- clang - 如何在 llvm ir 中创建 thread_local 变量?
- python - python函数应该总是返回一些值有什么原因吗?
- javascript - 如何从返回承诺的回调函数中获取数据?
- python - 将 GeoJSON 加载到 GeoPandas 数据帧中 - 格式错误或给出“引发 TypeError”
- python - 在等待数据库查询响应时从外部停止线程
- ruby-on-rails - 如何创建带有测试消息的新 ActiveModel::Error?
- github - 代表组织打开 GitHub 问题和拉取请求
- c - 添加依赖于所有目标的目标
- stata - stata中没有验证性因素分析(CFA)的结果
- php - 使用数据库中的值设置 laravel 站点名称