繁体   English   中英

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

[英]Jenkis downstream job fails to find upstream artifacts

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

Master Build作业来自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

下游作业从另一个项目复制工件,然后构建是“触发此作业的上游构建”或“从最近完成的构建的工作区复制”。 没有人工作。

有任何想法吗?

TL; DR

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

完整答案

你误解了“神器”的概念,因为它与詹金斯有关。

什么是詹金斯文物

工件是在构建之后借助Archive the Artifacts构建后操作专门保留的文件。

构建运行时,它在以下内容中运行:
$WORKSPACE ,在文件系统中通常驻留在其中
$JENKINS_HOME/jobs/$JOB_NAME/workspace
在那里,您可以拥有SCM结账文件夹,临时构建文件,最终构建文件,二进制文件等。

内容$WORKSPACE挥发性的 ,你不应该依赖它,编译时间范围之外(和下游的工作构建时间范围之外)。 $WORKSPACE的内容可能在不同的主/从节点之间有所不同,可以由管理员随时删除,也可以通过SCM更新/清理/结账删除。

了解整个Job只有一个 $WORKSPACE也很重要。

但现在请注意您的构建历史记录 ,该列表中有几个条目,由构建号(#)和日期时间戳引用。 这些存储在:
$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/部分下的工件。

您还应该注意到Copy Artifacts插件在选择要复制的构建时不允许您选择“当前构建”。 它有永久链接(如“最后成功”或“最后构建”)和特定的构建号,所有这些都转换为$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. 对于Artifacts复制字段使用:
      • **或空白以复制所有存档的工件,或
      • PROJECTNAME-*/**/*.jar,PROJECTNAME-*/**/*.zip (与归档部分相同)

选项2

如果您不想存档,可以直接使用$WORKSPACE ,使用Copy from workspace of latest completed build但是您必须确保在执行下游构建时不能运行第二个上游构建,否则您可能会冒险获取部分文件部分构建,因为如前所述, $WORKSPACE是易变的。

  • 同样,对于Copy Artifacts步骤,在Artifacts to copy字段下,使用相对于$WORKSPACE路径,即:
    PROJECTNAME-*/**/*.jar,PROJECTNAME-*/**/*.zip

选项3

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

修复可能很简单: 禁用或删除 Compress Artifacts插件重新启动 Jenkins。

这个解决方法是从一个长期存在的错误报告中推断出来的: “复制工件插件”应该支持ArtifactManager

解决方案是关于构建器的配置。

根本原因在于下游作业的配置。 一旦被选择用于构建“从最新完成的构建工作空间复制”被复制,和工件要复制的路径设置为相对路径,如projectname- / / 的.jar,projectname- / /的.zip然后构建成功。

此外,在父作业配置中,需要允许下游作业到CopyArtifact和Projects以允许复制工件字段应指定下游作业。

编辑:现在我看到你在此期间做出了回应。 很好的答案,基本上清除了我的一些问题。

关于选项1的一个不明确的事情是文件的归档发生父作业完成之后。

Waiting for the completion of projectname-Deploy
projectname-Deploy #19 completed. Result was SUCCESS
Waiting for the completion of projectname-Deploy
projectname-Deploy #20 completed. Result was SUCCESS
Build step 'Trigger/call builds on other projects' changed build result to SUCCESS
Strings match run condition: string 1=[lab2b], string 2=[both]
Run condition [Strings match] preventing perform for step [BuilderChain]
Archiving artifacts 

一旦我将方法改为选项二,它对我有用,但我也想了解第一个选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM