2
4

1 回答 1

7

您正面临声明性管道的问题,这使得应该在代理和工作区之外运行的东西有点令人困惑。

“正常”声明性管道在顶部定义了一个代理

pipeline {
  agent any
  stages {
    stage("Build") {
      echo 'Build' 
    }
  }
}

但现在所有阶段标签都将使用相同的代理和工作区。这使得编写“标准”管道变得更容易,但不可能有一个不使用任何代理的命令。因此,在使用checkpoint时使用或编写不阻塞执行程序的管道input变得不可能。

因此,声明性管道的建议正确方法是agent none在顶级管道上使用agent anyagent 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 回答