2011-04-28 35 views
109

有人请向我解释文物在构建过程中的想法吗?在Jenkins存档文物

我有工作空间目录,我检查了编译和运行我的ant脚本等的代码。最后,在我的情况下,我得到一个准备好安装的jar文件。这被认为是神器吗?

我应该在哪里告诉我的构建脚本放置jar文件?在工作区目录中?我的jar文件得到一个唯一的文件名取决于像BUILD_ID等变量,我怎么能告诉詹金斯选择哪个jar文件?

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

enter image description here

的路径并不在我的工作空间存在,因为构建脚本应该来创建它,当然, .jar.properties文件不存在,因为它们尚未生成。为什么它会给我一个错误呢?似乎我错过了一些东西。

此外,詹金斯是否删除每个构建后的工件(不归档的文物,我知道我可以告诉它删除这些)?否则它会很快堵塞硬盘。

+11

你得到的错误是最有可能不是一个问题 - 如果构建过程是成功的,它应该被创建。保存并尝试一下,在设置管道时有一些破损的构建是完全正常的。 :) – 2011-04-28 16:28:39

+3

不要被这个警告吓倒,如果一个构件在构建之后生成,它将被你的配置归档(虽然在配置页面有一个警告)。 – 2012-02-04 08:11:20

回答

56

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

一个常见的约定是将构建结果放入build,targetbin目录中。

Jenkins存档器可以使用球体(target/*.jar)轻松拾取正确的文件,即使每个版本都有唯一的名称。

+0

@安德雷谢谢,还有,詹金斯是否删除每个构建后的工件(不是存档的工件,我知道我可以告诉它删除那些)?还是我有责任做到这一点myslef? – Michael 2011-04-28 16:33:42

+6

@michael:您必须自己清理工作区,在每次构建之前清除至少目标目录是确保最终不会产生早期构建结果的良好实践。 – 2011-04-28 16:44:02

+0

@Michael你可以添加一个'clean'构建步骤。例如。使用Maven - 'sh'mvn clean package'' – Snowcrash 2017-02-27 11:43:07

9

工件可以是您的构建过程的任何结果。重要的是,它建立在哪个客户端上并不重要,它将从工作区转移回主(服务器),并通过指向构建的链接存储在那里。优点是它通过这种方式进行版本化,即使所有构建客户端都处于脱机状态,您也只需在主服务器上设置备份,并且所有工件均可通过Web界面访问。

可以将正则表达式定义为工件名称。在我的情况下,我在构建过程中将所有想存储的文件压缩到一个具有常量名称的文件中。

+1

“可以将正则表达式定义为工件名称,在我的情况下,我压缩了所有文件”您能解释一下吗?这听起来正是我想要的? – 2014-06-18 10:59:37

7

另外,詹金斯每次构建后删除工件? (未归档的文物,我知道我可以告诉它删除那些)

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

0

在Jenkins 2.60.3中,有一种方法可以删除构建工件(而不是存档工件),以节省构建机器上的硬盘驱动器空间。在常规部分中,选择“放弃旧版本”,并选择策略“日志旋转”,然后进入其高级选项。根据天数或构建数量,将出现另外两个与保留作业构建工件相关的选项。

对我而言,这些设置对于“最大编号与工件保持一致”输入1,然后使用生成后操作对工件进行归档。这样,所有构建中的所有构件都将被存档,构建的所有信息都将被保存,但只有最后一个构建才会保留其自己的构件。

Discard old builds options