如何在没有 stash/unstash 的情况下保持 jenkins 构建的工作空间

问题描述 投票:0回答:0

我已经将一个构建分成多个阶段,这些阶段都包含在它们自己的节点块中。 如果 jenkins 实例上有大量活动,构建可以在这些阶段暂停,但是当执行者可用时它们应该继续。

stage('one'){
   node { ... }
}
// free up the executor if many other builds are running
stage('two'){
   node { ... }
}

此方法与 milestones 和 locks 一起使用可以取消等待时间过长的构建。

现在我们的问题是,对于多个节点块,文档说您必须 stash/unstash 文件以保留在最后一个工作区中生成的结果。现在我们的工作区包含许多文件,需要 5 到 10 分钟来存储/取消存储,这会扼杀所有其他性能提升。

有没有办法有效地保留最后一个工作区,直到构建完成。仅仅停留在同一个节点上并没有帮助,因为如果旧构建只是暂停,则同时启动的构建可以分配给同一个工作空间

def nodeName
stage('one'){
   node {
       nodeName = "${NODE_NAME}"
   }
}
stage('two'){
   node(nodeName) { 
       // this is the same node but another workspace
   }
}

我见过的唯一可能强制工作区的方法是外部工作区管理器插件或ws步骤。 但随后我将失去并发构建的默认自动重定位功能,我需要自己进行清理,因为删除构建时不会删除这些工作区。

有什么想法即使在离开节点后也能保持工作空间吗?

jenkins jenkins-pipeline workspace
© www.soinside.com 2019 - 2024. All rights reserved.