在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