【DevOps工具篇】 成果物发布管理:Nexus及安装方法
@[TOC]
推荐超级课程:
在快速变化的计算机程序制作世界中,保持事物的有序对于顺畅运行至关重要。为此,创造了成果物(仓库)管理器。仓库管理器用于存储构建文件,并公开API以推送和拉取构建,这样我们可以轻松地将其与Jenkins等自动化工具集成。 Nexus就是在这方面提供帮助的大玩家之一。在这个博客系列中,我们将讨论Nexus——它是什么,以及它与其他成果物管理器的不同之处,并将逐步向您展示如何在Linux和Docker容器上设置它。
什么是成果物?
简单来说,可以将其视为运行构建命令后得到的副产品。如果您使用过React框架,您运行过npm run build命令,然后立即得到一个构建文件夹,那就是一个成果物。它可以是任何格式,可能是zip格式,.jar格式,或其他任何格式。它只是我们在开发后得到的文件夹,可以轻松地从一台服务器传送到另一台服务器。
什么是Nexus?
Nexus是一个成果物管理器,这意味着它帮助我们保存、检索成果物,并在我们需要时对它们进行备份。Nexus由Sonatype构建,是一个非常流行的成果物管理器,它还公开了API端点,这使得我们能够轻松地将其与Jenkins或GitHub Action等自动化工具集成。它还为我们提供了一个UI界面,以便我们可以轻松地与之交互。
Nexus与其他成果物管理器的比较
现在问题来了,为什么选择Nexus?还有许多其他管理器,如npm、Maven中央仓库和Dockerhub,这些都是广泛使用的流行管理器。那么为什么我们需要Nexus呢?
现在有许多原因使得公司更愿意使用Nexus,我将尝试列出其中的一些:
- 如果您在一家大公司工作,需要维护多种类型的程序,您需要为每一种单独维护一个仓库管理器。您不能将Node应用程序推送到Dockerhub,也不能将Java应用程序推送到npm。这些管理器只服务于单一类型,您不能在那里保存其他格式。但是Nexus,您可以处理各种程序:Node应用程序、Docker镜像、Kubernetes的Helm图表、Java应用程序等等。查看所有支持的格式类型,请访问这个链接https://help.sonatype.com/repomanager3/nexus-repository-administration/formats 。
- 许多公司不信任第三方如npm或Dockerhub来托管他们的代码。因此,他们更愿意设置自己的仓库管理器,在内部共享成果物,而不对外部开放。
- 使用Nexus,您还可以设置带有内置缓存系统的代理仓库。例如,公司的软件开发人员尝试为其程序安装依赖项。现在您的Nexus管理器没有所有请求的包,所以Nexus将向您设置的代理的实际仓库管理器(如npm或Dockerhub)发出请求,并获取所有这些包并缓存它们。下次您将直接从Nexus获取它们,这将节省大量带宽。
安装Nexus
在Linux系统(Ubuntu 22.04)上
作为先决条件,我们需要Java OpenJDK和JRE v8。幸运的是,我们不需要去其他地方安装这个,默认的Ubuntu仓库提供了多个Java版本,所以现在您将从Ubuntu仓库安装Java OpenJDK和JRE v8。 首先运行以下命令更新和刷新仓库包索引。
sudo apt update
sudo apt install openjdk-8-jdk
现在运行上述命令安装openjdk-8-jdk。当被询问时按Y继续安装。
java -version
如果安装顺利,您将得到包含Java版本的 result,否则您将在该命令上得到错误。 现在我们将从官方文档下载Nexus二进制文件。 https://help.sonatype.com/repomanager3/product-information/download 现在对于这个博客,我使用的是3.41版本,但您可以将它更改为您撰写博客时的最新版本,当我撰写这篇博客时是3.62。我们将使用wget工具下载。成功完成后,您可以在运行命令的文件夹中看到二进制文件。
wget https://download.sonatype.com/nexus/3/nexus-3.41.1-01-unix.tar.gz
解压它。
tar xzf nexus-3.41.1-01-unix.tar.gz
在opt文件夹中创建一个名为Nexus的文件夹,并将解压的版本放在那里是一个好习惯。运行以下命令来执行此操作。
mv nexus-3.41.1-01 /opt/nexus
mv sonatype-work /opt/
因此,在解压该二进制文件时,我们实际上会得到2个文件夹.
创建服务用户
现在这是一个可选步骤,不是最佳实践的是用root用户运行所有内容。因此,我们需要为Nexus创建一个用户,并使用该用户运行此程序。我们需要给这个用户必要的文件权限。 为了创建用户,请运行以下命令:
sudo useradd -s /bin/bash nexus
sudo passwd nexus
第一个命令将为您创建一个nexus用户,然后运行第二个命令,它将要求您为该用户设置新密码。
chown -R nexus:nexus /opt/nexus /opt/sonatype-work
以上命令将设置新创建的目录的权限给nexus用户。 现在我们需要告诉Nexus我们需要用哪个用户运行这个Nexus服务,默认设置为root。 使用nano编辑器或您选择的任何其他编辑器打开nexus.rc。
sudo nano /opt/nexus/bin/nexus.rc
run_as_user="nexus"
取消注释上述选项,并在前面写上nexus,如上所示。 您还可以设置maxHeap设置,但对于初学者来说这并不那么重要。 现在最后运行以下命令以运行Nexus服务。
/opt/nexus/nexus-3.41.1-01/bin/nexus start
您现在可以在端口8081访问您的Nexus UI。
在容器中运行Nexus
这是我运行Nexus的过程,我不喜欢在系统上安装所有东西,所以让我们快速查看如何做到这一点。 现在在Docker上运行Nexus非常简单,相信我,这是一个两步命令的过程,您只需要确保在您想要运行Nexus的系统上安装了Docker。然后运行以下命令,让Docker运行一个Nexus容器。
docker volume create --name nexus-data
以上命令将创建一个卷,Nexus将保存所有数据。
docker run -d -p 8081:8081 --name nexus -v nexus-data:/nexus-data sonatype/nexus3
这个命令将使用该卷启动一个容器,在这里我们定义了端口8081:8081,这样我们就可以在机器上访问它了。 搞定!您的容器正在运行,您现在可以转到端口8081来访问Nexus UI。