工欲善其事,必先利其器——DevOps中如何管理工具包

一、背景

作为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&gt;
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
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 获取课程通知

?

原文地址:https://blog.51cto.com/jfrogchina/2483973

时间: 2024-10-19 02:15:26

工欲善其事,必先利其器——DevOps中如何管理工具包的相关文章

[2]工欲善其事必先利其器-------UML中的几种常见关系(二)

目录 1.UML类图中几种常见的关系 经过(一)中介绍,我选择的是StarUML作为UML的学习工具,个人喜好,至少在功能上能够满足我现在的需求, 在介绍StarUML的使用之前首先介绍下UML中几种常见的关系: UML类图中常见的关系按照关系的强弱可分为:泛化 ,实现 ,组合, 聚合 , 依赖这几种 1.泛化关系:是一种继承关系,也就是XX is a kind of XX 描述. 2.实现关系:是一种类与接口的关系. 3. 组合关系:是一种强关联,属于一种整体与部分的关系,但是部分不能离开整体

工欲善其事必先利其器--------搭建Android平台

工欲善其事必先利其器--------搭建Android平台 1.1            安装JDK 在Eclipse的开发过程中需要JDK或JRE的支持,否则会报错. (1)     下载JDK(建议去JDK官网下载)[Java SE Downloads 中的Java platform(JDK)](最好不要安装在带空格的目录下) 图1-1 JDK下载 (2)     配置环境变量(此步骤很重要,过程可参照网上步骤) JAVA_HOME:  C:\Program Files\Java\jdk1.

转:【工欲善其事必先利其器】—Entity Framework实例详解

开始本篇文章之前,先说一下Entity Framework 6 Alpha1在NuGet中已可用,原文链接http://blogs.msdn.com/b/adonet/archive/2012/10/30/ef6-alpha-1-available-on-nuget.aspx 俗话说:“工欲善其事必先利其器”,在深入讲解Entity Framework之前,先准备一下开发工具以及前期的配置. 一.开发工具 开发工具基本略过,这里说一下,我使用的是Visual Studio 2012,Entity

工欲善其事必先利其器—成绩登统系统

    工欲善其事必先利其器.谓工匠想要使他的工作做好,一定要先让工具锋利.比喻要做好一件事,准备工作非常重要.语出孔子·<论语·卫灵公>:子贡问为仁.子曰:"工欲善其事,必先利其器.居是邦也,事其大夫之贤者,友其士之仁者." 也就是我们通常所说的磨刀不误砍柴工.那么体现在系统或者软件开发上磨刀就是前期的准备工作,也就是各个文档编写以及原型的画出与完善. 1.      第一阶段:需求调研     毛主席说过,"没有调查就没有发言权":一切的需求来自于实

单片机开发——01工欲善其事必先利其器(Keil软件安装破解)

本文是博主<单片机开发>博客第一篇文章,主要讲述51单片机编程软件Keil uVision4的安装及破解过程. 1. Keil uVision4安装包文件 PATH:链接:https://pan.baidu.com/s/1IEUUhND_0F_6pXVbhlJamQ 密码:dqrd 安装包内容:安装文件.破解机.汉化包(不建议汉化). 2. Keil uVision4软件安装 双击安装包,一直"NEXT"到最后,选择Finish,到这里软件的安装过程完成. 3. Keil

如何将Azure DevOps中的代码发布到Azure App Service中

标题:如何将Azure DevOps中的代码发布到Azure App Service中 作者:Lamond Lu 背景 最近做了几个项目一直在用Azure DevOps和Azure App Service, 每次都要从零开始搭建从Azure DevOps向Azure App Service发布代码的环境,由于步骤比较繁琐,每次都会忘记其中几个步骤,所以在此总结一下,已备后续再次使用. Azure DevOps和Azure App Service Azure DevOps Azure DevOps

韩非子中的管理故事 -- 明辨人才

原文: 太公望东封于齐,齐东海上有居士曰狂矞.华士昆弟二人者立议曰:"吾不臣天子,不友诸侯,耕作而食之,掘井而饮之,吾无求于人也.无上之名,无君之禄,不事仕而事力."太公望至于营丘,使吏执而杀之,以为首诛.周公旦从鲁闻之,发急传而问之曰:"夫二子,贤者也.今日飨国而杀贤者,何也?"太公望曰:"是昆弟二人立议曰:'吾不臣天子,不友诸侯,耕作而食之,掘井而饮之,吾无求于人也.无上之名,无君之禄,不事仕而事力.'彼不臣天子者,是望不得而臣也;不友诸侯者,是望不得

[转载]对iOS开发中内存管理的一点总结与理解

对iOS开发中内存管理的一点总结与理解 做iOS开发也已经有两年的时间,觉得有必要沉下心去整理一些东西了,特别是一些基础的东西,虽然现在有ARC这种东西,但是我一直也没有去用过,个人觉得对内存操作的理解是衡量一个程序员成熟与否的一个标准.好了,闲话不说,下面进入正题. 众所周知,ObjectiveC的内存管理引用的一种叫做“引用计数“ (Reference Count)的操作方式,简单的理解就是系统为每一个创建出来的对象,(这里要注意,只是对象,NSObject的子类,基本类型没有‘引用计数’)

企业信息化中的管理设计深度探讨研究

管理设计是针对某一类企业进行的,可以说是企业个性化应用的完美体现,但这绝对不是个性化的泛滥.须知任何的企业,其信息化管理是不以管理者的意志为转移的,它不同于经营决策的管理,它必须严格依照基本的管理原理来进行,比如计划方法.订单跟踪.成本核算.预算管理等等,都是严密的信息逻辑支撑的确定性管理方法,只不过由于企业所处行业的不同,所涉及业务有所差异而有所变化而已,这种变化远不足以改变ERP软件的通用性和普遍适用性,而仅仅是要求ERP这个百宝箱中有更多的宝贝而已. 当我们以一种蓦然回首的心态重新审视所从