热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Go语言持续交付流水线

Go语言的依赖管理Go语言发展至今,其依赖管理机制一直被人诟病,从goget到godep,再到现在的VGo。随着Go模块化支持的引入,大家逐渐开始接受由Google主导的VGo作为

Go 语言的依赖管理

Go 语言发展至今,其依赖管理机制一直被人诟病,从 go get 到 go dep,再到现在的 VGo。随着 Go 模块化支持的引入,大家逐渐开始接受由 Google 主导的 VGo 作为其官方依赖管理工具。VGo 顾名思义,Version of Go,就是为解决 Go 的版本化问题。

VGo 是一种语义化(Semantic)的依赖描述方式,在.mod文件中描述模块及其依赖。mod 文件顾名思义就是模块(module)的意思,在 GO 1.11 及以上版本需要通过功能开关GO111MODULE=on 来打开,也就是说默认还是兼容的传统模式,并没有强制用户切换,但后续可能会变成默认打开。

VGo 虽然目前还算不上成熟,但 VGo 已经兼容了原生Go的很多命令,比如 install/build/run 等等,这里值得一提的是原来的tool相关命令也一并兼容了过来,对于原来经常使用 format/vet 等工具来做基础检查的开发者来说,确实还是很贴心友好的。

VGo 的安装很简单,执行 go get -u golang.org/x/vgo ,然后编译其成二进制,export 到环境变量即可。通过 vgo -h 即可查看所支持的命令,我们可以通过一个示例来感受下 VGo 的使用,该示例的链接:https://research.swtch.com/vgo-tour ,这里不再赘述。

Go 语言制品仓库

Go 语言开发通常也是在开源框架或组件的基础上进行的,因此也需要一个Go制品库来为开发团队提供统一的依赖源及构建产出管理。对于开发团队而言,某个开发者的依赖可能来自于外部,也可能来自于内部其他团队,因此制品库还需要能屏蔽这种后端依赖源的易变性,为开发者提供统一不变的 Endpoint。

Go 语言持续交付流水线

目前 JFrog Artifactory 产品提供了Go语言制品仓库的支持,能够满足上述对于依赖解析、制品存储及多团队协同的需求。本文后续的 CI&CD Pipeline 就将采用 Artifactory Go 仓库,站在交付过程的角度看,制品仓库还需要管理持续集成过程,例如构建任务及其历史,制品的元数据(生命周期关键事件及其结果),制品的构建依赖、环境参数等,为线上问题的快速排查提供基础数据保障。

因此,Artifactory 制品仓库不仅仅是只有解析依赖和存储制品这两个基础能力,还需要为实际上线发布提供过程跟踪保障,例如持续集成差异的快速对比。

Go 语言持续交付流水线

Go CI&CD with Jenkins Pipeline

JFrog Artifactory 提供了 CLI 工具,此工具支持 Go 语言单元测试、构建、打包、上传及升级(Promotion)、元数据管理以及质量关卡等 CI&CD Pipeline 全生命周期的标准操作。相对于API 操作更加简单,而且不必暴露认证信息在 Jenkins Pipeline 中,安全性更好。关于Go语言制品仓库的介绍 ,请点击:https://www.jfrog.com/confluence/display/RTF/Go+Registry

一个完整的 Go Jenkins CI&CD Pipeline 应包含的任务如上所述,在 Jenkins Job 定义时采用 GitLab 托管 Jenkinsfile 的方式,一方面保证 Jenkins Job 的高可用性,另一个方面也是确保其变更的可追踪性。

Go 语言持续交付流水线

Jenkins Pipeline 托管在 GitLab 后,任何对 Jenkins Job 的定义的变更都需要通过 Git Commit/ Pull Request / Merge 等步骤来进行,当代码被Merge之后跑一次 CI&CD 的过程以检验 Jenkins Pipeline 定义的变更是否符合预期设计。如果将 CI&CD 的流程当做基础设施看待,那么这也是一种基础设施即代码思想的落地实践。

Go 语言持续交付流水线

Jenkins Pipeline 运行后,Artifactory 会记录整个CI&CD过程中的构建产出物及其相关的元数据信息,将二者绑定在接下来的部署提供数据决策支撑。

Go 语言持续交付流水线

在记录元数据的同时,还会记录整个过程,将发布模块、依赖、环境参数等一并记录下来,提供反向依赖解析、发布详情对比等支持,帮助快速定位、分析问题。

Go 语言持续交付流水线

除了支持正向依赖的查看之外,还可以快速反向排查某个依赖组件被其他那些模块所依赖,在那些构建任务的哪一次所引用等详细情况。对于老版本组件升级、微服务拆分都是非常有帮助的功能特性,可以快速节省排查时间且提升准确度。

Go 语言持续交付流水线

最后的部署动作,我们采用质量关卡对即将部署的组件进行筛选,确保其满足上线部署(通常默认是测试环境)条件,如果满足则直接部署,否则发送邮件或者直接阻断流程。

Go 语言持续交付流水线

总结

Go 语言基于 Jenkins Pipeline 的持续交付不仅仅只是自动化测试、构建和发布,而且还包含了元数据收集、发布Promotion及质量关卡等运用,在保证了效率的同时能够做到灵活的质量管控。于此同时,Artifactory 还考虑到了构建过程的管理,提供了底层依赖变化带来的影响范围分析能力,两次发布参数(依赖、环境信息等)的快速对比能力等等,大幅度降低了上线发布时问题排查的时间成本。

作者:
付 辉 JFrog 中国解决方案架构师,主要关注CI&CD,容器技术及微服务。


推荐阅读
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
author-avatar
chen-yu2502881617
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有