在Heroku容器registry中使用Jenkins部署Docker镜像

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

当我推Herku容器registry上的Docker图像通过heroku container:push web ,我得到一个错误Your Docker image must specify a 'CMD' instruction

但是,我必须写一个命令来在Heroku的容器中运行Jenkins?

提前致谢!

错误是指您的Dockerfile缺less的CMD节。

但是,如果您不打算修改jenkins映像的上游版本(如您提供给Dockerfile的链接Dockerfile ),则不需要创build自己的Dockerfile映像和Dockerfile

你可以只是docker pull jenkins/jenkins:lts本地然后使用docker tag jenkins/jenkins:lts registry.heroku.com/<app>/<process-type>然后推送到Heroku使用新的标签docker push registry.heroku.com/<app>/<process-type>

你可以阅读关于这个主题的Heroku官方文档 。

编辑:

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

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

虽然我们不需要它在一个正常的环境,我们正在添加一个CMD节只是为了通过heroku container:push检查需要在Dockerfile CMD节,– Dockerfile --debug=5被检测到jenkins.sh ENTRYPOINT脚本并发送到jenkins.war程序,依次将debugging级别设置为5(如果未指定,则为默认级别),这反过来不会以任何方式影响我们。

编辑#2:

因为heroku不能接受多于一个ENTRYPOINT指令, ENTRYPOINT你必须进一步偏离正常的Dockerfile场景,并通过设置为[]来取消ENTRYPOINT上游节,因为它与heroku不兼容,然后将所有内容放在CMD节中:

 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 

由于jenkins和java是内存饥饿的应用程序,因此我将JAVA_OPTS添加到了免费的梯级dynamic库,并根据需要进行调整。

我添加了-s标志给tini因为它不再具有PID 1 ,在这里更多。

我添加了--httpPort=$PORT标志发送到jenkins.war以便heroku可以填充适当的$PORT的应用程序。

来自heroku文档的注意事项:

进入点是可选的。 如果没有设置,将使用/ bin / sh -c

现在当我试图在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