我们有一个集装箱化的Jenkins管道,对于其中一个阶段(阶段的某个部分),我们希望在集装箱上执行,而另一些阶段则在Jenkins主机(在我们的示例中是Windows)上执行-
pipeline {
agent {
docker {
label "<node-name>"
image "<docker-image-path>"
}
}
stages {
stage('Testing') {
steps {
script {
//This below part will be executed on container
println "This below part will be executed on container"
sh '''pwd
hostname -i
'''
// Now want to execute below code on master which is Windows
println "Now want to execute below code on master which is Windows"
node('master') {
bat 'dir'
}
}
}
}
}
}
在容器上执行的部件成功执行,但在Windows Jenkins master上执行的代码失败-
Cannot run program "docker" (in directory "C:\Jenkins\workspace\TestDocker"): CreateProcess error=2, The system cannot find the file specified
- 编辑**
当我在Windows机器上安装了Docker时,上述错误不会被抛出,而是永远停留在那里。
你能告诉我如何按需在节点或容器上执行代码吗?
1条答案
按热度按时间enyaitl31#
我也有同样的问题,也是目前为止我能想出的最好的办法,可以在不同的阶段运行它。我知道这与最初的问题相悖,但可能会帮助一些人。这也使管道变得相当庞大和复杂。
reuseNode
选项很重要(jenkins doc):当reuseNode设置为true时:不创建新的工作区,当前代理的当前工作区将被挂载到container中,container将在同一节点启动,因此整个数据将同步。
ps:这个管道只有2个阶段,但当然你可以有你需要的那么多,一次又一次地跑进跑出容器。