JFrog Artifactory 系列3 --- 仓库与配置
一、概念
1. 承上启下
JFrog Artifactory 系列1 --- 安装与配置
JFrog Artifactory 系列2 --- Https
2. 仓库种类
(1) 按逻辑结构划分
从逻辑上讲,最常用的制品库类型有以下三种:
a. Local Repositories(本地仓库):用于搭建私有仓库,存储组织内部制品;
b. Remote Repositories(远程仓库):用于存储(缓存)从远程仓库下载的制品,这里的下载的是按需下载,配置远程仓库可以减轻从远程仓库下载制品所带来的网络耗时,加快应用部署速度;
c. Virtual Repositories(虚拟仓库):不同于本地仓库和远程仓库,虚拟仓库并不占用物理存储。它是多个其他仓库的一个路由器,这个“其他仓库”可以是本地仓库也可以是远程仓库甚至可以是另一个虚拟仓库,可以配置虚拟仓库将指定域名的制品路由到本地仓库,其他域名的制品请求路由到远程仓库;
(2) 按照仓库存储的制品种类划分
上一篇我们看到,社区版的JFrog Artifactory仅支持5种类型的制品库,在这里我们挑选两种最常用的制品库:
a. Generic Repositories(通用仓库):通用仓库不限制制品的类型,在实际场景中可用于存储IOS或者Android包;正是由于它没有指定的仓库类型,所以该仓库不维护单独的包索引。
b. Maven Repositories(Maven仓库):用于存储JAR包;
二、通用配置
1. 通用普通配置
三种逻辑仓库的大部分配置都是类似的,它们分别是:
(1) Repository Key:仓库名称,需要全局唯一且不可修改,建议使用以下格式来命名:
<Repository Type>-<Release or Snapshot>-<Local or Remote or empty for Virtual>
比如:maven-release-local
(2) Environments:PRD或DEV环境;
(3) Repository Layout:与所选择的仓库类型相关,比如Maven可选择maven-2-default;
(4) Public Description:仓库的公开描述;
(5) Internal Description:仅对管理员公开的描述;
(6) Include and Exclude Patterns: 包含模式匹配和排除模式匹配用于制品的搜索和定位,如果一个仓库定义了Include Patterns,那么其匹配的制品搜索会被定位到该仓库中进行查找;反之,如果一个仓库定义了Exclude Pattern,其匹配的制品搜索会绕过该仓库。
如果一个仓库同时定义了Include Patterns和Exclude Pattern,那么该仓库支持的查询为“Include Patterns的集合减去Exclude Pattern的集合”。
默认情况下:Include Patterns为All,Exclude Pattern为None;
举个例子,仓库A配置了如下模式匹配:
Include Patterns: org/apache/**,com/acme/** Exclude Patterns: com/acme/exp-project/**
a. org/apache/maven/parent/1/1.pom:该制品会在A中定位;
b. com/acme/project-x/core/1.0/nit-1.0.jar:该制品会在A中定位;
c. com/acme/exp-project/core/1.1/san-1.1.jar:该制品不会在A中定位。
(7) Max Unique Snapshots:在同一个artifact下,仓库存储的不同snapshots的最大个数,当达到该数量时,使用先进先出算法删除老的制品。该值默认为0,即不限制;
(8) Handle Releases::该开关决定当前仓库是否允许部署release版本的制品;
(9) Handle Snapshots:该开关决定当前仓库是否允许部署snapshot版本的制品;
2. 通用高级配置
(1) Priority Resolution
该选项用于提升当前仓库在制品查询解析时的优先级,建议对本地库开启该选项。
(2) Blacked out
可以理解为下线或禁用,开启后该仓库将不可查询、部署和解析制品。
(3) Allow content browsing
允许浏览内容选项,选中后Artifactory将会允许用户浏览内部归档文件的内容,比如浏览JavaDoc的内容。
(4) Enable CDN Download
CDN加速,仅在商用版支持。
三、Maven仓库的配置
1. 创建本地仓库
(1) 创建maven-release-local库,存储本地的release制品:
(2) 创建maven-snapshot-local,用于存储本地的snapshot制品:
(3) 可以通过以下URL访问存储在本地仓库的制品:
http://<host>:<port>/artifactory/<local-repository-name>/<artifact-path>
2. 本地仓库配置说明
(1) Checksum Policy
Checksum是针对二进制文件生成的字符串,用于确保该文件的完整性。
Checksum Policy是当用户提交的制品没有Checksum或Checksum校验失败后的行为,它有两个选项:
a. Verify against client checksums (默认):如果Checksum不合法,则访问制品的checksum接口返回404错误,如果Checksum与本地生成的Checksum不匹配,则访问制品的checksum接口返回409错误;
b. Trust server generated checksums:Artifactory不再校验用户上传的checksum,Artifactory会使用自己计算的checksum并信任该值。
(2) Maven Snapshot Version Behavior
Maven Snapshot版本行为,有三个选项:
a. Unique:全局唯一,推荐选择;
b. Nonunique:非唯一的,使用固定格式“artifactID-version-SNAPSHOT.type”;
c. Deployer:使用用户上传时指定的版本号。
(3) Suppress POM Consistency
该选项用于跳过POM的一致性检查,不建议勾选。
用户上传制品后,Artifactory会对比POM文件中的groupId:artifactId:version和实际的部署路径,如果不一致则拒绝部署。
3. 创建远程仓库
(1) 创建maven-remote代理Maven中央库或阿里云镜像库(https://maven.aliyun.com/repository/central)
(2) 可以通过以下URL访问存储在远程库中的制品:
http://<host>:<port>/artifactory/<remote-repository-name>/<artifact-path>
如果制品尚未缓存,那么请求该URL将使Artifactory首先请求远程的制品(可能位于中央库),并将制品缓存在本地(注意不是本地库)。
(3) 直接访问远程库的本地缓存
http://<host>:<port>/artifactory/<remote-repository-name>-cache/<artifact-path>
4. 远程仓库配置说明
(1) URL
远程库的URL,比如:
a. Maven的阿里云镜像:https://maven.aliyun.com/repository/central
b. Maven中央库:https://repo1.maven.org/maven2/
注意,有些仓库的链接无法Test成功(比如阿里云镜像),是因为这些仓库不支持URL访问其内容。
(2) Offline
离线选项,如果选中则将不再尝试从当前远程库下载制品。
(3) Checksum Policy
不同于本地库的Checksum Policy,远程库的策略如下:
a. Generate if absent(默认):如果远程制品没有checksum,则Artifactory将为其生成checksum并信任该checksum;如果远程制品的checksum与Artifactory生成的checksum不匹配,则拒绝下载远程制品;
b. Fail:如果远程制品没有checksum或者与本地生成的checksum不匹配,则拒绝;
c. Ignore and generate:忽略远程制品携带的checksum值,使用Artifactory生成的checksum代替;
d. Ignore and Pass-thru:与c相比,如果远程制品携带了checksum值,则信任之。
(4) Eagerly Fetch Jars
尽早请求Jar选项,在选中状态下,Artifactory将会在查询本地缓存时并发的请求远程制品。此选项会加速第一次请求的进程。
(5) Eagerly Fetch Sources
与Eagerly Fetch Jars类似。
5. 创建虚拟仓库
(1) 创建maven-release,代理对所有release仓库的访问:
(2) 创建maven-snapshot,代理全部snapshot仓库;
6. 虚拟仓库配置说明
(1) 制品解析顺序
对于虚拟仓库的查询请求,Artifactory将遵循以下解析顺序:
a. Local repositories
b. Remote repository caches
c. Remote repositories themselves
如果其中一种类型的仓库存在多个,则按照它们在Selected Repositories中的顺序进行解析。
(2) Selected Repositories
将当前虚拟库需要路由的仓库从左侧的可用库列表添加到右侧的选中仓库列表。
(3) Default Deployment Repository
选择本地库作为默认的部署仓库。
7. 官方最佳实践建议
(1) 对外公开的制品库与内部专用的制品库严格分开;
(2) 使用Exclude Pattern阻止内部仓库暴露:
a. 配置虚拟仓库,代理所有的远程仓库访问;
b. 在虚拟仓库中配置Exclude Pattern,排除对本地仓库的访问;
(3) 通过Include Pattern提高内部制品查询性能:
a. 对本地库,配置Include Pattern仅包含当前仓库所存储的制品。
(4) 使用虚拟仓库
a. 创建虚拟仓库,聚合对本地仓库和远程仓库的访问;
四、参考
1. 官方
https://jfrog.com/help/r/jfrog-artifactory-documentation/repository-management
https://jfrog.com/help/r/jfrog-artifactory-documentation/virtual-repositories
https://jfrog.com/help/r/jfrog-artifactory-documentation/local-repositories
https://jfrog.com/help/r/jfrog-artifactory-documentation/remote-repositories
https://jfrog.com/help/r/jfrog-artifactory-documentation/maven-repository
https://jfrog.com/whitepaper/best-practices-structuring-naming-artifactory-repositories/
2. 其他