在Heroku容器注册表上使用Jenkins部署Docker镜像

时间:2017-10-27 11:44:48

标签: docker heroku jenkins

我正在尝试在Heroku上部署jenkinsci/docker,并且在编写Dockerfile时遇到问题。

当我按heroku container:push web在Heroku Container Registry上推送Docker镜像时,我收到错误Your Docker image must specify a 'CMD' instruction

但是我必须编写什么命令才能在Heroku上的容器内运行Jenkins?

提前致谢!

2 个答案:

答案 0 :(得分:2)

错误指的是Dockerfile中缺少的CMD节。

但是,如果您不打算修改jenkins图片的上游版本中的任何内容,则不需要创建自己的泊坞窗映像和Dockerfile(如链接所反映的那样)提供给Dockerfile)。

您可以在本地docker pull jenkins/jenkins:lts然后使用docker tag jenkins/jenkins:lts registry.heroku.com/<app>/<process-type>对其进行标记,然后使用新标记docker push registry.heroku.com/<app>/<process-type>

将其推送到Heroku

您可以在Heroku's official documentation上阅读有关此主题的更多信息。

编辑:

如果你确实需要一个自定义的jenkins docker镜像来安装额外的jenkins插件(比如OP需要),你最终会创建自己的Dockerfile,你将不得不这样做:

FROM jenkins/jenkins:lts
RUN /usr/local/bin/install-plugins.sh gitlab-plugin publish-over-dropbox
CMD ["--debug=5"]

虽然我们在正常环境中不需要它,但我们正在添加CMD节,只是为了通过heroku container:push检查CMD节需要Dockerfile--debug=5节。 1}},jenkins.sh ENTRYPOINT脚本检测到jenkins.war并发送到ENTRYPOINT程序,然后将调试级别设置为5(默认级别为未指明)反过来不影响我们。

编辑#2:

由于heroku不接受Dockerfile的多条指令,因此您必须偏离正常ENTRYPOINT方案并取消[]上游节,方法是将其设置为CMD因为它与heroku不兼容,然后将所有内容放在FROM jenkins/jenkins:lts RUN /usr/local/bin/install-plugins.sh gitlab-plugin publish-over-dropbox ENV JAVA_OPTS -Xms256m -Xmx512m ENTRYPOINT [] CMD /bin/tini -s -- /usr/local/bin/jenkins.sh --httpPort=$PORT 节中:

JAVA_OPTS

由于jenkins和java是需要内存的应用程序,因此需要根据需要进行调整,因此我添加了-s来使用免费的层dyno。

我将tini标记添加到PID 1,因为它不再有--httpPort=$PORT,更多关于here

我添加了发送到jenkins.war的{​​{1}}标记,以便heroku可以为应用填充正确的$PORT

来自heroku docs的注释:

  

ENTRYPOINT是可选的。如果未设置,将使用/ bin / sh -c

答案 1 :(得分:1)

现在,当我尝试在Heroku上部署jenkinsci / docker时,我遇到了另一个问题:

  

2017-10-27T15:53:37.569477 + 00:00 heroku [web.1]:状态从崩溃变为开始

     

2017-10-27T15:53:35.856897 + 00:00 app [api]:用户roman.skaskevich@gmail.com部署网站(dce6a8335a9a)

     

2017-10-27T15:53:35.856897 + 00:00 app [api]:发布由用户roman.skaskevich@gmail.com创建的v7

     

2017-10-27T15:53:53.949433 + 00:00 heroku [web.1]:使用命令'--debug \ = 5'启动流程

     

2017-10-27T15:53:56.142034 + 00:00 app [web.1]:错误:没有这样的文件或目录

     

2017-10-27T15:53:56.243216 + 00:00 heroku [web.1]:状态从开始变为崩溃

     

2017-10-27T15:53:56.228817 + 00:00 heroku [web.1]:已退出状态126