Jenkins 使用 Docker : How to run tests?

标签 jenkins docker

我正在使用 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/

相关文章:

Jenkins 共享库: Permission denied (publickey)

java - JENKINS REST API 抛出 403 禁止

Jenkinsfile 步骤检查目录中的文件是否已更改?

linux - 在 RAM 量较低 (256 MB) 的 Ubuntu VPS 上运行 Jenkins?

linux - 为什么在 docker 中拉取图像时会出现此错误

docker - nslookup无法在最新的busybox上获取服务ip

docker - 通过外壳功能复制具有位置的 Assets

jenkins - 无法让 Jenkins Docker slave 构建 docker 镜像

docker - 将docker-compose链接到本​​地​​docker守护程序

bash - 2013: “Lost connection to MySQL server at '握手:读取初始通信数据包',尝试连接时系统错误:115”