稍后可以在脚本部分中从声明性Jenkinsfile引用“代理”容器吗?

时间:2019-03-13 14:52:28

标签: jenkins jenkins-pipeline

我有一个使用声明性语法的Jenkinsfile,并使用agent { dockerfile }来构建执行环境。我也有一组需要数据库运行的测试,因此我需要使用sidecar容器,声明式语法中没有这些容器,因此我使用了script步骤来设置该部分。

我希望测试在相同的环境中运行,但是我还没有找到一种方法来引用由agent { dockerfile }构建的容器。有什么我可以用来拿到那个容器的东西吗?作为简化示例:

pipeline {
    agent
    {
        dockerfile {
            filename 'Dockerfile.ci'
        }
    }

    stages {
        stage('Test') {
            steps {
                script {
                    docker.image('postgres:10-alpine').withRun() { pg ->
                        docker.image("$reference_agent_container_here").inside("--link ${pg.id}:database") {
                            echo 'Run some tests that need a database'
                        }
                    }
                }
            }
        }
    }
}

我知道我可以将容器粘贴在注册表中并在两个地方都引用它,但是我喜欢在构建时都从源代码管理中引用Dockerfile和Jenkinsfile,所以没有办法使它们不同步

1 个答案:

答案 0 :(得分:0)

这似乎是不可能的,至少在声明性管道的当前状态下是不可能的。我最终将作业重写为脚本化管道,以便可以在作业开始时使用docker.build(),并使用返回的容器ID在管道中稍后引用它。