制品仓库 Packages
- 制品仓库是什么
制品库顾名思义是制品的仓库,制品是软件交付的成果性产物,通常是可运行的二进制形式,因此制品库通常也被称之为二进制制品仓库。制品库在开发阶段为使用各种开发语言的微服务开发者提供依赖解析的唯一入口。在构建阶段为各种语言的构建工具提供唯一的依赖解析源和统一的各种语言制品管理库。进入测试阶段后,所有测试环境部署工具从制品库拉取满足测试条件的制品进行部署,测试结束后将测试结果数据反馈到制品库,并且与制品进行关联。部署阶段依据质量关卡检查制品是否满足部署条件,满足则由部署工具从制品库拉取制品(也可能是环境中的客户端拉取,如Docker),对接环境进行部署。
制品库致力于帮助开发者统一管理各种开发语言在开发、构建过程中的依赖,构建成果(二进制制品)以及交付过程关键信息的重要组件。制品库衔接持续集成和持续部署,是持续集成的成果管理仓库,也是持续部署的物料来源,同时也为研发的静态安全提供保障。
开源制品仓库选型
- Nexus
- Artifactory
最终选择Artifactory,因为体验比较好
需求背景
公司需要统一制品仓库,该仓库能够存储jar包供maven使用,一方面为了加速maven的拉取素的,另一方面有一些jar包在中央仓库没有,需要下载源码打包后发布到自己的私有仓库,同时我们自己开发的一些功能jar包也需要一个制品库来和同时共享
制品仓库的Artifactory系统架构图
安装系统环境
- CentOS7.4
- JDK1.8+
一、检查java环境
制品仓库Artifactory 依赖jdk1.8环境以上运行,因为有Tomcat
# PS: jdk环境安装自行百度,终端命令查询java版本号
java -version
二、下载制品仓库Artifactory
制品仓库Artifactory官网下载地址: jfrog.com/community/d…
PS:这里选择在线安装
- 在线制品仓库Artifactory安装
wget https://releases.jfrog.io/artifactory/artifactory-rpms/artifactory-rpms.repo -O jfrog-artifactory-rpms.repo;
sudo mv jfrog-artifactory-rpms.repo /etc/yum.repos.d/;
sudo yum update && sudo yum install jfrog-artifactory-oss
# 直接回车,一路选择Y即可
- 下载制品仓库Artifactory rpm
# 安装下载文件
rpm -ivh jfrog-artifactory-oss-7.35.1.rpm
三、启动制品仓库Artifactory服务
systemctl start artifactory.service
- 常用服务指令
# 启动服务
systemctl start artifactory.service
# 停止服务
systemctl stop artifactory.service
# 重启服务
systemctl reload artifactory.service
# 检查服务状态
systemctl status artifactory.service
- 设置开机启动
# 重载系统服务(刷新系统服务)
systemctl daemon-reload
# 设置开机启动
systemctl enable artifactory.service
# 设置开机禁用
systemctl disable artifactory.service
四、打开制品仓库Artifactory
通过浏览器打开地址 http://192.168.1.1:8081 来访问artifactory界面
- 默认的用户名密码为: admin/password
五、制品仓库Artifactory基本使用流程图
六、创建本地仓库、远程仓库、虚拟仓库
1、创建本地仓库
我这里创建两个本地仓库
- rdc-release 发行版本库
- rdc-snapshots 快照版本库
1.1、创建发行版本库
点击 “设置” --> "Repositories" --> "Add Repositories" --> "Local Repository"
1.2、创建快照版本库
点击 “设置” --> "Repositories" --> "Add Repositories" --> "Local Repository"
1.3、查看创建好的仓库
2、创建远程仓库
这里我们用于代理一些公共代理仓库,例如阿里云maven公共仓库 developer.aliyun.com/mvn/guide
2.1、创建远程仓库
点击 “设置” --> "Repositories" --> "Add Repositories" --> " Remote Repository"
2.2、查看创建好的仓库
这里我多建了两个远程仓库
3、创建虚拟仓库
虚拟仓库实际上是将刚刚创建的本地仓库和远程仓库加入到我们创建的虚拟仓库中,实际对外使用的仓库地址
我这里创建两个虚拟仓库
- ssc-release 虚拟发行版本库
- ssc-snapshots 虚拟快照版本库
3.1、创建虚拟发行版本库
3.2、创建虚拟快照版本库
3.3、查看创建好的仓库
七、发布上传maven 项目
1、获取maven配置settings.xml
点击"菜单" --> “Artifactory” --> "Artifacts" --> “ssc-snapshot” --> “Set Me Up”, 选择Repository 为libs-release, 在configure中我们输入密码,这样在生成的文件中就包含了编码过的密码
- 我感觉生成settings.xml配置有点花里胡哨的,精简一下(账号密码后面在讲)
<?xml version="1.0" encoding="UTF-8"?>
<settings xsi:schemaLocation="https://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd" xmlns="https://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<!-- 制品仓库认证信息 -->
<servers>
<!-- 发行库认证信息 -->
<server>
<id>ssc-releases</id>
<username>用户名</username>
<password>密码</password>
</server>
<!-- 快照库认证信息 -->
<server>
<id>ssc-snapshot</id>
<username>用户名</username>
<password>密码</password>
</server>
</servers>
<profiles>
<profile>
<!-- 该配置的唯一标识符 -->
<id>rdc</id>
<!-- 配置的默认部署远程资源库 -->
<properties>
<altReleaseDeploymentRepository>
ssc-releases::default::https://xxx.cn/artifactory/rdc-release
</altReleaseDeploymentRepository>
<altSnapshotDeploymentRepository>
ssc-snapshot::default::https://xxx.cn/artifactory/rdc-snapshots
</altSnapshotDeploymentRepository>
</properties>
<!-- 定义远程资源库 -->
<repositories>
<repository>
<id>ssc-releases</id>
<url>https://xxx.cn/artifactory/ssc-release</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>ssc-snapshot</id>
<url>https://xxx.cn/artifactory/ssc-snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<!-- 发现plugins 的远程资源库的列表,主要是为了编译和报告 -->
<pluginRepositories>
<pluginRepository>
<id>ssc-releases</id>
<url>https://xxx.cn/artifactory/ssc-release</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>ssc-snapshot</id>
<url>https://xxx.cn/artifactory/ssc-snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<!-- 激活配置 -->
<activeProfiles>
<activeProfile>rdc</activeProfile>
</activeProfiles>
</settings>
2、配置账号密码
2.1、新增用户
2.2、新增角色
2.3、新增权限
3、配置settings.xml 账号密码
<?xml version="1.0" encoding="UTF-8"?>
<settings xsi:schemaLocation="https://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd" xmlns="https://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<!-- 制品仓库认证信息 -->
<servers>
<!-- 虚拟发行仓库认证信息 -->
<server>
<id>ssc-releases</id>
<username>你设置用户名</username>
<password>你设置密码</password>
</server>
<!-- 虚拟快照仓库认证信息 -->
<server>
<id>ssc-snapshot</id>
<username>你设置用户名</username>
<password>你设置密码</password>
</server>
</servers>
... 省略掉
</settings>
4、覆盖maven配置文件settings.xml
- 配置文件settings.xml并将其存放至$HOME/.m2/文件目录下(一般默认的maven仓库会安装在C盘用户下面)
5、IDEA配置项目maven pom文件
- 您项目目录的pom.xml文件中配置
<!-- 上传制品仓库 -->
<distributionManagement>
<repository>
<id>ssc-releases</id>
<url>http://192.168.1.1:8081/artifactory/rdc-release</url>
</repository>
<snapshotRepository>
<id>ssc-snapshot</id>
<url>http://192.168.1.1:8081/artifactory/rdc-snapshots</url>
</snapshotRepository>
</distributionManagement>
6、推送仓库
您的制品文件具体推送到哪个库,根据您项目目录的pom.xml文件中字段中是否配置了-SNAPSHOT
- 推送至 ssc-releases 库pom.xml示例:
<groupId>com.example.xxxx</groupId>
<artifactId>xxxx</artifactId>
<version>1.0</version>
- 推送至 ssc-snapshot 库pom.xml示例:
<groupId>com.example.xxxx</groupId>
<artifactId>xxxx</artifactId>
<version>1.0-SNAPSHOT</version>
- 推送
# 命令推送
mvn clean install org.apache.maven.plugins:maven-deploy-plugin:2.8:deploy -DskipTests
- 或者IDEA
artifactory默认安装目录
/etc/opt/jfrog/artifactory
文档地址
/opt/jfrog/doc
artifactory tomcat目录
PS:可以修改端口号8081
/opt/jfrog/artifactory/tomcat
附带一份 nginx.conf 配置文件
server {
listen 80;
server_name xxx.com;
location / {
proxy_pass http://127.0.0.1:8081;
}
}