8

我运行 Jenkins 并且我的应用程序是 dockerized,即当我运行容器时它会公开端口 3000,我可以将浏览器指向那里。在每个 Github PR 上,我想将该 git commit 部署到某个正在运行的容器中,并让 Jenkins 将可以访问它的链接发回 PR。在任何 PR 更新时,它都会自动重新部署,而在 PR 关闭/解决时,它会被拆除。

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

4

3 回答 3

3

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

先决条件:

  1. 如果您想通过 webhook 触发构建,您可以通过 Internet 访问 jenkins 服务器。
  2. 您有一个 github API 令牌来访问/管理您的 git 存储库,它可以在settings中由您自己生成。

请按照指南配置设置您的 jenkins 与 github 的集成。

配置后:

  • 您可以通过 PR 事件触发您的构建:打开/提交更改/关闭,或使用特定模式进行评论
  • 您可以通过环境变量${GITHUB_PR_STATE}获得 PR 状态,因此您可以根据特定值启动或停止容器。
  • 您可以在启动 docker 容器后向 PR 发布评论以告知您的 Web 服务的地址。

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

  • container1地址<host>:32667PR1
  • container2地址<host>:35989PR2
于 2017-03-20T16:55:39.883 回答
1

我认为最简单的解决方案是创建两个不同的 Jenkins Jobs,一个负责部署,另一个负责核对它。可以在 GitHub 中设置 2 个 webhook,一个用于 PR 创建,一个用于 PR 解析。

于 2017-03-16T18:44:15.730 回答
1

正如 Sylvain GIROD 指出的那样:

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

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

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

我还建议给服务一段时间,并定期清理陈旧的容器/服务。

于 2017-03-20T16:04:30.237 回答