0

我有一个 CD 管道,在某些阶段需要用户确认,所以我想在管道等待用户输入时释放服务器资源。

pipeline {
  agent any
  stages {
    stage ('Build Stage') {
      steps {
        ...
      }
    }
    stage ('User validation stage') {
      agent none
      steps {
         input message: 'Are you sure you want to deploy?'
      }
    }
    stage ('Deploy Stage') {
      steps {
        ...
      }
    }
  }
}

您可以在上面看到我有一个全局agent any但在我添加的用户验证阶段agent none

有人可以确认这是我想要的(没有代理/节点正在等待用户输入)吗?我看不到如何验证它,执行日志中没有什么不同...

如果没有,我该怎么做?

4

1 回答 1

1

这不会像您期望的那样工作。您不能agent any在整个管道上指定,然后期望agent none不占用执行程序。

为了证明这一点,您可以按原样运行此代码,当它在input阶段等待时,转到您的 jenkins 主页并查看Build Executor Status。你会看到有一个执行者仍在运行你的工作。

接下来,将您的管道切换到agent none并添加agent any到所有其他步骤(除了您的输入步骤)并执行相同的测试。您可以看到,在输入阶段等待时,没有一个执行器被占用。

至于您关于不同节点上不同工作区的问题......假设您使用的是来自 SCM 的代码,它将在每个新节点上检查出来,所以这不是问题。您唯一需要担心的是您在每个阶段创建的工件。

“希望”你会留在同一个节点上是不安全的,尽管 Jenkins 会“尝试”让你留在同一个节点上。但即便如此,也不能保证您将获得相同的工作区目录。

处理此问题的正确方法是处理stash您可能已创建或修改的所有文件,这些文件将在以后的阶段中使用。然后在接下来的阶段,unstash需要的文件。永远不要假设文件会在具有自己的节点声明的阶段之间生成。

于 2017-10-12T04:38:42.560 回答