小编典典

Jenkis下游作业无法找到上游工件

jenkins

该设置用于构建和部署到Adobe AEM。

主构建作业从git存储库中提取,构建和打包,运行测试,然后触发应使用上游作业中已构建软件包的下游作业。

问题是下游作业失败并显示以下消息:

Unable to access upstream artifacts area /var/lib/jenkins/jobs/PROJECTNAME-Master-Branch/builds/2014-10-22_11-33-46/archive. Does source project archive artifacts?

在我看来,由下游作业触发的某种方式的CopyArtifacts插件正在寻找错误位置的工件。正确的位置是

/var/lib/jenkins/jobs/PROJECTNAME-Master-Branch/workspace/PROJECTNAME-*/**/*.jar,/var/lib/jenkins/jobs/PROJECTNAME-Master-Branch/workspace/PROJECTNAME-*/**/*.zip

但是然后,它抱怨

java.io.IOException: Expecting Ant GLOB pattern, but saw '/var/lib/jenkins/jobs/PROJECTNAME-Master-Branch/workspace/PROJECTNAME-*/**/*.jar,/var/lib/jenkins/jobs/PROJECTNAME-Master-Branch/workspace/PROJECTNAME-*/**/*.zip'. See http://ant.apache.org/manual/Types/fileset.html for syntax

下游作业从另一个项目复制工件,然后该生成是“触发此作业的上游生成”或“从最新完成的生成的工作区复制”。而且都行不通。

有任何想法吗?


阅读 291

收藏
2020-07-25

共1个答案

小编典典

TL; DR

您正在尝试使用工件而不先对其进行归档。
您正在尝试使用绝对路径,但它们应相对于$WORKSPACE和/或“存档位置”。

完整答案

您误解了与詹金斯有关的“工件”的概念。

什么是詹金斯文物

工件是 在“ 归档工件 后生成”操作的帮助下专门 在构建后 保留的文件。

构建运行时,它在以下位置运行:
$WORKSPACE,该文件通常位于文件系统中的
$JENKINS_HOME/jobs/$JOB_NAME/workspace
Inside内部,您可以拥有SCM检出文件夹,临时构建文件,最终构建文件,二进制文件等。

的内容$WORKSPACE挥发性的 ,你不应该依赖它,编译时间范围之外(和下游的工作
构建时间范围之外)。$WORKSPACE不同主/从节点之间的内容可能有所不同,可以随时通过admin或SCM更新/清除/签出将其删除。

同样重要的是要了解整个 工作* 只有 一个$WORKSPACE *

但是现在请注意您的 Build History ,该列表中有几个条目,这些条目由内部版本号(#)和日期时间戳记引用。这些都存储在:
$JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_ID
$BUILD_ID正在构建,日期时间戳样2014-10-22_11-33-46

$WORKSPACE包含有关信息 当前或最近的 (和问题是:你永远无法知道这是否是“当前”或“最后”)建设;
builds文件夹包含所有过去的(保留)建立执行的记录(这是什么使的 建置沿革 名单在你的左边), 每构建

默认情况下,它仅包含Jenkins本身需要的内容:build.xml复制,更改日志信息,控制台日志。当您转到URL时http://$JENKINS_URL/job/$JOB_NAME/[nn]/,其中[nn]是一个数字作业生成/运行编号(#),它将从builds文件系统上的文件夹中读取此信息。

为了保留构建的工件(避免它们被下一个构建覆盖,消除烦恼或只是访问较早的构建),您需要 存档工件
(具有相同标题的相同构建后操作)。归档工件时,您指示$WORKSPACE要保留的文件。当詹金斯(Jenkins)进行存档时,会将这些文件(保留[相对于$WORKSPACE]保留的路径)放入:中
$JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_ID/archive/
这样,您可以为先前的构建保留多组工件,而不仅仅是的“最新/最后” $WORKSPACE

为了完整起见,我将提到Jenkins的“永久链接”,例如http://$JENKINS_URL/job/$JOB_NAME/lastSuccessfulBuild/lastFailedBuild,实际上是文件系统上到其中一个保留builds/$BUILD_ID文件夹的符号链接。

最后,您可以通过作业配置上的 “舍弃旧版本”复选
标记来控制运行多少版本以及保留多少工件(可以单独配置)。默认情况下,所有内容都会保留,但是如果您开始保留工件,则需要考虑硬盘空间容量。

解决问题的方法

因此,使用上述信息,并查看您的错误消息,您现在应该看到 Copy Artifacts 插件正在/archive/构建部分下正确地寻找工件。

你也应该看到, 复制文物 插件并 没有
让你选择“当前版本”时,选择其构建从复制。它具有永久链接(例如“上次成功”或“上次构建”)和特定的内部版本号,所有这些都转换为以下位置的保留内部版本$JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_ID/archive/

甚至“触发了这项工作的上游构建”也将链接到特定的$BUILD_ID

在以下任一选项中

归档工件的* 配置相对于$WORKSPACE复制工件的
配置相对于“存档位置”,即。
由于“复制工件”是相对于“存档位置”的,而“存档位置”是相对于的,因此对于所有密集目的,两种配置的相对路径可以相同,也可以相对于
*$JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_ID/archive/
$WORKSPACE``$WORKSPACE

选项1

  • 首先使用构建后操作 对工件 进行 存档 ,否则,您将无法复制任何内容。

    1. 如果您的文件位于的根目录中$WORKSPACE,则应为:(
      PROJECTNAME-*/**/*.jar,PROJECTNAME-*/**/*.zip
      请注意,此处不是完整路径)
  • 然后Upstream Build that triggered this job用于“ 复制工件” 选择。

    1. 对于 要复制的工件,请 使用以下任一方法:

    2. ** 或空白以复制所有已归档的工件,或者

    3. PROJECTNAME-*/**/*.jar,PROJECTNAME-*/**/*.zip (与归档部分相同)

选项2

如果您不想存档,则可以$WORKSPACE直接使用with和Copy from workspace of latest completed build
但是必须确保在下游构建执行过程中没有第二个上游构建可以运行,否则您将冒着从部分构建中获取部分文件的风险,因为如前所述,$WORKSPACE易挥发。

  • 再次,对于“ 复制工件” 步骤,在“ 要复制的工件” 字段下,使用相对于的路径$WORKSPACE,即:
    PROJECTNAME-*/**/*.jar,PROJECTNAME-*/**/*.zip

选项3

如果您确实要在不同作业之间复制整个WORKSPACE,请使用其中一个

2020-07-25