我运行 Jenkins 并且我的应用程序是 dockerized,即当我运行容器时它会公开端口 3000,我可以将浏览器指向那里。在每个 Github PR 上,我想将该 git commit 部署到某个正在运行的容器中,并让 Jenkins 将可以访问它的链接发回 PR。在任何 PR 更新时,它都会自动重新部署,而在 PR 关闭/解决时,它会被拆除。
我看过 kubernetes 和一个小牧场主,但是假设我只能部署到一个盒子,那么最简单的方法是什么?
我运行 Jenkins 并且我的应用程序是 dockerized,即当我运行容器时它会公开端口 3000,我可以将浏览器指向那里。在每个 Github PR 上,我想将该 git commit 部署到某个正在运行的容器中,并让 Jenkins 将可以访问它的链接发回 PR。在任何 PR 更新时,它都会自动重新部署,而在 PR 关闭/解决时,它会被拆除。
我看过 kubernetes 和一个小牧场主,但是假设我只能部署到一个盒子,那么最简单的方法是什么?
有一个 jenkins 插件github-pullrequest可以解决你的问题。
先决条件:
请按照指南配置设置您的 jenkins 与 github 的集成。
配置后:
关于使用多个 PR 公开 cotainer 的端口,您可以使用 运行容器-p 3000
,它会在 docker 主机上自动公开一个范围内的端口,docker port <container>
并显示特定的端口号,例如:
container1
地址<host>:32667
为PR1
container2
地址<host>:35989
为PR2
我认为最简单的解决方案是创建两个不同的 Jenkins Jobs,一个负责部署,另一个负责核对它。可以在 GitHub 中设置 2 个 webhook,一个用于 PR 创建,一个用于 PR 解析。
正如 Sylvain GIROD 指出的那样:
只需一个框即可运行应用程序,您需要更改公开的端口。当 GitHub PR 发生时,您部署您的应用程序(docker run -p newport:containerport)。如果您正在部署服务,则更改目标端口。
然后你把这个端口的链接发回给用户(电子邮件?)。
此外,您需要一些键值存储来记住为哪些用户创建了哪个 pod,以便您可以决定新 PR 是否销毁旧容器。
我还建议给服务一段时间,并定期清理陈旧的容器/服务。