我建议的设置是 Docker in Docker。
基础是派生的 Docker 映像,它扩展了詹金斯:2.x https://hub.docker.com/_/jenkins/通过添加 Docker 命令行客户端来生成镜像。
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版本”输出是NOT show:
docker 守护进程是否在此主机上运行?
一切安好。
在构建作业中,您可以配置上面提到的过程。让 Jenkins 简单地检查一下存储库。存储库应包含您的构建和测试脚本。
使用带有 shell 执行的自由式构建作业。 shell 执行可能如下所示:
docker run --rm --volumes-from jenkins <yourImageToBuildAndTestTheProject> bash $WORKSPACE/<pathToYourProjectWithinTheGitRepository>/build.sh
此命令只是使用 jenkins 中的卷启动一个新容器(以构建和/或测试您的项目)。这意味着克隆的存储库将在 $WORKSPACE 下可用。因此,如果您运行“bash $WORKSPACE//build.sh”,您的项目将在“yourImageToBuildAndTestTheProject”的容器中构建。运行此命令后,您可以启动其他容器进行集成测试,或者通过将其安装在派生的 Jenkins 映像上,将其与“docker-compose”结合起来。
优点是 Jenkins 中的配置工作量最少 - 只需要用于克隆 GIT 存储库的 SCM 配置。由于每个 Jenkins 作业都直接使用 Docker 客户端,因此您可以为每个项目使用一个或 Docker 映像来构建和/或测试,WITHOUT进一步的詹金斯配置。
如果您需要额外的配置,例如SSH 密钥或 Maven 设置,只需将它们放在 Docker 主机上,然后使用包含这些配置文件的附加卷启动 Jenkins 容器。
在构建作业的 shell 执行中使用此 Docker 选项:
--volumes-from jenkins
自动将工作区和配置文件添加到每个构建作业中。