将文物存档在詹金斯


132

有人可以向我解释构建过程中工件的想法吗?

我有工作区目录,在其中可以检出代码来编译和运行我的ant脚本等。最后,以我为例,我得到了一个准备安装的jar文件。那被认为是人工产物吗?

我应该在哪里告诉我的构建脚本放入jar文件?在工作区目录中?我的jar文件会根据诸如此类的变量获得唯一的文件名BUILD_ID,我如何告诉Jenkins选择哪个jar文件?

编辑:好的,所以我尝试做这样的事情:

在此处输入图片说明

该路径在我的工作空间中尚不存在,因为应该由构建脚本来创建该路径,当然,.jarand .properties文件不存在,因为尚未生成它们。那为什么给我一个错误?好像我缺少什么。

另外,Jenkins是否在每次构建后删除工件(不是归档的工件,我知道我可以告诉它删除那些工件)?否则,它将很快阻塞硬盘驱动器。


12
您遇到的错误很可能不是问题-如果构建过程成功,则应将其创建。保存并尝试一下,在建立管道时有一些破碎的构建是完全正常的。:)
Anders Lindahl

3
不要被警告吓到,如果构建后生成了工件,它将由您的配置存档(尽管配置页面中有警告)。
Huang F. Lei

Answers:


68

您的理解是正确的,詹金斯意义上的工件是构建的结果-构建过程的预期输出。

常见的做法是把构建的结果为buildtargetbin目录。

Jenkins存档器可以使用globs(target/*.jar)轻松提取正确的文件,即使每个构建都有唯一的名称。


@Andres还要感谢Jenkins是否在每次构建后删除工件(不是存档的工件,我知道我可以告诉它删除那些工件)?还是我有责任自己做?
迈克尔

6
@michael:您必须自己清理工作区,这是一个好习惯,在每次构建之前,至少要清除目标目录,以确保不会以较早版本的结果为最终结果。
Anders Lindahl,

@Michael您可以添加一个“干净”的构建步骤。例如,与sh 'mvn clean package'
Maven-– Snowcrash

@AndersLindahl-“通常的约定是将构建结果放入构建,目标或bin目录中。” 您是指所有项目共享的bin目录吗?我怎么做?这是构建后的动作吗?
user3240688

@ user3240688不,我指的是每个项目的目标文件夹。如果要将来自多个作业的工件放入单个共享文件夹中,则必须使用例如“通过$ PROTOCOL发布”插件之一发布工件。
安德斯·林达尔

11

工件可以是构建过程的任何结果。重要的是,构建在哪个客户端上都没有关系,它将从工作空间传输回主服务器(服务器),并通过链接链接存储到主服务器。好处是,通过这种方式对它进行了版本化,您只需要在主数据库上设置备份,并且即使所有构建客户端都处于脱机状态,也可以通过Web界面访问所有工件。

可以将正则表达式定义为工件名称。就我而言,在构建过程中,我想将要存储的所有文件压缩到一个具有恒定名称的文件中。


3
“可以将正则表达式定义为工件名称。就我而言,我压缩了所有文件”您能解释一下吗?听起来正是我想要的?
克里斯·米尔本

7

此外,Jenkins是否在每次构建后删除工件?(不是归档的工件,我知道我可以告诉它删除那些工件)

不,Hudson / Jenkins本身不会在构建后清除工作区。您可能会在构建过程中执行一些操作,这些操作会擦除,覆盖或从您离开它们的位置移动构建工件。作业配置中有一个选项,在“高级项目选项”(必须扩展)中,称为“构建前清理工作区”,该选项将在新构建开始时擦除工作区。


1

在Jenkins 2.60.3中,有一种方法可以删除构建构件(而不是归档的构件),以节省构建机器上的硬盘空间。在“常规”部分中,使用策略“日志轮换”选中“丢弃旧版本”,然后进入其“高级”选项。将出现另外两个选项,这些选项与根据工作天数或构建次数来保留工作的构建工件有关。

对我有用的设置是为“与工件保持一致的最大构建数量”输入1,然后进行构建后操作以归档工件。这样,所有构建中的所有工件都将被存档,构建中的所有信息都将被保存,但是只有最后一个构建会保留其自己的工件。

舍弃旧版本选项

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.