您的位置 首页 php

获取自己的二进制存储库的简单方法

如果您不想将工件上传到公共存储库,或者如果您在未连接到公共存储库的私有网络上工作,则需要能够将依赖项离线存储在私有存储库中并在本地推送或拉取它们。

根据维基百科,二进制存储库管理器 (BRM)是“一种软件工具,旨在优化软件开发中使用和生成的二进制文件的下载和存储”,例如 .jar、.tar 或 .zip 档案。作为大多数DevOps 工具链的关键组件,BRM 位于构建管道之后。这就是为什么它有时被称为“构建存储库”、“工件存储库”或“管道状态存储库”的原因。

传统的DevOps 管道需要自动验证、测试、打包和版本化到工件(二进制文件)中的源代码。然后,工件必须存储在源代码存储库之外,并可供持续交付管道的后续阶段使用。作为管理二进制文件和依赖项的中心点,以及用于构建内部开发软件促销的集成库,BRM 应该托管这些工件。

图 1. 普通软件开发团队的交付管道

几乎任何规模的软件项目都需要将其二进制工件保存在存储库中,以便程序员或确保持续集成 (CI)、交付 (CD) 和部署 (CD)的工具能够访问它们。由于管理存储库的软件质量很重要,因此 BRM 应满足以下要求:

  • 可集成性——每种编程语言都有大量的构建自动化工具,例如用于 Java 的 Maven、用于 JavaScript 的 Npm 或用于 Ruby 的 Rake。还有很多持续集成工具,比如 Jenkins 或 Travis。由于自动化是 DevOps 最重要的方面,因此预计每个或大部分都有插件,从而能够与 BRM 无缝集成。
  • 可用性——工件是软件开发过程的重要组成部分,它们必须在需要时立即可供程序员或构建工具使用,甚至没有微小的延迟,并以尽可能快的速度交付。
  • 可扩展性——大多数构建工件都是大型二进制文件;其中一些可能大于 1Gb,例如 Docker 映像或 .war(生产就绪的 Java 档案)。BRM 必须能够维护大型数据集,几乎没有大小限制。
  • 可靠性——必须尽可能排除因软件或硬件故障而损坏数据的能力。

Artipie

Artipie 是一个免费的二进制工件管理工具。Artipie 不仅仅是一个二进制工件 Web 服务器——它是一个工件管理构造函数,它包含许多内置在服务器组件中的组件。这是一个开源项目,始于 2020 年,并且正在积极发展。

所有 Artipie 组件均基于反应式、异步、非阻塞和背压流和原则,使 Artipie 能够以少量内核线程承受繁重的工作负载。

Artipie 架构由 3 个基本部分组成:

  1. Artipie HTTP 引擎
  2. 存储库适配器
  3. 存储

图 2. Artipie 结构

Artipie HTTP 引擎

Artipie 引擎是一个 Java 应用程序,它公开了一个用于存储库访问和管理操作的 HTTP 端点。它将 HTTP 请求路由到存储库适配器并提供身份验证机制。Artipie HTTP 引擎基于Vert.x和RxJava框架构建,通过异步、反应式和非阻塞操作为项目提供轻量级的灵活性和可扩展性。

Artipie 上传操作最常见的数据流如下:客户端正在向服务器发送一些二进制工件,服务器会找到负责的存储库适配器来处理请求;存储库适配器将流保存到存储;完成后,它会更新存储库的元数据(某些存储库的工作方式不同,例如,Docker 使用元数据作为路径)。

图 3. 使用 S3 实现存储的 Artipie Maven 存储库的上传操作

存储库适配器

存储库适配器是独立项目,旨在实现 API 以与特定包类型(npm、maven 等)的存储库客户端和元信息生成层进行交互。Artipie 引擎使用适配器来提供 BRM 功能。每个存储库适配器都封装存储 API 以访问二进制 blob 和元数据文件。

