Sas*_*ota 8 jenkins docker jenkins-pipeline jenkins-declarative-pipeline
我正在重新设计管道以使用声明式管道方法,以便我能够在每个阶段使用 Docker 映像。
目前我有以下工作代码,它执行连接到在 Docker 容器中运行的数据库的集成测试。
node {
// checkout, build, test stages...
stage('Integration Tests') {
docker.image('mongo:3.4').withRun(' -p 27017:27017') { c ->
sh "./gradlew integrationTest"
}
}
Run Code Online (Sandbox Code Playgroud)
现在使用声明式管道,相同的代码看起来像这样:
pipeline {
agent none
stages {
// checkout, build, test stages...
stage('Integration Test') {
agent { docker { image 'openjdk:11.0.4-jdk-stretch' } }
steps {
script {
docker.image('mongo:3.4').withRun(' -p 27017:27017') { c ->
sh "./gradlew integrationTest"
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题:该阶段现在在 Docker 容器中运行docker.image()
,并且运行会导致docker: not found
该阶段出错(它正在openjdk
现在使用的图像中寻找 docker )。
问题:如何启动一个数据库容器并从声明性管道的一个阶段连接到它?
因此,如果我正确理解,您的测试需要两件事:
在这种情况下,您是否尝试过不同的方法,例如Docker In Docker (DIND)?
如果您可以拥有用作docker:dind
基础映像并包含您的 java 环境的自定义映像,并在本agent
节中使用它,那么管道的其余步骤将能够按照您的预期使用 docker 命令。
归档时间: |
|
查看次数: |
5049 次 |
最近记录: |