Jenkins使用docker:如何运行测试?

时间:2014-08-04 07:56:09

标签: jenkins docker

我正在使用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单元容器的链接。这可能吗?

由于

2 个答案:

答案 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节点,它会更容易。