基于搜索的推广-分期和推广最终变得简单!
Overiew
Artifactory 2.1最大的特性之一是对工件分段和升级的支持。
这一特性背后的想法是,在许多环境中,在将一个新版本公开给公众消费之前,该版本需要经历一个众所周知的生命周期——该版本首先在一个登台环境中可用,在那里它被验证并经历最终的QA,然后它才被移动或“提升”到一个可以被客户发现和使用的地方。
在发布工件的世界中,这意味着当要发布的工件被构建并部署到Artifactory中时,您希望它们首先只能被选定的组(staging)访问。只有当文物被“祝福”并被发现的时候释放-ready,你可以改变他们的访问级别,使他们可供更广泛的受众下载(推广)。
管理分期和推广存在两个问题。第一个问题是关于识别的——我们如何管理和识别由同一个构建部署到Artifactory的一组工件,以便以后将它们作为单个单元进行推广。
第二个问题是关于推广组合——一旦可以确定要推广的工件,收集它们并更改其可见性的最佳方法是什么。另外,如果你想对晋升挑三拣四呢?例如,如果您想从发布中筛选测试工件,或者手动删除最初是部署的一部分的内部工件,该怎么办文件?
这里描述的解决方案利用了Artifactory最酷的特性之一——在工件上附加属性的能力,以及组合和操作搜索结果的能力。中找到的一些特性Artifactory插件电源包,但有一些额外的设置它也可以适应Artifactory的开源版本。
标识作为一个组部署的工件
隔离方式
识别相同构建构件的一种方法是创建隔离:创建“隔离存储库”每-构建并部署你的工件到它。这保证了工件被隔离在一个可以识别它们的密闭的地方。下一步是使隔离存储库对登台客户机可见。
这种方法的主要问题是它有点像一个重量级的解决方案:
- 您需要动态地创建一个伪存储库,通常使用cryptic处理(例如时间戳和原始IP地址),这使得之后的记忆和识别变得复杂。
- 对于每一个这样的临时库你需要配置如何在更友好的存储库下公开它,以及谁将有权限查看它。
- 您需要管理存储库,并决定何时关闭它以及需要保留多长时间。
所以,我们决定不去创建隔离区,引入不必要的维护工作。此外,为了支持推广而创建动态存储库的整个概念对我们来说是不自然的!相反,我们真正想做的是能够将我们的工件部署到QA用户可以访问的普通托管存储库中。然后,我们希望在这个存储库中找到由同一个构建部署的所有工件,并将它们作为一个单元提升到不同的存储库。如果我们也能有一种方法在推广前做一些人工制品过滤,这也会很好。
遇见工件标签
Artifactory支持将属性附加到工件(和文件夹)。您可以搜索属性值并检索带有属性标记的工件。因此,如果我们能够以某种方式在构建时以一种简单的方式将属性附加到我们的构建构件,那么我们就可以使用这些属性来定位和识别来自相同构建的部署构件,以便在以后推广它们。
属性可以通过多种方式附加到工件:通过UI (Artifactory Properties附加组件允许您附加自定义强-类型属性),通过REST API使用PUT请求和作为多加利用使用矩阵参数来生成PUT请求。
当构件被构建过程部署到Artifactory时,我们将使用最后一种方法透明地标记它们。要做到这一点,我们所需要做的就是将矩阵参数添加到部署URL中,作为POM的一部分。distributionManagement的部分:
<distributionManagement> <存储库> <id>质量保证发布< /id > <url> https://myserver: 8081 / artifactory / qa-releases;buildNumber = ${buildNumber};修订= ${修订}< /url> 存储库> distributionManagement>
矩阵参数是一组由分号(;)分隔的键-值对,是指定参数(除查询参数和路径参数外)的标准HTTP方式。
在我们的例子中,我们为部署URL添加了两个参数:buildNumer和修订,两者都将在部署时被Maven所取代,使用来自我们项目属性的动态值(例如。通过使用Maven build-number插件)。当构建一个多模块项目时,从父项目部署的所有工件最终将具有相同的特性buildNumber和修正值。当Artifactory将这些值视为URL的一部分时,它会自动将带有提供的键/值的新属性附加到部署的工件上。
这种机制适用于任何Artifactory 2.1+版本,无需安装任何附加组件。它还适用于任何REST客户机,这意味着您不必定制Maven或使用Maven插件——它就是开箱即用的。
此示例中的构件部署到质量保证-release的本地存储库,这是我们在QA团队进行最终测试和批准之前对工件进行分期的常用地方。
制作和推广人工制品
目标——搜索和移动
因此,我们设法用属性标记所有构建构件,并将其部署到登台区域。接下来,QA团队检查了所有已知的问题,并批准了我们的工件,以便进一步分发给客户。我们现在需要找到一种方法来复制或移动我们的工件到另一个区域,在那里这些客户端可以下载它们。事实上,我们可以将“提升”看作是将工件移动(或复制)到应用不同访问规则的不同地方的一个花哨术语。
因此,我们真正需要做的是通过构建号属性搜索最近部署的工件,然后将结果移动到另一个存储库。
一种方法是通过REST API——通过元数据(属性在内部存储为XML元数据)搜索工件,并发送DAV MOVE请求逐个移动结果。这需要编写一个小的外部脚本来发送相关的HTTP查询,并且可以使用基本的开源Artifactory版本来完成。然而,在Artifactory内部有一种更简单、更强大的方法来做到这一点,这涉及到“智能搜索”和“属性”附加组件。
寻找要推广的工件-满足智能搜索和属性
智能搜索的理念如下:
您可以通过搜索来整理工件——首先执行搜索,然后将搜索结果保存到一个命名的“搜索结果”中。“搜索结果”仅仅是已找到项目的集合。您现在可以执行额外的搜索,并且对于每个搜索,您可以选择是否创建新的搜索结果,或者更有趣的是,添加或减去以前保存的搜索结果中找到的项目。您可以组合来自任何搜索类型(简单、GAVC、类、XML等。) -组合真是无限!
在我们的例子中,我们将简单地运行一个属性搜索,查找所有部署了特定构建号的构件(在deployment中使用buildNumber属性)。为此,我们将使用属性搜索用户界面:
然后,我们将把我们的结果保存为一个新的搜索结果,称为“to-be-promoted”。我们可以执行其他搜索,从保存的结果中添加或删除工件。
我们甚至可以通过丢弃特定的工件来手动调整保存的结果——比如构建中的一个工件需要闭源,我们可以丢弃源形式结果(如果我们想放弃所有的来源,我们可以通过减去GAVC搜索“来源”分类器的结果来轻松做到这一点-见下面的截图)。
一旦我们对保存的搜索结果感到满意,我们就可以继续推广它们!
促销——动起来!
推广是超级简单的-我们只是移动保存的搜索结果的工件到一个更开放的目标存储库,从而使它们可供公众使用。我们可以选择是移动原始工件,还是在目标存储库中创建它们的副本。
我们甚至可以执行一个“演练”,以查看一切都运行良好,并且没有错误或警告(例如,目标存储库可能由于快照/而不接受某些工件)释放策略、安全策略或包含/排除路径模式)。
最后,我们还可以导出搜索结果由于工件来如果我们希望在Artifactory之外的其他地方使用它们,可以在文件系统中使用它们。
当复制搜索结果时罗依移动后,它们会维护原始的元数据和属性,因此您可能拥有的关于工件的任何有价值的信息都会被保留。
结束
Artifactory正在采取一种独特的方法来进行分期和推广-而不是人为地要求工件部署到一个quarrantine区域,我们只需在部署时用元数据标记工件,并将它们部署到开发人员和QA团队成员内部可以访问的中央staging存储库。这个过程很便宜,不需要复杂的设置,对开发人员和测试人员来说都很自然。如果我们希望避免双重部署到登台存储库,我们可以使用权限(使用删除特权)轻松做到这一点——不需要为此手动关闭整个存储库。
一旦我们对分段构建构件感到满意,我们就可以通过搜索来收集它们,并简单地将它们移动或复制到另一个目标存储库,在那里它们是公开可用的。在这个例子中,我们给我们的藏物贴上buildNumber属性,但我们可以将任何属性附加到我们的工件并执行许多种类的搜索来控制我们的推广来源(通过结合-有了工件的元数据,我们就不受我们的工件部署到的物理存储库的限制!
享受吧!
