在我的项目中,我有一个Jenkins管道,该管道应在提供的Docker映像上执行两个阶段,并在同一台机器上但在容器外部执行第三阶段。在同一台机器上运行此第三阶段至关重要,因为前一阶段会产生一些稍后需要的输出。这些文件存储在通过槽装入的计算机中。
为了确保可以在第三阶段访问这些文件,我手动选择一个特定的节点。这是我的管道(做了一些修改,因为它是从工作中来的):
pipeline {
agent {
docker {
label 'jenkins-worker-1'
image 'custom-image:1.0'
registryUrl 'https://example.com/registry'
args '-v $HOME/.m2:/root/.m2'
}
}
stages {
stage('Test') {
steps {
sh 'mvn test'
}
}
stage('Package') {
steps {
sh 'mvn package'
sh 'mv target workdir/'
}
}
stage('Upload') {
agent {
node {
label 'jenkins-worker-1'
}
}
steps {
sh 'uploader.sh workdir'
}
}
}
}
该节点已预先配置为可以上传,因此我不能简单地从Docker容器上传已构建的目标,而必须从物理计算机上完成。
这是我的问题:尽管前两个阶段运行良好,但第三个阶段无法启动,因为:“等待下一个可用的执行程序”突然出现在日志中。很明显,节点正在等待自身,我无法使用其他计算机。看起来Docker正在阻止某些东西,詹金斯(Jenkins)认为该节点很忙,因此它永远等待着。
我正在寻找一种解决方案,该解决方案使我可以在同一台机器上在容器内外运行阶段。
显然,嵌套的阶段功能可以解决此问题,但不幸的是,自管道插件1.3版开始,该功能就可用,但是我的节点具有1.2.9。