我有一个使用声明性语法的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,所以没有办法使它们不同步
答案 0 :(得分:0)
这似乎是不可能的,至少在声明性管道的当前状态下是不可能的。我最终将作业重写为脚本化管道,以便可以在作业开始时使用docker.build()
,并使用返回的容器ID在管道中稍后引用它。