我正在使用 Docker for CI 创建一个 Jenkins 测试环境。我有一个安装了 Jenkins 的容器,并且所有的工作都从我以前的 Jenkins 移走了。现在我遇到了这个问题,我需要运行需要 DB 和 PHPUnit 的测试。
我不想在我的 Jenkins 容器中安装这些,因为我有专门的 DB 和 PHPUnit 容器。所以我的问题是,如何触发 Jenkins 作业以在 Docker 中执行包含必要先决条件的测试?
我有两个选择,但不确定它们是否可行。
选项 1:
当您在 Jenkins 中运行作业时,触发 docker run [包含所有依赖项的容器][运行测试的脚本] 但我不确定我们是否可以从容器内触发 docker run。
选项 2:
创建一个新容器并在其上安装 Jenkins slave。在主 Jenkins 中添加该容器并在从属设备上运行测试。确保从站具有到数据库和 PHPUnit 容器的链接。这可能吗?
最佳答案
我不确定我会回答你的问题,但在 Jenkins 声明式管道 https://jenkins.io/doc/book/pipeline/syntax/您可以轻松运行 docker 容器,您可能希望在这些容器上执行您的技术特定步骤,例如
php --version
如果您的 Jenkins 作为 Docker 容器运行,您可能希望使用 Docker 客户端扩展此镜像,并允许连接到主机 Docker 并生成新的 Docker 容器作为 Jenkins 容器兄弟而不是子容器。 为此,您需要将 docker.sock 指向在 docker run 上分配卷的主机,如下所示:
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/
希望能有所帮助。
关于 Jenkins 使用 Docker : How to run tests?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25114021/