一, 背景
作为 DevOps 交付流水线的开发者, 为支持 CI/CD 中各项任务的自动化, 都需要依赖多种包管理工具来下载各种相关的工具, 比如针对产生最终交付件的构建过程, 就需要在构建流程的第一步, 自动地把相关工具, 如 Curl,wget,Maven,Gradle,NPM 等等, 下载到 CI 服务器. 这些工具的下载, 通常都需要依靠对应的公网服务器和包管理工具来支持. 而这样通过公网来下载工具, 有时会遇到稳定性的问题, 也就是所谓的环境问题, 导致工具下载失败, 进而导致构建任务的失败. 因此, 我们需要引入新的技术来克服这些问题, 保证工具包下载的稳定和可靠.
二, 工具包管理的痛点 -- 缺乏稳定性
通常, 我们会使用各种各样的包管理工具来帮助我们下载和管理这些工具包, 如 Windows 上的 Chocolatey,Mac/Linux 上的 Homebrew, 还有 NPM,Yum,Debian,Docker 等等. 可是, 有时我们通过这些包管理工具来下载工具包时, 会碰到意外的 5xx 服务器错误. 而更多的时候, 通过这些包管理工具来下载会非常的慢. 这些问题在我们使用自动化构建工具 (如 Travis CI,Jenkins,GitLab CI, 等等) 来实现持续集成 CI 的时候, 会被成千上百倍地放大. 一种解决办法就是在碰到这些环境问题时, 通过手动运行构建的方式进行补救, 当然, 这只是指标不治本. 同时, 在网络访问有限制的时候, 如很多金融企业都会采用的网络隔离, 根本不可能去下载这些公网服务器上的工具包.
三, 解决方案 -- 使用 JFrog Artifactory 的远程仓库
JFrog Artifactory 作为全语言制品仓库, 其远程仓库可以作为公网服务器的本地代理和缓存. 当我们通过其远程仓库来下载所需的工具包时, Artifactory 首先检查在本地的缓存中是否已经存在. 如果有, 直接返回该工具包; 如果没有, Artifactory 将会代理到公网服务器去下载相应的工具包, 并缓存到本地, 以供后续的下载使用.
利用 Artifactory 的远程仓库作为下载前述工具包的代理和缓存, 能够使得 DevOps 流程中的各个环节, 如前面描述的持续集成流程, 更加的迅速和稳定. 在有网络隔离要求的环境中, 如金融企业的研发 / 生产环境, Artifactory 可以帮助技术人员建立自己的企业级单一可信源.
下面, 我们将通过示例为大家一一展示, Artifactory 的远程仓库是如何为不同种类的工具包提供服务的.
四, 示例一 --Chocolatey
当使用 Choco 为 Windows 系统下载 Gradle 的时候, 我们经常会碰到类似下面这样的 503 错误, 从而导致构建失败:
解决的方法: 我们在 Artifactory 里定义一个 Nuget 类型的远程仓库, 利用它作为通过 Choco 包管理工具下载的来源.
第一步: 配置 Artifactory 远程仓库
在 Artifactory 里创建一个 Nuget 类型的远程仓库, 其主要参数如下:
. 仓库名: choco
. Url: https://chocolatey.org/
第二步: 安装 Choco 包
. 用匿名安装的命令
choco install <package-name> -s <artifactory-url>/API/nuget/choco
. 使用带用户认证的方式
- choco install <package-name> -s <artifactory-url>/API/nuget/choco
- -u <artifactory-user> -p <artifactory-password>
五, 示例二 --Homebrew
和 Chocolatey 类似, 也可以用 Artifactory 来支持 Brew 的下载:
第一步: 配置 Artifactory 远程仓库
在 Artifactory 里创建通用 (Generic) 类型的远程仓库:
. 仓库名: homebrew
. Url: https://homebrew.bintray.com/
第二步: 设置 "HOMEBREW_ARTIFACT_DOMAIN" 环境变量
. 匿名访问:
set HOMEBREW_ARTIFACT_DOMAIN=<artifactory-url>/homebrew
. 带用户认证的访问:
set HOMEBREW_ARTIFACT_DOMAIN=<artifactory-user>:<artifactory-password>@<artifactory-url>/homebrew
第三步: 安装
之后再通过 brew install 命令安装, 就会访问 Artifactory 的本地缓存了.
六, 示例三 --Yum
本节将介绍如何利用 Artifactory 的远程仓库来使用 Yum 下载 RPM 包.
第一步: 配置 Artifactory 远程仓库
在 Artifactory 里创建一个 RPM 类型的远程仓库:
. 仓库名: yum
. Url:http://mirror.centos.org/centos/<version>/os/<architecture>;
o 例如: http://mirror.centos.org/centos/7.6.1810/os/x86_64
第二步: 创建 yum 的配置
创建下述文件:/etc/yum.repos.d/artifactory
. 匿名访问时, 文件内容为:
- [artifactory]HERE name=artifactory
- baseurl=https://<artifactory-url>/yum https://
/yum - enabled=1 gpgcheck=0
. 带用户认证时, 文件内容为:
- [artifactory] name=artifactorybr/>baseurl=https://<artifactory-user:<artifactory-password>@<artifactory-url>/yum
- enabled=1 gpgcheck=0
之后正常使用 yum 命令就可以从 Artifactory 的本地缓存下载 RPM 包了.
七, 示例四 --Docker
本节将介绍如何利用 Docker 命令从 Artifactory 的远程仓库来下载 Docker 镜像.
第一步: 配置 Artifactory 远程仓库
在 Artifactory 里创建 Docker 类型的远程仓库:
. 仓库名: docker
. Url: https://registry-1.docker.io/
第二步: 登录
用下述命令登录 Artifactory 的 Docker 仓库:
Docker login <your docker domain>
其中 < your docker domain > 的写法可以参考 Artifactory 中 docker 仓库对应的 "Set Me Up" 显示的设置.
第三步, 拉取镜像
执行下述命令, 从 Artifactory 的缓存拉取 Docker 镜像:
docker pull <your docker domain>/<docker image>:<docker tag>
当然, 针对 Docker 应用, 你可以使用 JFrog 提供的免费版镜像中心 --JCR(JFrog Container Registry,https://jfrog.com/container-registry/), 来管理自己的 Docker 镜像.
八, 总结
在 DevOps 流程当中, 我们需要下载很多工具包, 来支持整个流程的自动化运转. 然而. 直接从外网下载这些工具包, 经常会碰到环境问题, 进而影响整个 DevOps 流程的效率和可靠性.
Artifactory 通过其远程仓库的设置和全语言制品支持的能力, 能够帮助我们建立各种工具包的本地源, 从而使得 DevOps 的流程更加迅速和稳定. 本文还列出了几种典型类型工具包的配置方法.
更多精彩内容可以专注我们的在线课堂
微信搜索公众号: jfrogchina 获取课程通知
?
来源: http://www.bubuko.com/infodetail-3487942.html