Nexus:一站式私有倉(cāng)庫(kù)管理(NuGet、Maven、npm、Docker)
我們?cè)谌粘i_(kāi)發(fā)中經(jīng)常需要使用到私有倉(cāng)庫(kù),比如 dotNET 中的 NuGet、Java 中的 Maven、前端的 npm,還有 Docker 鏡像,每一個(gè)私有倉(cāng)庫(kù)各自管理,維護(hù)起來(lái)比較麻煩,而 Nexus 可以將其統(tǒng)一起來(lái)。
本文將介紹 Nexus 的安裝以及怎樣進(jìn)行 NuGet 、Maven、npm 和 Docker 鏡像的管理。
環(huán)境
Nexus:3.29.2 NuGet:5.5.1 Maven:3.6.3 NPM:6.14.8 Docker:19.03.13 操作系統(tǒng):CentOS 7
安裝
可以使用直接在服務(wù)器進(jìn)行安裝或者使用 Docker 鏡像的方式安裝,本文采用 Docker 鏡像的方式安裝。
1、執(zhí)行下面的命令進(jìn)行容器的構(gòu)建。
docker run -d -p 8081:8081 -p 8082:8082 --name nexus_8081 -v /root/data/nexus:/nexus-data --restart=always sonatype/nexus3
命令中的 -v /root/data/nexus:/nexus-data是將 Nexus 的數(shù)據(jù)目錄映射到本地;nexus 目錄需要給編輯的權(quán)限; 8082 端口的映射目的是為了推送 docker 鏡像。
2、執(zhí)行下面命令開(kāi)放端口。
firewall-cmd --zone=public --add-port=8081/tcp --permanent
firewall-cmd --reload
3、構(gòu)建完后,需要等幾十秒到幾分鐘不等,程序有一個(gè)初始化的過(guò)程,然后訪問(wèn) http://ip:8081 ,可以出現(xiàn)下圖界面:

NuGet
1、在 Repositories 功能中創(chuàng)建 NuGet 的私有倉(cāng)庫(kù) NuGetTest ,倉(cāng)庫(kù)模板選擇 nuget(hosted) 。

2、在 VS2019 中創(chuàng)建一個(gè) NugetTest 的類庫(kù)項(xiàng)目,在項(xiàng)目上點(diǎn)擊右鍵→打包,在項(xiàng)目的 bin/Debug 目錄中會(huì)生成 NugetTest.1.0.0.nupkg 文件。
3、點(diǎn)擊「admin」→「NuGet API Key」,在該功能界面獲取 key ,這個(gè) key 在推送 NuGet 包時(shí)需要用到。

4、將 nuget.exe 程序文件也放到 bin/Debug 目錄中,然后打開(kāi)命令行進(jìn)入到該目錄,執(zhí)行下面命令進(jìn)行包的推送。
nuget.exe push NugetTest.1.0.0.nupkg dab3d4df-1eec-36e0-9b75-09b5b4b0ac41 -source http://10.211.55.6:8081/repository/NuGetTest
推送成功如下圖:

5、在 VS2019 中的 NuGet 包管理器中添加源。

6、在引用時(shí)選擇添加的 NuGetTest 源,如下圖:

Maven
1、在 Repositories 功能中創(chuàng)建 Maven 的私有倉(cāng)庫(kù) MavenTest ,倉(cāng)庫(kù)模板選擇 maven(hosted),Deployment policy 需要設(shè)置為 Allow redeply,否則在推送時(shí)會(huì)報(bào) 400 的錯(cuò)誤。

2、在 Maven 的配置文件 /apache-maven-3.6.3/conf/settings.xml 中的 Servers 節(jié)點(diǎn)添加 Server 配置,如下:
<server>
<id>releases</id>
<username>test</username>
<password>000000</password>
</server>
username 和 password 是在 Nexus 中創(chuàng)建的測(cè)試賬戶; id 需要和 Maven 項(xiàng)目中的 pom.xml 文件中配置的 id 一致。
3、在 IntelliJ IDEA 中創(chuàng)建 Maven 項(xiàng)目 MavenTest,在項(xiàng)目中的 pom.xml 文件中添加如下內(nèi)容:
<distributionManagement>
<repository>
<id>releases</id>
<name>releases</name>
<url>http://10.211.55.6:8081/repository/MavenTest/</url>
</repository>
</distributionManagement>
id:和上面的 settings.xml 文件中的 id 一致即可; url:在 Nenux 中創(chuàng)建的 Maven 倉(cāng)庫(kù)的地址。
4、因?yàn)閭}(cāng)庫(kù)創(chuàng)建的是 Release 版本的,如果 pom.xml 文件的 version 中包含 SNAPSHOT ,需要?jiǎng)h除,否則在推送時(shí)會(huì)報(bào) 400 的錯(cuò)誤。

