该设置用于构建和部署到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
下游作业从另一个项目复制工件,然后该生成是“触发此作业的上游生成”或“从最新完成的生成的工作区复制”。而且都行不通。
有任何想法吗?
您正在尝试使用工件而不先对其进行归档。 您正在尝试使用绝对路径,但它们应相对于$WORKSPACE和/或“存档位置”。
$WORKSPACE
您误解了与詹金斯有关的“工件”的概念。
工件是 在“ 归档工件 后生成”操作的帮助下专门 在构建后 保留的文件。
构建运行时,它在以下位置运行: $WORKSPACE,该文件通常位于文件系统中的 $JENKINS_HOME/jobs/$JOB_NAME/workspace Inside内部,您可以拥有SCM检出文件夹,临时构建文件,最终构建文件,二进制文件等。
$JENKINS_HOME/jobs/$JOB_NAME/workspace
的内容$WORKSPACE是 挥发性的 ,你不应该依赖它,编译时间范围之外(和下游的工作 是 构建时间范围之外)。$WORKSPACE不同主/从节点之间的内容可能有所不同,可以随时通过admin或SCM更新/清除/签出将其删除。
同样重要的是要了解整个 工作* 只有 一个 。$WORKSPACE *
但是现在请注意您的 Build History ,该列表中有几个条目,这些条目由内部版本号(#)和日期时间戳记引用。这些都存储在: $JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_ID 与$BUILD_ID正在构建,日期时间戳样2014-10-22_11-33-46
$JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_ID
$BUILD_ID
2014-10-22_11-33-46
将$WORKSPACE包含有关信息 当前或最近的 (和问题是:你永远无法知道这是否是“当前”或“最后”)建设; 该builds文件夹包含所有过去的(保留)建立执行的记录(这是什么使的 建置沿革 名单在你的左边), 每构建 。
builds
默认情况下,它仅包含Jenkins本身需要的内容:build.xml复制,更改日志信息,控制台日志。当您转到URL时http://$JENKINS_URL/job/$JOB_NAME/[nn]/,其中[nn]是一个数字作业生成/运行编号(#),它将从builds文件系统上的文件夹中读取此信息。
http://$JENKINS_URL/job/$JOB_NAME/[nn]/
[nn]
为了保留构建的工件(避免它们被下一个构建覆盖,消除烦恼或只是访问较早的构建),您需要 存档工件 (具有相同标题的相同构建后操作)。归档工件时,您指示$WORKSPACE要保留的文件。当詹金斯(Jenkins)进行存档时,会将这些文件(保留[相对于$WORKSPACE]保留的路径)放入:中 $JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_ID/archive/。 这样,您可以为先前的构建保留多组工件,而不仅仅是的“最新/最后” $WORKSPACE。
$JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_ID/archive/
为了完整起见,我将提到Jenkins的“永久链接”,例如http://$JENKINS_URL/job/$JOB_NAME/lastSuccessfulBuild和/lastFailedBuild,实际上是文件系统上到其中一个保留builds/$BUILD_ID文件夹的符号链接。
http://$JENKINS_URL/job/$JOB_NAME/lastSuccessfulBuild
/lastFailedBuild
builds/$BUILD_ID
最后,您可以通过作业配置上的 “舍弃旧版本”复选 标记来控制运行多少版本以及保留多少工件(可以单独配置)。默认情况下,所有内容都会保留,但是如果您开始保留工件,则需要考虑硬盘空间容量。
因此,使用上述信息,并查看您的错误消息,您现在应该看到 Copy Artifacts 插件正在/archive/构建部分下正确地寻找工件。
/archive/
你也应该看到, 复制文物 插件并 没有 让你选择“当前版本”时,选择其构建从复制。它具有永久链接(例如“上次成功”或“上次构建”)和特定的内部版本号,所有这些都转换为以下位置的保留内部版本$JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_ID/archive/
甚至“触发了这项工作的上游构建”也将链接到特定的$BUILD_ID。
归档工件的* 配置相对于$WORKSPACE。 复制工件的 配置相对于“存档位置”,即。 由于“复制工件”是相对于“存档位置”的,而“存档位置”是相对于的,因此对于所有密集目的,两种配置的相对路径可以相同,也可以相对于 *$JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_ID/archive/ $WORKSPACE``$WORKSPACE
$WORKSPACE``$WORKSPACE
首先使用构建后操作 对工件 进行 存档 ,否则,您将无法复制任何内容。
PROJECTNAME-*/**/*.jar,PROJECTNAME-*/**/*.zip
然后Upstream Build that triggered this job用于“ 复制工件” 选择。
Upstream Build that triggered this job
对于 要复制的工件,请 使用以下任一方法:
** 或空白以复制所有已归档的工件,或者
**
如果您不想存档,则可以$WORKSPACE直接使用with和Copy from workspace of latest completed build, 但是必须确保在下游构建执行过程中没有第二个上游构建可以运行,否则您将冒着从部分构建中获取部分文件的风险,因为如前所述,$WORKSPACE易挥发。
Copy from workspace of latest completed build
如果您确实要在不同作业之间复制整个WORKSPACE,请使用其中一个