我正在使用docker for CI创建一个jenkins测试环境。我有一个安装了jenkins的容器,所有的工作都从我以前的jenkins搬走了。现在我遇到了这个需要运行需要DB和PHP单元的测试的问题。
我不想在我的jenkins容器中安装这些,因为我有DB,phpunit的专用容器。所以我的问题是如何触发jenkins作业来执行包含必要先决条件的docker中的测试。
我有两个选择,但不确定它们是否可行,
选项1:
当您在jenkins中运行作业时,触发 docker run [包含所有依赖项的容器] [运行测试的脚本] 但我不确定我们是否可以从容器内触发docker run?
选项2:
创建一个新容器并在其上安装jenkins slave。在主jenkins中添加该容器并在slave上运行测试。确保slave具有指向数据库和PHP单元容器的链接。这可能吗?
由于
答案 0 :(得分:7)
我不确定我会回答您的问题,但在Jenkins声明管道https://jenkins.io/doc/book/pipeline/syntax/中,您可以轻松运行您可能希望执行技术特定步骤的泊坞容器,例如
php --version
如果您的Jenkins作为Docker容器运行,您可能希望使用Docker客户端扩展此映像,并允许连接到主机Docker并生成新的Docker容器,因为Jenkins容器的兄弟姐妹不是孩子。 为此,你需要将docker.sock指向来自主机的docker.sock,它在docker上运行,如下所示:
docker run -v /var/run/docker.sock:/var/run/docker.sock
您可以在此博客文章中找到此类解决方案的完整说明: https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/
使用php运行docker并运行php --version
的简单管道就像这样。
pipeline {
agent { docker 'php' }
stages {
stage('build') {
steps {
sh 'php --version'
}
}
}
}
此处的示例https://jenkins.io/doc/pipeline/tour/hello-world/
希望有所帮助。
答案 1 :(得分:1)
建议选择选项2
使用jenkins作业触发器在jenkins从属节点而不是jenkins容器中运行作业。
并使用jenkins docker plugin来管理您的Docker容器,这些容器是DB,phpunit,将它们视为jenkins slave节点,它会更容易。