Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
声明性Jenkins管道中的检查点_Jenkins_Jenkins Pipeline_Cloudbees_Checkpointing - Fatal编程技术网

声明性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'
      }
    }
  }
}

谢谢,解释和链接真的很有帮助。我认为无法全局设置代理并在阶段中将其覆盖为“无”是一个错误,但这是另一天的主题上述结果是:在节点{}内使用检查点是不受支持和不可靠的