声明性Jenkins管道中的检查点
我看到上面说: 正确的方法是始终将检查点步骤保持在任何节点块之外,而不是与代理或工作区关联 给出的示例适用于脚本化管道。我试图在声明性管道中实现这一点,但不断出现错误。我能让它工作的唯一方法是:声明性Jenkins管道中的检查点,jenkins,jenkins-pipeline,cloudbees,checkpointing,Jenkins,Jenkins Pipeline,Cloudbees,Checkpointing,我看到上面说: 正确的方法是始终将检查点步骤保持在任何节点块之外,而不是与代理或工作区关联 给出的示例适用于脚本化管道。我试图在声明性管道中实现这一点,但不断出现错误。我能让它工作的唯一方法是: stage ('Promotion Checkpoint') { steps { checkpoint 'Ready for Manual intervention' timeout(time: 60, unit: 'SECONDS') {
stage ('Promotion Checkpoint') {
steps {
checkpoint 'Ready for Manual intervention'
timeout(time: 60, unit: 'SECONDS') {
input message: 'Do you want to proceed?'
}
}
}
我的理解是,声明性管道中的一个阶段类似于脚本化管道中的节点。我不能让检查点在阶段或步骤之外工作,这似乎是我对Cloudbees建议的解释。有人能在检查点之外帮助您正确使用吗?您正面临声明性管道的问题,这使得应该在代理和工作区之外运行的内容有点混乱 “普通”声明性管道在顶部定义了一个代理
pipeline {
agent any
stages {
stage("Build") {
echo 'Build'
}
}
}
但是现在所有阶段标记都将使用相同的代理和工作区。这使得编写“标准”管道变得更容易,但不可能有不使用任何代理的命令。因此,使用检查点
或在使用输入
时编写不阻塞执行器的管道变得不可能
因此,建议使用声明性管道的正确方法是在顶级管道中使用agent none
,并在每个阶段中指定agent any
或agent none
报告中有两个例子。您还可以在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'
}
}
}
}
还有一个在声明性管道中使用节点
块
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'
}
}
}
}
谢谢,解释和链接真的很有帮助。我认为无法全局设置代理并在阶段中将其覆盖为“无”是一个错误,但这是另一天的主题上述结果是:在节点{}内使用检查点是不受支持和不可靠的