在Docker容器中运行Jenkins测试从codebase中的dockerfile构建

时间:2017-02-12 13:13:13

标签: testing jenkins docker automated-tests jenkins-docker

我想部署一个基于Jenkins的持续集成平台。由于我有各种各样的项目(PHP / Symfony,node,angular,...),并且我希望这些测试在本地和Jenkins上运行,我正在考虑使用Dockers容器。

我的目标是:

  • 在Github / Gitlab上打开合并请求
  • webhook通知Jenkins合并请求
  • Jenkins拉出repo,构建容器并运行shell脚本来执行测试
  • 测试完成后,Jenkins从其中一个容器中检索结果(通过共享卷)并处理结果。

我不希望Jenkins在一个容器中。

通过这种过程,我希望能够非常轻松地运行每个开发人员计算机上的测试,例如docker-composer up,然后在容器./tests all之一。

我对詹金斯不太熟悉。我已经阅读了很多文档,但是大多数文档建议事先为每种项目定义Jenkins的奴隶。我希望一切尽可能的动态,并尽可能减少Jenkins的配置。

如果你曾经实现过类似的东西,我将非常感谢你对测试过程的描述。如果你认为我的目标是不可能的,我也很感激,如果你可以向我解释原因。

1 个答案:

答案 0 :(得分:4)

我建议的设置是Docker中的Docker。

基础是派生的Docker镜像,它通过添加Docker命令行客户端扩展jenkins:2.x图像。 Jenkins作为容器启动,其主文件夹(例如从Docker主机安装的文件夹/ var / jenkins_home)和Docker套接字文件能够从Jenkins构建作业启动Docker容器。

docker run -d --name jenkins -v /var/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock ... <yourDerivedJenkinsImage>

要检查,如果此设置正常,请在启动Jenkins容器后执行以下命令:

docker exec jenkins docker version

如果“docker version”输出 NOT 显示:

  

Docker守护程序是否在此主机上运行?

Everythin很好。

在构建作业中,您可以配置上面提到的过程。让Jenkins简单地查看存储库。存储库应包含您的构建和测试脚本。

使用shell执行的自由式构建作业。 shell执行可能如下所示:

docker run --rm --volumes-from jenkins <yourImageToBuildAndTestTheProject> bash $WORKSPACE/<pathToYourProjectWithinTheGitRepository>/build.sh 

此命令只是使用jenkins中的卷启动一个新容器(用于构建和/或测​​试项目)。这意味着克隆的存储库将在$ WORKSPACE下可用。因此,如果您运行“bash $ WORKSPACE /&lt; pathToYourProjectWithinTheGitRepository&gt; /build.sh”,您的项目将在“yourImageToBuildAndTestTheProject”的容器中构建。运行此之后,您可以启动其他容器进行集成测试,或者将其与“docker-compose”结合使用,方法是将其安装在派生的Jenkins映像上。

优点是您在Jenkins中拥有的最小配置 - 只需要用于克隆GIT存储库的SCM配置。由于每个Jenkins作业直接使用Docker客户端,您可以使用每个项目一个或Docker镜像来构建和/或测​​试, WITHOUT 进一步的Jenkins配置。

如果您需要其他配置,例如SSH密钥或Maven设置,只需将它们放在Docker主机上,然后使用包含这些配置文件的其他卷启动Jenkins容器。

在构建作业的shell执行中使用此Docker选项:

--volumes-from jenkins

自动将工作区和配置文件添加到每个构建作业中。