Nexus
目的
本文描述 私有制品库 Nexus Repository OSS 安装部署步骤以及简单的配置与使用方法。
环境与软件
本章内容安装及运行所需软件:
项目 | 版本 | 说明 |
---|---|---|
Nexus Repository OSS | 3.30.0-01 | 私有制品库 |
安装部署
从 下载页面 下载 NEXUS REPOSITORY MANAGER OSS 3.X - UNIX
,并将其解压。
得到以下目录结构:
📁 nexus-3.18.1-01
📁 etc
📃 nexus-default.properties 应用配置文件
...
📁 bin
📃 nexus Nexu 启动脚本
📃 nexus.vmoptions Java 虚拟机配置文件
...
通过 nexus-default.properties
的 application-port
设置 Nexus 服务端口号:
application-port=8910
通过 nexus.vmoptions
设置 Java 虚拟机启动参数:
-Xms1536m
-Xmx1536m
-XX:MaxDirectMemorySize=1536m
启动 Nexus Repository Manager OSS:
$ nexus-3.18.1-01/bin/nexus start
停止 Nexus Repository Manager OSS:
$ nexus-3.18.1-01/bin/nexus stop
配置与使用
启动 Nexus Repository Manager OSS 服务后使用浏览器访问以下链接,进入首页,并通过 Sign In 按钮登录:
http://192.168.1.247:8910
首次登录会提示 admin 账号的初始密码在服务器上的保存路径,并在初次登录后要求重置密码。
通过 Server administration and configuration
标签的 Security
> Users
添加用户“codelet”,并授权为 nx-admin。
使用新用户登录,通过 Repository
> Repositories
创建新仓库。
仓库类型:
类型 说明 hosted 本地仓库 proxy 代理仓库,用来代理远程公共仓库,如 Maven 中央仓库 group 用于合并多个 hosted 或 proxy 仓库 版本策略:
策略 说明 snapshot 快照,即调试版本,同一版本号内容可能会被修改 release 发布版,同一版本号内容不可修改
首先创建一个 maven2 (hosted) 类型的 Snapshot 仓库,属性如下:
属性 | 值 | 说明 |
---|---|---|
name | codelet-cloud-snapshots | |
Maven 2 / Version policy | Snapshot | 快照(调试)版 |
Maven 2 / Layout policy | Permissive | |
Storage / Blob store | default | |
Storage / Strict Content Type Validation | 取消 | 不进行 Content Type 检查 |
Hosted / Deployment policy | Allow redeploy | 快照版允许重新部署 |
Clean Policy / Available cleanup policies | None |
再创建一个 maven2 (hosted) 类型的 Release 仓库,属性如下:
属性 | 值 | 说明 |
---|---|---|
name | codelet-cloud-releases | |
Maven 2 / Version policy | Release | 发行版 |
Maven 2 / Layout policy | Permissive | |
Storage / Blob store | default | |
Storage / Strict Content Type Validation | 取消 | 不进行 Content Type 检查 |
Hosted / Deployment policy | Disable redeploy | 发行版不允许重新部署 |
Clean Policy / Available cleanup policies | None |
最后,创建一个 group 类型的 maven2 仓库,用来合并 codelet-cloud-snapshots、codelet-cloud-releases 和 Maven 中央库,属性如下:
属性 | 值 | 说明 |
---|---|---|
name | codelet-cloud-public | |
Storage / Blob store | default | |
Storage / Strict Content Type Validation | 取消 | 不进行 Content Type 检查 |
Group / Member repositories | codelet-cloud-releases codelet-cloud-snapshots maven-releases maven-snapshots maven-central |
创建 Maven 配置文件 ~/.m2/settings.xml 并设置以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups>
<pluginGroup>org.sonatype.plugins</pluginGroup>
</pluginGroups>
<proxies/>
<servers>
<server>
<id>nexus</id>
<username>codelet</username>
<password>Pas5w0rd</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://nexus.cloud.codelet.net:8910/repository/codelet-cloud-public/</url>
</mirror>
<mirror>
<id>repo1</id>
<mirrorOf>central</mirrorOf>
<name>Maven Central Repository #1</name>
<url>http://repo1.maven.org/maven2/</url>
</mirror>
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Maven Central Repository #2</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
通过以上配置,在服务器上执行 Maven 部署命令时,编译结果将被发布到 Nexus Repository Manager OSS 的 codelet-cloud-public 中:
$ mvn clean deploy
Nexus 会为每次提交的 Snapshot 保留历史,为避免历史版本占用过多磁盘空间,需要创建 Snapshot 清理任务。
通过 System > Tasks 创建类型为 Maven - Delete SNAPSHOT 的任务,属性如下:
属性 | 值 | 说明 |
---|---|---|
Task enabled | 启用 | |
Task name | codelet-cloud-clean-snapshots | |
Repository | codelet-cloud-snapshots | |
Minimum snapshot count | 1 | 不论其他条件如何设置,都将至少保留一个 Snapshot |
Snapshot retention (days) | 0 | 保留最新的 Snapshot,删除所有其他 Snapshot |
Task frequency | Advanced | 使用 CRON 表达式设置任务的执行频率 |
CRON expression | 0 /5 * * ? | 每五分钟执行一次 |
通过 System > Tasks 创建类型为 Admin - Compact blob store 的任务,属性如下:
属性 | 值 | 说明 |
---|---|---|
Task enabled | 启用 | |
Task name | codelet-cloud-compact-store | |
Blob store | default | 压缩对象 Blob Store |
Task frequency | Advanced | 使用 CRON 表达式设置任务的执行频率 |
CRON expression | 30 /5 * * ? | 每五分钟执行一次 |
制品库管理规范
仓库命名
每个项目建立三个制品库,名称及类型如下表(XXX为项目名):
名称 | 类型 | 说明 |
---|---|---|
XXX-snapshots | hosted | 快照版,允许重新部署,用于开发、测试 |
XXX-releases | hosted | 发行版,不允许重新部署,用于版本发布 |
XXX-public | group | 组仓库,用于合并releases库、snapshots库、maven中央仓库 |
注:仓库组所包含的仓库的顺序决定了仓库组遍历其所含仓库的次序,因此最好将常用的仓库放在前面,当用户从仓库组下载构件的时候,就能够尽快地访问到包含构件的仓库。
版本号
版本号的管理使用当下被大多数软件/库使用的 语义化版本控制规范(SemVer)。
摘要
版本格式:主版本号.次版本号.修订号,版本号递增规则如下:
- 主版本号:大规模升级改造, 不兼容的API修改。
- 次版本号:向下兼容的功能性新增。
- 修订号:向下兼容的问题修复。
先行版本号及版本编译元数据可以加到“主版本号.次版本号.修订号”的后面,作为延伸。如下图所示:
上述内容出自 Semantic Versioning 2.0.0
FAQ
- 初始开发阶段应该怎么进行版本控制?
- 最简单的做法是以 0.1.0 作为你的初始化开发版本,并在后续的每次发行时递增次版本号。
- 如何处理即将弃用的功能?
- 应该将弃用的功能透过新的次版本号发布,在新的主版本完全移除弃用功能前,至少要有一个次版本包含这个弃用信息,这样使用者才能平顺的转移到新版API。
- 当我只修改了某一个接口的内部代码时,版本应该怎么变化?
- 需要判断此次修改是否是向下兼容的,如果是向下兼容的那么这就是一个修订等级的改变。如果是不兼容的,则需要递增主版本号。
- 先行版本号的应用场景有哪些?
- 先行版的优先级低于相关联的标准版本。被标上先行版本号则表示这个版本并非稳定而且可能无法满足预期的兼容性需求。范例:1.0.0-alpha、1.0.0-beta、1.0.0-rc.1。
流程
- 程序构建时从public库下载构件。
- master分支构建后上传到releases库。
- 其他分支构建后上传到snapshots库。
- 部署生产环境时从releases库获取程序包。
- 部署开发环境、测试环境时从snapshots库获取程序包。