是否可以在 agent/worker 节点上创建 Jenkins 工件?

Is it possible to create a Jenkins artifact on a agent/worker node?

在管道式脚本中,如果我想将文件存储为 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 节点上的伪造文件的最常见方式是什么?

按照设计,archiveArtifats 将工件连同主服务器上的日志一起存档。期望工作空间是短暂的,作业可以 运行 针对任何可用节点和其他可扩展的东西。节点上的作业不应访问工作区外的项目。本地存储无法确保可用性。

您想要的是将存档的工件检索到您的活动节点。您可以使用 Copy Artifact 来做到这一点。对于大型对象,这可能需要网络时间。

当然,shell 可供您使用,您也可以自由地做 shell 允许您做的任何事情。

或者,ArtifactDeployer 也可以让您以受控方式在工作区外书写,但我想您需要 shell cmd 来检索,因为我不知道推论神器猎犬。