如何在每个合并请求上通过Docker启动应用程序?

我运行jenkins和我的应用程序dockerized,即当我运行容器它暴露端口3000,我可以指向我的浏览器。 在每个Github PR上,我都想将git commit部署到某个正在运行的容器,并让Jenkins将其链接到可以访问的链接。 任何PR更新都会自动重新部署,并在PRclosures/解决它被取消。

我已经看过kubernetes和一个小农场主,但假设我只能部署到一个盒子,最简单的方法是什么?

有一个jenkins插件github-pullrequest可以解决你的问题。

先决条件:

  1. 你有一个jenkins服务器可以通过互联网访问,如果你想通过webhook触发你的构build。
  2. 你有一个GitHub API令牌来访问/pipe理你的Git仓库,它可以自己在设置中生成。

请按照指导configuration设置您的jenkins与github集成。

configuration完成后:

  • 你可以通过PR事件触发你的构build: 打开 / 提交改变 / closures ,或具有特定模式的评论
  • 您可以通过环境variables$ {GITHUB_PR_STATE}获得PR状态,以便您可以启动或停止特定值的容器。
  • 您可以发布评论给PR,在启动docker容器后告诉您的Web服务的地址。

关于公开端口的多公关端口,你可以运行带有-p 3000容器,它会自动在docker主机上暴露一个范围内的端口, docker port <container>会显示特定的端口号,例如:

  • container1的地址为<host>:32667PR1
  • container2 ,地址为<host>:35989用于PR2

我认为最简单的解决办法是创build两个不同的Jenkins Jobs,一个部署,另一个部署它。 这个触发器可以在GitHub中设置一个用于PR创build的webhooks,一个用于PRparsing。

正如Sylvain GIROD指出的那样:

只有一个盒子来运行应用程序,你需要改变公开的端口。 当一个GitHub PR发生时,你部署你的应用程序(docker run -p newport:containerport)。 如果您正在部署服务,则更改目标端口。

然后你把这个端口的链接发回给用户(email?)。

此外,您需要一些键值存储来记住为哪些用户创build了哪个窗格,以便您可以决定是否销毁旧的容器。

我也build议给服务一些时间来生活和定期清理陈旧的容器/服务。

Interesting Posts