我想部署一个基于Jenkins的持续集成平台。由于我有各种各样的项目(PHP / Symfony,node,angular,...),并且我希望这些测试在本地和Jenkins上运行,我正在考虑使用Dockers容器。
我的目标是:
我不希望Jenkins在一个容器中。
通过这种过程,我希望能够非常轻松地运行每个开发人员计算机上的测试,例如docker-composer up
,然后在容器./tests all
之一。
我对詹金斯不太熟悉。我已经阅读了很多文档,但是大多数文档建议事先为每种项目定义Jenkins的奴隶。我希望一切尽可能的动态,并尽可能减少Jenkins的配置。
如果你曾经实现过类似的东西,我将非常感谢你对测试过程的描述。如果你认为我的目标是不可能的,我也很感激,如果你可以向我解释原因。
答案 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
自动将工作区和配置文件添加到每个构建作业中。