Hello,朋友们,随着构建工具和框架的选择越来越多,将模块存储在仓库中的方法也越来越多。
小编今天就来讲讲JFrog Repository Layout。
一、默认布局
Artifactory 开箱即用,带有许多默认的预定义布局,无需额外配置:
- bower-default
- build-default
- cargo-default
- composer-default
- conan-default
- go-default
- ivy-default
- maven-1-default
- maven-2-dafault
- npm-fault
- nugget-default
- puppet-default
- sbt-default
- simple-default
- swift-default
- terraform-module-default
- terraform-provider-default
- vcs-default
二、自定义布局
仓库布局允许您设置每个仓库使用的布局,并使用布局定义来识别模块制品和描述符。仓库布局支持这些用于任何构建技术的智能模块管理工具:
- 自动快照/集成版本清理
- 删除旧版本
- 远程和本地布局之间的转换
- 移动或复制时 2 个本地布局之间的转换
- 从虚拟仓库到其底层仓库的解析转换(虚拟仓库定义了自己的布局)
仓库布局在 Artifactory 实例的全局级别配置,因此任何布局都可以在任意数量的仓库中共享和重用。
1.新建布局
布局配置可供管理员用户在Repositories |下的Administration模块中点击Layouts。
可以通过单击“新建”或复制现有布局从头开始创建其他布局。
- Layout Name
布局名称
- Artifact Path Pattern
制品路径模式表示所有模块制品都应存储在其中的典型结构。
例如:
- 表示正常的 Maven 制品路径:
org/eclipse/jetty/jetty-ajp/7.0.2.v20100331/jetty-ajp-7.0.2.v20100331.jar
使用制品路径模式:
[orgPath]/[module]/[baseRev](-[folderItegRev])/[module]-[baseRev](-[fileItegRev])(-[classifier]).[ext]
- 表示默认的 Ivy 制品路径:“
org.eclipse.jetty/jetty-ajp/7.0.2.v20100331/jars/jetty-ajp-7.0.2.v20100331.jar
使用制品路径模式:
[org]/[module]/[baseRev](-[folderItegRev])/[type]s/[module]-[baseRev](-[fileItegRev])(-[classifier]).[ext]
- Descriptor Path Patterns
描述符路径模式用于识别描述符文件(如.pom或者ivy.xml文件)。
使用特定的描述符路径模式是可选的。不使用时,Artifactory 使用制品路径模式为描述符文件构造模块信息。
尽管描述符路径模式是可选的,但强烈建议在有独特描述符的情况下使用它们,例如 Ivy ivy-1.0.xml和Maven bobs-tools-1.0.pom
例如:
- 表示正常的 Maven 描述符路径:
org/eclipse/jetty/jetty-ajp/7.0.2.v20100331/jetty-ajp-7.0.2.v20100331.pom
使用描述符路径模式:
[orgPath]/[module]/[baseRev](-[folderItegRev])/[module]-[baseRev](-[fileItegRev])(-[classifier]).pom
- 表示默认的 Gradle 描述符路径:
org.eclipse.jetty/jetty-ajp/ivy-7.0.2.v20100331.xml
使用描述符路径模式:
[org]/[module]/ivy-[baseRev](-[fileItegRev]).xml
- Folder Integration Revision RegExp(文件夹整合修订正则表达式)
例子:
Maven的文件夹集成修订是常量 -SNAPSHOT 附加到基本修订版(“1.2-SNAPSHOT”),因此正则表达式是
SNAPSHOT
Ivy 默认的文件夹集成版本通常等于文件集成版本,通常是一个 14 位的时间戳(“5.1-20101202161531”),所以正则表达式可以是
\d{14}
- File Integration Revision RegExp(文件集成修订正则表达式)
Maven 的文件集成修订可以是 -SNAPSHOT 常量(“1.2-SNAPSHOT”)或时间戳,其中日期和时间由点(“.”)分隔,并添加破折号(“-”)和内部版本号(“2.3-20110108.100922- 2"), 所以正则表达式应该能够同时适合它们
SNAPSHOT|(?:(?:\d{8}.\d{6})-(?:\d+))
Ivy 的默认文件集成修订通常是一个 14 位数字时间戳(“5.1-20101202161531”)并且通常等于文件夹集成修订,因此正则表达式可能与文件示例中建议的相同
\d{14}
三、详细说明
1.仓库布局使用的模块和路径模式
1.1模块字段
为了支持智能模块管理,Artifactory 必须为存储的文件构建模块信息。Artifactory 根据定义为 Repository Layout 配置一部分的路径模式信息构建此信息(详见下文)。
模块由各种子元素或字段组成,这些子元素或字段通常在存储的制品的路径中表示。
下面列出了 Artifactory 识别的模块子元素。模块识别至少需要三个必填字段:
- Organization
- Module
- Base Revision.
范围 | 描述 | 例子 | 规则 |
Organization | 标识制品组织的一系列文字 | “org.slf4j” | 必填 |
Module | 标识制品模块的文字序列 | “org.slf4j” | 必填 |
Base Revision | 标识制品版本的基本修订部分的文字序列,不包括任何集成信息 | “1.5.10” 或者在集成修订的情况下:“1.2-SNAPSHOT” 基础修订是:“1.2” | 必填 |
Folder Integration Revision | 标识制品路径中文件夹名称中使用的集成修订部分的文字序列,不包括基本修订 | 在整合修订的情况下 “1.2-SNAPSHOT”; 文件夹整合修订为 “SNAPSHOT” | 选填 |
File Integration Revision | 标识制品文件名中集成修订部分的文字序列,不包括基本修订 | 在整合修订的情况下 “1.2-20110202.144533-3” 文件集成修订是 “20110202.144533-3” | 选填 |
Classifier | 标识制品分类器的一系列文字 | “ sources” | 选填 |
Extension | 标识制品扩展名的一系列文字 | “ zip” | 选填 |
Type | 标识制品类型的文字序列。通常在制品的扩展不能作为制品的类型重用时使用 | “ java-source” | 选填 |
1.2使用模块字段定义路径模式
路径模式用于仓库布局的配置。
该模式类似于 Ivy 模式,用于定义制品解析和发布路径的协议。
Artifactory 使用路径模式来构建存储文件的模块信息。然后使用此模块信息来促进上述所有功能(版本清理、跨回购路径转换等)。
以下令牌可用:
字段 | 描述 |
[org] | 表示Organization字段,其中级别由点分隔 (‘.')。例如: org.slf4j |
[orgPath] | 表示Organization字段,其中级别由路径分隔符 (‘/')。例如: org/slf4j |
[baseRev] | 表示Base Revision字段 |
[module] | 代表Module字段 |
[folderItegRev] | 表示Folder Integration Revision字段 |
[fileItegRev] | 代表File Integration Revision字段 |
[classifier] | 代表Classifier字段 |
[ext] | 代表Extension字段 |
[type] | 表示Type字段 |
[customTokenName<customTokenRegex>] | 自定义令牌。当提供的默认值不足时,可用于创建新型令牌。 [myIntegRev<ITEG-(?:[0-9]+)>] 创建一个名为 myIntegRev 匹配这个词 ITEG 后跟破折号和至少一位数字。 |
四、仓库配置
1.本地仓库配置
布局对于本地仓库是强制性的,因为它们定义了存储制品的结构。
当您创建新的仓库时,Artifactory 会根据为仓库选择的包类型推荐最佳布局。
2.远程仓库配置
布局仅对远程仓库缓存配置是必需的,但是,您也可以指定远程仓库本身的布局。
如果远程仓库本身使用的布局与为缓存选择的布局不同,则所有对远程目标的请求都将从缓存布局的路径转换为远程布局的路径。
例如远程仓库
http://download.java.net/maven/1
根据 Maven 1 协议存储其制品。您可以将此仓库的缓存配置为使用 Maven 2 布局,但将远程布局映射设置为 Maven 1。这样,仓库缓存会处理 Maven 2 请求和制品存储,而对远程仓库的传出请求将转换为Maven 1 协议。
3.虚拟仓库配置
您还可以为虚拟仓库配置布局。
配置后,所有解析请求都可以根据虚拟仓库布局进行。当尝试解析对虚拟仓库的请求时,系统会根据从虚拟请求构建的模块信息,尝试将请求路径转换为每个嵌套仓库的布局。
在以下情况下,请求路径不会被转换,并且请求会传递到具有原始指定路径的嵌套仓库:
- 无法构建模块信息
- 虚拟模块信息无法映射到嵌套仓库(例如,其中一侧缺少字段)
- 虚拟仓库或嵌套仓库未配置布局