Artipie 支持以下类型的存储库:

  • Docker – 用于镜像的私有 Docker 注册表。
  • Maven – Java、Kotlin、Groovy、Scala、Clojure 工件和各种类型的依赖项,如 .jar、.war、.klib 等。
  • NPM – JavaScript 代码共享和包存储。
  • PyPI – Python 包索引。
  • Anaconda – 为 Python、R、Lua、C、C++ 等构建数据科学包。
  • RPM – 用于 RHEL、PCLinuxOS、Fedora、AlmaLinux、CentOS、openSUSE、OpenMandriva、Oracle Linux 等的 .rpm 软件包存储库。
  • Gem – Ruby 的 RubyGem 托管服务.
  • Go – Go 包裹存储。
  • 文件(二进制)存储 – 托管您喜欢的任何文件。
  • Helm – Helm 图表存储库。
  • NuGet – .NET 包的托管服务。
  • Debian – 基于 Debian 的 Linux 发行版的软件包存储库:Ubuntu、MX Linux、Mint、Raspberry Pi OS、Parrot OS 等。
  • Composer – PHP 包的包源。

贮存

存储库适配器将上传和创建的二进制文件放置在存储中。Artipie 具有抽象存储,它提供了对物理数据存储系统的抽象。简单性使得为几乎任何数据存储系统实现接口变得容易。它有两个主要操作:从存储中放入和获取项目以及一些附加功能,例如检查项目是否存在、列出存储项目或获取项目元数据。

目前,有以下存储实现:

  1. 文件系统存储
  2. Redis 存储
  3. 基于 S3 的存储

抽象存储还提供了一个接口,可以实现该接口以支持您需要的任何类型的存储。

开始使用 Artipie

使用 Artipie 有两种选择:

  • 使用 Docker Compose 运行 Artipie Docker 映像
  • 在 JVM 上运行 Artipie jar 存档

我将展示一个简单的示例,说明如何使用 Docker Compose 在本地运行 Artipie,并将其配置为 Windows 机器上 Docker 映像的存储库。

准备中

