共计 6505 个字符,预计需要花费 17 分钟才能阅读完成。
生存是属于每个人本人的感触,不属于任何他人的认识。—— 余华《活着》
一. 概述
在学习应用一个工具之前,咱们须要晓得怎么装置它。本文将本人学习的过程记录下来,一方面坚固学习的内容,另一方面心愿对有同样需要的小伙伴提供一些帮忙。
开源工具 | 形容 | 官网文档 | 官网装置文档 | docker 装置 |
---|---|---|---|---|
nexus | maven 仓库管理工具 | nexus 官网 | nexus 疾速装置 | docker 装置 |
下面表格列出了官网的装置地址,如果须要疾速体验应用,倡议间接应用 docker 装置,一行命令就能够启动利用:
docker run -d -p 8081:8081 --name nexus sonatype/nexus3
下文将介绍在 k8s 中装置并应用 nexus,这里将应用两种形式装置:
- 本人编写部署清单
nexus-deploy.yaml
装置 - 应用 helm 装置
装置环境
这里应用 minikube 进行装置,在 k8s 集群中根本应用是一样的
- minikube : v1.18.1
- helm : v3.5.3
二. 编写部署清单 nexus-deploy.yaml
装置
因为 nexus 须要长久化数据,所以咱们须要创立 PVC
,倡议应用 storageClass
动态创建 PVC
,在 minikube
中有一个默认的 storageClass
,名称是:standard
,能够应用上面的命令查看:
# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
standard (default) k8s.io/minikube-hostpath Delete Immediate false 50m
storageClass 的应用能够查看官网:https://kubernetes.io/zh/docs…
创立 nexus-deploy.yaml
文件,文件内容如下:
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nexus-data-pvc
namespace: default
spec:
accessModes:
- ReadWriteMany
# 指定 storageClass 的名字,这里应用默认的 standard
storageClassName: "standard"
resources:
requests:
storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: default
name: nexus3
labels:
app: nexus3
spec:
replicas: 1
selector:
matchLabels:
app: nexus3
template:
metadata:
labels:
app: nexus3
spec:
containers:
- name: nexus3
image: sonatype/nexus3:3.32.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8081
name: web
protocol: TCP
livenessProbe:
httpGet:
path: /
port: 8081
initialDelaySeconds: 100
periodSeconds: 30
failureThreshold: 6
readinessProbe:
httpGet:
path: /
port: 8081
initialDelaySeconds: 100
periodSeconds: 30
failureThreshold: 6
resources:
limits:
cpu: 4000m
memory: 2Gi
requests:
cpu: 500m
memory: 512Mi
volumeMounts:
- name: nexus-data
mountPath: /nexus-data
volumes:
- name: nexus-data
persistentVolumeClaim:
claimName: nexus-data-pvc
apiVersion: v1
kind: Service
metadata:
name: nexus3
namespace: default
labels:
app: nexus3
spec:
selector:
app: nexus3
type: ClusterIP
ports:
- name: web
protocol: TCP
port: 8081
targetPort: 8081
应用如下命令部署利用:
# kubectl apply -f nexus-deploy.yaml
deployment.apps/nexus3 created
persistentvolumeclaim/nexus-data-pvc created
service/nexus3 created
应用如下命令查看 pod 是否失常运行:
# kubectl get pod
NAME READY STATUS RESTARTS AGE
nexus3-6c75965bcf-6tj5w 1/1 Running 0 5m37s
应用如下命令查看 pod 的日志:
kubectl logs -f nexus3-6c75965bcf-6tj5w -n default
看到如下内容,则示意利用启动胜利:
应用如下命令裸露 pod 端口到本机,以便内部拜访:
# 应用阐明:kubectl port-forward TYPE/NAME [options] [LOCAL_PORT:]REMOTE_PORT
kubectl port-forward service/nexus3 8081:8081
生产应用倡议通过 ingress 裸露服务,这里通过 port-forward 长期裸露服务
拜访地址:http://localhost:8081/
默认登录 nexus 的账号和明码如下:
- 用户名:admin
- 明码:默认的初始密码在服务器的
/nexus-data/admin.password
文件中
应用上面的命令获取默认的明码:
kubectl exec nexus3-6c75965bcf-6tj5w -- cat /nexus-data/admin.password
登录 nexus:
登录胜利后须要设置新密码:
更新明码后,配置是否开启匿名拜访。启用匿名拜访意味着默认状况下,用户能够在没有凭据的状况下从存储库搜寻、浏览和下载组件。思考到平安的问题,这里抉择禁用匿名拜访。
装置实现后如下图:
能够应用上面的命令删除装置的 nexus 相干的资源:
# kubectl delete -f nexus-deploy.yaml
deployment.apps "nexus3" deleted
persistentvolumeclaim "nexus-data-pvc" deleted
service "nexus3" deleted
三. 应用 helm 装置 nexus
能够去到 helm 官网包治理仓库查找须要装置的利用。
helm 包治理地址:https://artifacthub.io/
这里我抉择装置下图所示的 nexus:(能够依据本人的需要抉择装置 star 比拟多,更新比拟频繁的 chart)
上面将依据文档阐明进行装置:
应用上面的命令增加 helm 仓库:
helm repo add sonatype https://sonatype.github.io/helm3-charts/
应用上面的命令更新仓库:
helm repo update
应用上面的命令搜寻 nexus:
helm search repo nexus
应用上面的命令下载 chart 到本地:
helm pull sonatype/nexus-repository-manager
下载下来的是一个压缩包,能够通过 tar -zxvf
命令解压,依据须要批改其中的 values.yaml
文件,批改实现后能够通过上面的命令装置 nexus:
helm install sonatype-nexus ./
如果不须要自定义配置,能够间接应用上面的命令装置:
helm install nexus-rm sonatype/nexus-repository-manager
四. nexus 的根本配置及应用
1. nexus 配置阐明
点击左侧 Repositories 按钮,能够看到下图所示的仓库内容:
仓库阐明:
Name 列
- maven-central:maven 地方库,默认从
https://repo1.maven.org/maven2/
拉取 jar。 - maven-releases:私库发行版 jar。
- maven-snapshots:私库快照版(调试版本)jar。
- maven-public:仓库分组,把下面三个仓库组合在一起对外提供服务,在本地 maven 根底配置
settings.xml
中应用。
Type 列(Nexus 默认的仓库类型有以下四种):
- group(仓库组类型):又叫组仓库,用于不便开发人员本人抉择仓库以及设置仓库的程序;
- hosted(宿主类型):外部我的项目的公布仓库(外部开发人员公布 jar 包寄存的仓库);
- proxy(代理类型):从近程地方仓库中寻找数据的仓库(能够点击对应的仓库的 Configuration 页签,其中
Remote Storage Location
属性的值即被代理的近程仓库的门路); - virtual(虚构类型):虚构仓库(这个根本用不到,重点关注下面三个仓库的应用);
2. 创立自定义公有仓库
自定义发行版(release)私库
点击 Create repository
创立自定义发行版(release)私库,抉择 maven2 (hosted)
,如下图所示:
自定义仓库配置如下:
次要配置如下几项内容:
Name:自定义名称,必须惟一,通常发行版仓库以 xxx-release
结尾,快照版仓库以 xxx-snapshots
结尾
Version policy:
- Release 个别是发行版的 jar
- Snapshot 个别是快照版的 jar
- Mixed 混合的
Deployment policy:Allow redeploy
其余的配置放弃默认即可。
自定义快照版(snapshot)私库
创立快照版(snapshot)私库和下面的一样,只须要将 Name 批改为 xxx-snapshots
,Version policy
批改为 Snapshot
,如下图所示:
自定义代理(proxy)仓库
默认从 https://repo1.maven.org/maven2/
拉取 jar,因为网络的起因常常导致无奈下载相干的资源,所以这里介绍配置阿里云的 maven 仓库代理。
阿里云 maven 仓库代理配置:https://maven.aliyun.com/mvn/…
创立代理仓库:
配置内容如下图:
配置阐明:
Name:仓库的名称必须惟一,这里配置为 aliyun-proxy
Version policy:Release
Remote storage:近程仓库地址,这里配置阿里云 maven 仓库地址:https://maven.aliyun.com/repository/public
自定义 group 仓库的程序
能够应用默认的 maven-public
,也能够自定义一个 maven2 (group)
类型的仓库进行设置,这里抉择自定义一个maven2 (group)
类型的仓库,不便学习了解。
配置如下图:
3. 创立 nexus 用户
五. maven 配置 nexus 阐明
点击后面定义的 maven2 (group)
查看其 URL 地址,如下图所示:
1. 在 settings.xml 文件中配置(全局无效)
关上 maven 的配置文件(windows 机器个别在 maven 装置目录的 conf/settings.xml),在 <mirrors></mirrors>
标签中增加 mirror 子节点,复制下面的地址,在 settings.xml
文件中增加如下内容:
<servers>
<!-- 这里配置 nexus 的认证信息,留神这里的 id 须要和 mirros 中的 id 雷同才可能匹配认证 -->
<server>
<id>my-maven</id>
<username>test</username>
<password>maven123456</password>
</server>
</servers>
<mirrors>
<mirror>
<id>my-maven</id>
<!--mirrorof 配置为 * 时,所有的申请都走这个 mirror 的 url,mirrorof 配置是某个 repositoryid 时,若构建找不到,则会到 maven 默认地方仓库去获取的。-->
<mirrorOf>*</mirrorOf>
<name> 自定义公有仓库 </name>
<url>http://localhost:8081/repository/my-group/</url>
</mirror>
</mirrors>
配置实现之后,能够在 idea 中指定这个 settings.xml
文件,如下图所示:
当指定配置文件之后,能够看到 idea 从 nexus 公有仓库中下载 jar 包:
去到 nexus 仓库中查看仓库内容,如下图所示:
2. 在 pom.xml 文件中配置公有仓库地址(我的项目无效)
在 pom.xml
中 repositories
标签的作用是用来配置 maven
我的项目的近程仓库,示例如下:
<repositories>
<repository>
<!-- 定义仓库 id , 必须惟一,须要 server 中的 id 对应,以便认证 -->
<id>my-maven</id>
<!-- 仓库形容 -->
<name> 自定义公有仓库 </name>
<!-- 仓库地址 -->
<url>http://localhost:8081/repository/my-group/</url>
<!-- 是否能够从这个仓库下载 releases 版本的构件,默认为 true-->
<releases>
<enabled>true</enabled>
</releases>
<!-- 是否能够从这个仓库下载 snapshots 版本的构件,默认为 true
禁止从公共仓库下载 snapshot 构件是举荐的做法,因为这些构件不稳固
-->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
倡议在 settings.xml 文件中配置公有仓库地址,这样所有我的项目都能够应用那个地址。
3. 公布本地 jar 包到 nexus 仓库
查看自定义的 snapshot 仓库,目前没有相干 jar 包资源,上面如何将本地 jar 包公布到公有仓库。
在 pom.xml 文件中增加如下配置:
<distributionManagement>
<repository>
<!-- 定义仓库 id , 必须惟一,须要 server 中的 id 对应,以便认证 -->
<id>my-maven</id>
<!-- 仓库形容 -->
<name> 自定义发行版仓库 </name>
<!-- 仓库地址 -->
<url>http://localhost:8081/repository/my-release/</url>
</repository>
<snapshotRepository>
<!-- 定义仓库 id , 必须惟一,须要 server 中的 id 对应,以便认证 -->
<id>my-maven</id>
<!-- 仓库形容 -->
<name> 自定义快照版仓库 </name>
<!-- 仓库地址 -->
<url>http://localhost:8081/repository/my-snapshots/</url>
</snapshotRepository>
</distributionManagement>
执行如下命令公布我的项目到 nexus 仓库:
mvn clean deploy
构建胜利之后能够查看 nexus 仓库内容如下:
这里有一点值得注意的中央,如何将 jar 包公布到 release 仓库?
其实非常简单,只须要将 <version>1.0.0-SNAPSHOT</version>
中的 1.0.0-SNAPSHOT
改为 1.0.0
即可,当再次执行 mvn clean deploy
则会将 jar 包公布到 release 仓库中了。
还能够间接通过 nexus 控制台上传 jar 包到公有仓库: