二进制文件损坏怎么修复

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

根据维基百科,二进制存储库管理器 (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 | main com.artipie.VertxMain - Artipie was started on port 8080 artipie | 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 REPOSITORY TAG IMAGE ID CREATED SIZE localhost:8080/my-docker/myfirstimage latest e66264b98777 7 weeks ago 5.53MB alpine latest e66264b98777 7 weeks ago 5.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 REPOSITORY TAG IMAGE ID CREATED SIZE alpine latest e66264b98777 7 weeks ago 5.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 REPOSITORY TAG IMAGE ID CREATED SIZE localhost:8080/my-docker/myfirstimage latest e66264b98777 7 weeks ago 5.53MB alpine latest e66264b98777 7 weeks ago 5.53MB

结论

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

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

本文【二进制文件损坏怎么修复】由作者: Web服务 提供,本站不拥有所有权,只提供储存服务,如有侵权,联系删除!
本文链接:https://www.cuoshuo.com/blog/4230.html

(0)
上一篇 2023-03-11 08:21:20
下一篇 2023-03-11 08:26:44

相关推荐

  • continue语句只用于循环语句中吗_continue只能用于循环体中

    一般在switch循环遍历是经常用到break的,跳出当前循环。其实break也可以在for循环中使用,来结束当前循环,减少不必要的资源浪费; 网友一: 一、释义不同 1、break:间歇;休息;课间du休息;间断;zhi暂停。 2、continue:持续;继dao续存zhuan在;不断发生;继续做;不停shu地干;朝相同方向走,移动;延伸。 二、读音不同 …

    2023-03-10
    600
  • 程序设计语言_程序设计语言是c语言吗

    一、程序设计语言及其构成 1. 常见的高级程序语言 Fortran: 第一个高级程序设计语言,用于并行计算、科学计算和高性能计算; Lisp:函数式程序语言,用于符号处理、人工智能; PROGLOG:逻辑式语言,建造专家系统、自然语言理解、智能知识库等; SQL:结构化查询语言 2. 通用的程序设计语言 C,C#,C++,JAVA,PHP,Python,Ja…

    2023-03-21
    200
  • hook在编程中是什么意思_flow什么意思

    什么是HOOK技术? 病毒木马为何惨遭杀软拦截? 商业软件为何频遭免费破解? 系统漏洞为何能被补丁修复? 这一切的背后到底是人性的扭曲,还是道德的沦丧,尽请收看今天的专题文章:《什么是HOOK技术?》 上面是开个玩笑,言归正传,今天来聊的话题就是安全领域一个非常重要的技术:HOOK技术。 HOOK,英文意思是“钩子” 在计算机编程中,HOOK是一种「劫持」程…

    2023-03-13
    400
  • 完全二叉树是什么意思_完全二叉树包括满二叉树吗

    1、定义: 二叉树是计算机数据结构的一种,是树形结构的一个重要类型,它的每个节点最多有左右两个子树。往往二叉树的存储结构和算法都相对较为简单,一般的树形结构也可以转化为二叉树的形式,因此二叉树十分重要。 二叉树的两个子树,是不相交的,分别称为左子树和右子树,以及根节点root。当为空时,又称为空二叉树。 2、二叉树的特殊形态 满二叉树:二叉树上只有度为0的节…

    2023-03-12
    300
  • java移位运算有什么作用_java中移位运算符

    按位运算符允许我们操作一个整数主数据类型中的单个“比特”,即二进制位。按位运算符会对两个自变量中对应的位执行布尔代数,并最终生成一个结果。 Java的设计初衷是嵌入电视顶置盒内,所以这种低级操作仍被保留下来了。然而,由于操作系统的进步,现在也许不必过于频繁地进行按位运算。 若两个输入位都是1,则按位AND运算符(&)在输出位里生成一个1;否则生成0。…

    2023-03-10
    300
  • webservice教程java webservice接口开发教程

    webservice简介: Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web…

    2023-03-17
    000
  • dubbo负载均衡策略使用场景(dubbo原理和机制)

    Dubbo 是一款高性能、透明化、轻量级的 Java RPC 框架,致力于提供高性能的RPC远程服务调用方案。 本篇,我重点详解 Dubbo 的原理机制 @mikechen的互联网架构 目录 Dubbo核心功能 Dubbo核心组件 Dubbo的架构设计 Dubbo调用流程 Dubbo核心功能 Dubbo主要提供了3大核心功能:面向接口的远程方法调用,智能容错…

    2023-03-18
    100
  • 数字信号处理PDF第五版 数字信号处理电子版

    时域离散信号 生活中常见的信号为模拟信号,模拟信号等间隔采样得到时域离散信号,时域离散信号便于计算机处理。 一、时域离散信号的三种表示方法 1、集合符号: 2、公式:例 3、图形:例 4、单位脉冲序列的位移加权和: 例: 二、常用典型序列 1、单位脉冲序列 2、单位阶跃信号 3、矩形序列 4、实指数序列 5、正弦序列 6、复指数序列 7、周期序列 注:N为最…

    2023-03-14
    200
  • 制作iso镜像文件的简单方法_怎么生成iso镜像文件

    在日常上班的工作中,有很多小伙伴需要用到光盘,但是有时却会遇到没有光驱的电脑,这该怎么办呢?其实不用担心,小编今天就跟大家分享一个将光盘制作成ISO镜像文件的方法,这样就可以装在U盘里在任何电脑上读取。 百度搜索ImgBurn软件,中文版和英文版都可以,因为操作都不难! 下载好软件之后进行安装,直接选择下一步或者Next即可。安装完之后打开软件界面如下图,然…

    2023-03-21
    000
  • div半透明如何设置(div背景颜色透明度)

    今天遇到一个问题:div边框和背景色随主题色变化,边框和字体不透明,背景半透明(如下图所示) 在网上搜索解决办法发现都是说使用rgba,但是另外一个问题就来了,背景和边框的颜色就没办法改变了,所以只好自己想办法。突发奇想使用伪类完美解决了问题,话不多说,上代码(此处样式部分使用了scss,不懂的请自行百度) <!– html代码 –> &lt…

    2023-03-17
    300

发表回复

登录后才能评论
返回顶部
错说博客上线啦!