要运行 Artipie,您需要安装Docker,然后您可以简单地克隆GitHub 存储库,并使用路径上的示例 C:\ ,或按照以下步骤操作:

  1. 为 Artipie 项目创建一个文件夹(例如 C:\artipie
  2. 为 Artipie 配置创建一个文件夹(例如 C:\artipie\config ),并将包含 Artipie 服务器配置的 yml 文件放在该文件夹中。在我的示例中,该文件称为 artipie.yml . 您必须指定 Artipie 将找到所有存储库配置的路径。我将 Docker 存储库的配置路径指定为,因为在第 4 步中进行设置时 var/artipie/repo ,我将文件夹从本地 Windows 机器安装 C:\artipie\repo 到 Artipie Docker 容器中的目录。
 meta:
storage:
type: fs
path: /var/artipie/repo #path to repository configurations
  layout: flat  

3.为存储库配置文件(例如 C:\artipie\repo )创建一个文件夹,然后将包含存储库配置的 yml 文件放入该文件夹。此文件的名称将是要创建的存储库的名称。例如,文件将被命名 my-docker.yml ,存储库将相应地命名为 my-docker 。要使用 FileStorage 类型配置存储,设置 Artipie 将存储所有项目的路径就足够了。系统必须具有读写权限才能在此路径上创建文件。在我的示例中,路径将是 /var/artipie/images .

 meta:
  storage:
    type: fs
    path: /var/artipie/repo #path to repository configurations
  layout: flat  

4.docker-compose.yml 使用以下说明 创建文件:

 version: "3.3"
services:
  artipie:
    image: artipie/artipie:latest
    container_name: artipie
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - /C/artipie/repo:/var/artipie/repo # mount folder with repository configuration
      - /C/artipie/config:/etc/artipie/ # mount folder with Artipie server configuration  

Launch

现在,打开 CLI,转到包含文件的 docker-compose.yml 文件夹并使用控制台命令启动 Artipie docker-compose up

在 CLI 中,我们看到 Artipie 已经在端口 8080 上启动并找到了一个存储库配置文件 my-docker.yml

 C:\>cd C:/artipie
C:\artipie>docker-compose up
[+] Running 2/2
 - Network artipie_default  Created                              0.7s
 - Container artipie        Created                              0.1s
Attaching to artipie
…
artipie  | [INFO] main com.artipie.VertxMain - Artipie was started on port 8080
artipie  | [INFO] ForkJoinPool.commonPool-worker-1 com.artipie.asto.fs.FileStorage - Found 1 objects by the prefix "" in /var/artipie/repo by /var/artipie/repo: [my-docker.yml]
…  

用法

在推送任何镜像之前,让我们从 Docker Hub 中拉出一个现有的镜像。我的选择是hub image。使用以下命令拉取 alpine 映像 docker pull alpine

 C:\artipie>docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
Digest: sha256:686d8c9dfa6f3ccfc8230bc3178d23f84eeaf7e457f36f271ab1acc53015037c
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest  

使用下一个命令,我们从 alpine 映像创建名为 myfirstimage 的 docker映像,以将其推送到我们的 Artipie 存储库:

docker image tag alpine localhost:8080/my-docker/myfirstimage . 检查 docker 是否有 2 个image: alpine localhost:8080/my-docker/myfirstimage, 使用命令 docker images ::

 C:\artipie>docker image tag alpine localhost:8080/my-docker/myfirstimage
C:\artipie>docker images
REPOSITORYTAGIMAGE IDCREATEDSIZE
localhost:8080/my-docker/myfirstimagelateste66264b987777 weeks ago5.53MB
alpinelateste66264b987777 weeks ago5.53MB
  

现在,我们必须使用默认用户 artipie|artipie 登录我们自己的注册表,因为 Docker 注册表仅支持授权用户 docker login –username artipie localhost:8080

 C:\artipie>docker login --username artipie localhost:8080
Password: artipie
Login Succeeded  

最后,我们可以使用以下命令将我们的image推送到存储库 docker push localhost:8080/my-docker/myfirstimage

 C:\artipie>docker push localhost:8080/my-docker/myfirstimage
Using default tag: latest
The push refers to repository [localhost:8080/my-docker/myfirstimage]
24302eb7d908: Pushed
latest: digest: sha256:4ff3ca91275773af45cb4b0834e12b7eb47d1c18f770a0b151381cd227f4c253 size: 528  

为了检查结果,我们可以使用命令附加到容器: docker exec -it artipie bash 然后 /var/artipie/images/my-docker 找到带有子文件夹和 blob 文件的 docker 文件夹。

 C:\artipie>docker exec -it artipie bash
bash-4.4$ cd /var/artipie/images/my-docker/
bash-4.4$ ls
docker  

在从我们的存储库中提取image之前,请使用以下命令从本地 docker image中删除image: docker image rm localhost:8080/my-docker/myfirstimage .

验证image是否已删除,并且我们只有 1 个image( alpine docker images ::

电源外壳

 C:\artipie>docker image rm localhost:8080/my-docker/myfirstimage
Untagged: localhost:8080/my-docker/myfirstimage:latest
Untagged: localhost:8080/my-docker/myfirstimage@sha256:4ff3ca91275773af45cb4b0834e12b7eb47d1c18f770a0b151381cd227f4c253

C:\artipie>docker images
REPOSITORYTAGIMAGE IDCREATEDSIZE
alpinelateste66264b987777 weeks ago5.53MB  

image也可以拉出: docker pull localhost:8080/my-docker/myfirstimage . 执行命令后,再次检查我们是否有 2 个image( alpine localhost:8080/my-docker/myfirstimage docker images

 C:\artipie>docker pull localhost:8080/my-docker/myfirstimage
Using default tag: latest
latest: Pulling from my-docker/myfirstimage
Digest: sha256:4ff3ca91275773af45cb4b0834e12b7eb47d1c18f770a0b151381cd227f4c253
Status: Downloaded newer image for localhost:8080/my-docker/myfirstimage:latest
localhost:8080/my-docker/myfirstimage:latest

C:\artipie>docker images
REPOSITORYTAGIMAGE IDCREATEDSIZE
localhost:8080/my-docker/myfirstimagelateste66264b987777 weeks ago5.53MB
alpinelateste66264b987777 weeks ago5.53MB  

结论

二进制存储库是任何 DevOps 管道中的关键元素,各种项目需要各种类型的二进制存储库来存储工件。几乎每个编程语言生态系统都有自己的工件存储库。Artipie 为一个产品中的主要包装格式提供了广泛的适配器,从而可以从一个地方管理所有工件。Artipie 正在迅速成长和发展,除了 File、Redis 和 S3 存储之外,它还提供了添加自己的二进制数据存储实现的能力。

Artipie 是存储二进制工件的好选择,因为它易于配置。它支持多种类型的存储库。作为开源产品,它完全免费使用。

文章来源:智云一二三科技

文章标题:获取自己的二进制存储库的简单方法

文章地址:https://www.zhihuclub.com/151934.shtml

关于作者: 智云科技

热门文章

网站地图