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