S.R*_*man 6 heroku jenkins docker
我正在尝试在 Heroku 上部署jenkinsci/docker,并且在编写我的Dockerfile 时遇到问题。
当我通过 推送 Heroku Container Registry 上的 Docker 映像时heroku container:push web,出现错误Your Docker image must specify a 'CMD' instruction。
但是我必须编写什么命令才能在 Heroku 上的容器内运行 Jenkins?
提前致谢!
该错误是指CMD您的Dockerfile.
Dockerfile但是,如果您不打算修改该映像上游版本的任何内容jenkins(如您提供给 的链接所反映的) ,则您不需要创建自己的 docker 映像Dockerfile。
您可以在docker pull jenkins/jenkins:lts本地使用标签,docker tag jenkins/jenkins:lts registry.heroku.com/<app>/<process-type>然后使用新标签将其推送到 Herokudocker push registry.heroku.com/<app>/<process-type>
您可以在Heroku 的官方文档中阅读有关此主题的更多信息。
编辑:
如果您确实需要自定义 jenkins docker 镜像来安装其他 jenkins 插件(如 OP 需求),您最终将创建自己的镜像Dockerfile,并且必须执行以下操作:
FROM jenkins/jenkins:lts
RUN /usr/local/bin/install-plugins.sh gitlab-plugin publish-over-dropbox
CMD ["--debug=5"]
Run Code Online (Sandbox Code Playgroud)
虽然我们在正常环境中不需要它,但我们添加一个CMD节只是为了heroku container:push通过需要CMD中的节的检查Dockerfile,脚本--debug=5会检测到它jenkins.sh ENTRYPOINT并将其发送到jenkins.war程序,从而将调试级别设置为 5 (如果未指定,则为默认级别),这不会以任何方式影响我们。
编辑#2:
因为heroku 不接受多个指令,所以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
Run Code Online (Sandbox Code Playgroud)
我JAVA_OPTS在 coupe 中添加了一个免费的 dyno,因为 jenkins 和 java 是内存消耗较大的应用程序,请根据需要进行调整。
我添加了该-s标志,tini因为它不再有PID 1,更多内容请参见此处。
我添加了--httpPort=$PORT发送到的标志jenkins.war,以便 heroku 可以填充$PORT应用程序的正确位置。
来自heroku 文档的注释:
ENTRYPOINT 是可选的。如果未设置,将使用 /bin/sh -c
| 归档时间: |
|
| 查看次数: |
1884 次 |
| 最近记录: |