基于搜索的推广——分期和推广终于变得简单了!
Overiew
Artifactory 2.1最重要的特性之一是支持工件分期和提升。
这个特性背后的想法是,在许多环境中,在向公众发布新版本之前,版本需要经历一个众所周知的生命周期——版本首先在一个阶段环境中可用,在那里它被验证并经历最终的QA,然后它才被移动或“提升”到一个客户端可以找到和使用的地方。
在发布工件的世界中,这意味着当要发布的工件被构建并部署到Artifactory中时,您希望它们首先只能由选定的组(staging)访问。只有当这些文物被“祝福”并被发现是这样的时候释放-准备好了,你可以改变他们的访问级别,使他们可供更广泛的观众下载(推广)。
管理登台和推广有两个问题。第一个问题是围绕识别——我们如何管理和识别由同一构建部署到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插件——它可以开箱即用。
本例中的构件被部署到质量保证-发布版本的本地存储库,这是我们在QA团队进行最终测试和批准之前存放工件的常用位置。
组成和提升工件
目标-搜索和移动
因此,我们设法用属性标记了所有构建工件,并将其部署到暂存区域。接下来,QA团队检查了所有已知的问题,并批准了我们的工件,以便进一步分发给客户。现在我们需要找到一种方法来复制或移动我们的工件到另一个区域,以便这些客户端可以下载它们。实际上,我们可以将“提升”看作是将工件移动(或复制)到应用不同访问规则的不同位置的花哨术语。
因此,我们真正需要做的是通过构建号属性搜索最近部署的构件,然后将结果移动到另一个存储库。
实现这一点的一种方法是通过REST API——通过元数据搜索工件(属性在内部存储为XML元数据),并发送DAV MOVE请求来逐个移动结果。这将需要编写一个小的外部脚本来发送相关的HTTP查询,并且可以使用基本的开放源码Artifactory版本来完成。然而,在Artifactory内部有一种更简单、更强大的方法来做到这一点,它涉及到“智能搜索”和“属性”附加组件。
寻找要推广的工件-满足智能搜索和属性
智能搜索背后的理念如下:
您可以通过搜索来整理工件——从执行搜索开始,然后将找到的搜索结果保存到命名的“搜索结果”中。“搜索结果”仅仅是找到的项目的集合。现在您可以执行其他搜索,对于每个搜索,您可以选择是否创建新的搜索结果,或者更有趣的是,添加或减去任何先前保存的搜索结果中找到的项目。您可以组合来自任何搜索类型的工件(简单、GAVC、类、XML等。) -组合真的是无限的!
在我们的示例中,我们将简单地对所有使用特定构建号(在部署中使用buildNumber属性)。为此,我们将使用属性搜索用户界面:
然后我们会将结果保存为一个名为“待推广”的新搜索结果。我们可以执行其他搜索,从保存的结果中添加或删除工件。
我们甚至可以通过丢弃特定的工件来手动调整保存的结果——比如构建中的一个工件需要是闭源的,我们可以丢弃源形式结果(如果我们想要放弃所有来源,我们可以通过减去GAVC搜索“来源”分类器的结果来轻松地做到这一点—参见下面的截图)。
一旦我们对保存的搜索结果感到满意,我们就可以继续推广它们了!
促销——动起来!
推广是非常容易的-我们只是移动保存的搜索结果的工件到一个目标,更开放的存储库,从而使它们可供公众使用。我们可以选择是移动原始工件还是在目标存储库中创建它们的副本。
我们甚至可以执行“预演”,看看一切都运行良好,没有错误或警告(例如,目标存储库可能不接受某些工件,因为它快照/。释放策略、安全策略或包含/排除路径模式)。
最后,我们还可以导出搜索结果由于工件来如果我们希望在Artifactory以外的其他地方使用它们,则可以使用文件系统。
当复制搜索结果时罗依移动后,它们会保持原始的元数据和属性,因此您可能拥有的关于工件的任何有价值的信息都会被保留下来。
结束
Artifactory正在采取一种独特的方法来进行准备和推广——而不是人为地要求工件部署到quarrantine区域,我们只需在部署时用元数据标记工件,并将它们部署到开发和QA团队成员可以在内部访问的中央登台存储库中。这个过程很便宜,不需要复杂的设置,对开发人员和测试人员来说都很自然。如果我们希望避免双重部署到临时存储库,我们可以很容易地使用权限(使用删除权限)来做到这一点——不需要为此手动关闭整个存储库。
一旦我们对分段构建构件感到满意,我们就可以通过搜索来收集它们,并简单地将它们移动或复制到另一个目标存储库,在那里它们是公开可用的。在这个例子中,我们标记了我们的神器buildNumber属性,但我们可以将任何属性附加到我们的工件并执行许多种类的搜索来控制我们的推广来源结合属性值,通过GAVC等)——有了工件上的元数据,我们就不受工件部署到的物理存储库的限制了!
享受吧!