我正在尝试在Heroku上部署jenkinsci/docker,并且在编写Dockerfile时遇到问题。
当我按heroku container:push web
在Heroku Container Registry上推送Docker镜像时,我收到错误Your Docker image must specify a 'CMD' instruction
。
但是我必须编写什么命令才能在Heroku上的容器内运行Jenkins?
提前致谢!
答案 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'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