在管道样式脚本中,如果我想将文件存储为Jenkins工件,则使用:
archiveArtifacts artifacts: 'path/goes/here'
当文件与Jenkins本身在同一节点上运行时,此方法工作正常(我们将其称为master
节点)。如果我有一个在工作节点上生成的文件,并且想将其存储为Jenkins工件,那么我想我可以做同样的事情。这是一个示例管道:
timeout(time: 4, unit: 'HOURS') {
node('master') {
archiveArtifacts artifacts: '1.txt'
}
node("worker") {
archiveArtifacts artifacts: '2.txt'
}
}
此脚本成功完成了人工制品1.txt
的工作,但是在我尝试人工制造物2.txt
时挂起了。这是预期的行为吗?如果不是,那么人们处理不在master
Jenkins节点上的工件文件的最常见方式是什么?
答案 0 :(得分:1)
根据设计,archiveArtifats会将工件连同主数据库上的日志一起归档。期望工作空间是短暂的,作业可以针对任何可用节点和其他可扩展事物运行。节点上的作业不应访问工作空间外部的项目。本地存储不能确保可用性。
您想要的是将归档的工件检索到活动节点。您可以使用Copy Artifact来做到这一点。大型对象可能要花费网络时间。
当然,您可以使用该Shell,并且您可以自由地做它允许做的任何事情。
或者,ArtifactDeployer也可以让您以受控方式在工作区之外进行写操作,但是我想您需要外壳cmd来进行检索,因为我不知道必然会产生人工制品。