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

Kar*_*hik 13 jenkins docker

我正在使用docker for CI创建一个jenkins测试环境.我有一个安装了jenkins的容器,所有的工作都从我以前的jenkins搬走了.现在我遇到了这个需要运行需要DB和PHP单元的测试的问题.

我不想在我的jenkins容器中安装这些,因为我有DB,phpunit的专用容器.所以我的问题是如何触发jenkins作业来执行包含必要先决条件的docker中的测试.

我有两个选择,但不确定它们是否可行,

选项1:

当您在jenkins中运行作业时,触发docker 运行[包含所有依赖项的容器] [运行测试的脚本] 但是我不确定是否可以从容器内部触发docker run?

选项2:

创建一个新容器并在其上安装jenkins slave.在主jenkins中添加该容器并在slave上运行测试.确保slave具有指向数据库和PHP单元容器的链接.这可能吗?

谢谢

Łuk*_*ron 7

我不确定我会回答你的问题但是在Jenkins声明管道中https://jenkins.io/doc/book/pipeline/syntax/你可以轻松运行docker容器,你可能希望在其上执行你的技术特定步骤

php --version

如果您的Jenkins作为Docker容器运行,您可能希望使用Docker客户端扩展此映像,并允许连接到主机Docker并生成新的Docker容器,因为Jenkins容器的兄弟姐妹不是孩子.为此你需要将docker.sock指向来自主机的docker.sock在docker上运行,如下所示:

docker run -v /var/run/docker.sock:/var/run/docker.sock 
Run Code Online (Sandbox Code Playgroud)

您可以在此博客文章中找到此类解决方案的完整描述: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'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在此处找到的示例https://jenkins.io/doc/pipeline/tour/hello-world/

希望有点帮助.


Lar*_*Cai 2

建议选择选项 2

使用 jenkins 作业触发器在 jenkins 从属节点而不是 jenkins 容器中运行作业。

并使用jenkins docker 插件来管理你的 docker 容器,即 DB、phpunit,将它们视为 jenkins 从节点,会容易得多。