问问题
5885 次
1 回答
7
您正面临声明性管道的问题,这使得应该在代理和工作区之外运行的东西有点令人困惑。
“正常”声明性管道在顶部定义了一个代理
pipeline {
agent any
stages {
stage("Build") {
echo 'Build'
}
}
}
但现在所有阶段标签都将使用相同的代理和工作区。这使得编写“标准”管道变得更容易,但不可能有一个不使用任何代理的命令。因此,在使用checkpoint
时使用或编写不阻塞执行程序的管道input
变得不可能。
因此,声明性管道的建议正确方法是agent none
在顶级管道上使用agent any
并agent none
在每个stage
.
CloudBees 文档中有两个示例。您还可以input
在 Jenkins 文档中找到此类解决方法。
因此,使用代理开关的一种解决方案如下所示:
pipeline {
agent none
stages {
stage("Build") {
agent any
steps {
echo "Building"
}
}
stage("Checkpoint") {
agent none //running outside of any node or workspace
steps {
checkpoint 'Completed Build'
}
}
stage("Deploy") {
agent any
steps {
sh 'Deploying'
}
}
}
}
还有一个node
在声明性管道中使用块。
pipeline {
agent none
stages{
stage("Build"){
// no agent defined will be solved with node
steps{
node('') { // this is equivalent to 'agent any'
echo "Building"
}
checkpoint "Build Done"
}
}
stage("Deploy") {
agent any
steps {
echo 'Deploy'
}
}
}
}
于 2018-08-08T19:31:43.693 回答