首页 > 解决方案 > 是否可以在代理/工作节点上创建 Jenkins 工件?

问题描述

在管道样式脚本中,如果我想将文件存储为 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。这是预期的行为吗?如果不是,人们处理不在masterJenkins 节点上的工件文件的最常见方式是什么?

标签: jenkinsjenkins-pipeline

解决方案


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

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

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

或者,ArtifactDeployer还可以让您以受控的方式在工作区之外编写,但我想您需要 shell cmd 来检索,因为我不知道必然的 Artifact Retriever。


推荐阅读