5、在 IDEA 工具的 Maven 模塊中進(jìn)行 depoly 。

6、推送成功后,在 Nexus 中可以看到如下內(nèi)容:

7、創(chuàng)建一個(gè) spring boot 的項(xiàng)目,并修改 pom.xml 文件,在 dependencies 節(jié)點(diǎn)添加依賴,并添加 repositories 配置,如下:
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>MavenTest</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>releases</id>
<name>releases</name>
<url>http://10.211.55.6:8081/repository/MavenTest/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
8、在 IDEA 中的 build 模塊中進(jìn)行同步就可以將 maven 包拉取到項(xiàng)目中。

NPM
1、在 Repositories 功能中創(chuàng)建 npm 的私有倉(cāng)庫(kù) NpmTest ,倉(cāng)庫(kù)模板選擇 npm(hosted),Deployment policy 需要設(shè)置為 Allow redeply,否則在推送時(shí)會(huì)報(bào) 400 的錯(cuò)誤。
2、使用 vue 創(chuàng)建一個(gè)項(xiàng)目 nexus-test 。
3、使用下面命令進(jìn)行本地注冊(cè),后面的地址為創(chuàng)建的 npm 私有庫(kù)的地址。
npm config set registry http://10.211.55.6:8081/repository/NpmTest/
4、想要將自己的 npm 包推送到私有倉(cāng)庫(kù)中,需要先使用下面的命令進(jìn)行登錄。
npm login –registry=http://10.211.55.6:8081/repository/NpmTest/
5、修改 vue 項(xiàng)目根目錄中的 package.json 文件,將 private 設(shè)置為 false ,版本號(hào) version 根據(jù)需要進(jìn)行修改。
6、在 Nexus 的 Realms 模塊進(jìn)行設(shè)置,將 npm Bearer Token Realm 選到右邊的 Active 欄中,此處不設(shè)置,在推送時(shí)會(huì)出現(xiàn) 401 的錯(cuò)誤。
7、執(zhí)行下面命令進(jìn)行包的推送:
npm publish --registry=http://10.211.55.6:8081/repository/NpmTest
8、創(chuàng)建一個(gè)新的 vue 項(xiàng)目 nexus-test1 來(lái)進(jìn)行私有倉(cāng)庫(kù)的使用,先進(jìn)行倉(cāng)庫(kù)地址的注冊(cè)。
npm config set registry http://10.211.55.6:8081/repository/NpmTest/
9、執(zhí)行 npm install nexus-test 進(jìn)行包的安裝,安裝成功如下圖:

Docker
1、在 Repositories 功能中創(chuàng)建 docker 的私有倉(cāng)庫(kù) DockerTest ,倉(cāng)庫(kù)模板選擇 docker(hosted) 。

勾選 http,設(shè)置端口為 8082 ,此處的端口為創(chuàng)建 Nexus 容器時(shí)設(shè)置的 8082 端口 ; 勾選允許匿名拉取鏡像; 勾選運(yùn)行客戶端通過(guò) API 訪問(wèn)。
2、在 Nexus 的 Realms 模塊進(jìn)行設(shè)置,將 Docker Bearer Token Realm 選到右邊的 Active 欄中。

3、在 CentOS 7 系統(tǒng)中安裝 Docker ,然后再 /etc/docker/ 目錄中創(chuàng)建 daemon.json 文件,內(nèi)容如下:
{
"insecure-registries": ["10.211.55.6:9999"]
}
4、執(zhí)行下面命令進(jìn)行配置的加載。
systemctl daemon-reload
systemctl restart docker
5、在 root 目錄中創(chuàng)建 nexus-docker 目錄,目錄中創(chuàng)建 Dockerfile 文件用來(lái)構(gòu)建一個(gè)新的鏡像,內(nèi)容如下:
FROM nginx:latest
COPY . /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
6、執(zhí)行下面命令進(jìn)行鏡像的構(gòu)建和推送到服務(wù)端。
# 構(gòu)建鏡像
docker build -t nexus-docker .
# 將鏡像 tag 成服務(wù)端的地址
docker tag nexus-docker-test:latest 10.211.55.6:8082/nexus-docker-test:latest
# 進(jìn)行登錄
docker login -u test -p 000000 10.211.55.6:8082
# 推送鏡像
docker push 10.211.55.6:8082/nexus-docker-test:latest
操作成功如下圖所示:

7、使用鏡像的時(shí)候,只要服務(wù)器進(jìn)行了第三步中的地址注冊(cè),就可以使用 docker pull 10.211.55.6:8082/nexus-docker-test:latest 進(jìn)行鏡像拉取。
希望本文對(duì)您有所幫助!
