DevOps即服务如何在NetAPP内部实现高效代码交付

Stella981
• 阅读 455

DevOps即服务如何在NetAPP内部实现高效代码交付

DevOps即服务如何在NetAPP内部实现高效代码交付

导语

从编写代码到交付,DaaS可以使团队大大缩短周期。

正文

随着组织更改其开发模型,支持这些组织的工具必须进行转换。在NetApp,我们已经看到了从整体到微服务的发展格局的变化。为了帮助不断发展的团队实现快速、频繁、可靠的代码交付,并提高工程效率,我们开始为NetApp内部团队提供DevOps即服务(DaaS)。

该解决方案提供服务的自动安装,配置和部署,例如Jenkins,源代码管理管理以及工作流所需的插件。从编写代码到交付,DaaS使团队可以大大缩短周期时间。

DaaS的功能和价值

这套DaaS解决方案基于Kubernetes,可以对整个软件开发工具生态系统(例如Jenkins,源代码管理(SCM),工件存储和监视)进行集中管理。Helm和Docker Engine用于运行容器并部署解决方案。Trident管理着我们的永久卷,因此可以使用任何存储-NetApp ONTAP,Element软件,Cloud Volumes Service或Cloud Volumes ONTAP。使用Flask开发了一组内部服务,并且CouchDB用于在管道上存储信息。Bitbucket,Perforce或GitHub可以用作SCM,解决方案可以在内部或在云中。

DaaS对我们而言的关键价值是Jenkins的自动化部署。随着Jenkins映像的部署,以下内容会自动处理,而无需任何用户干预:自定义Jenkins图像、安装其他插件、启用Kubernetes插件、连接到SCM以检测新的代码提交和创建管道后立即开始新作业。

DaaS架构

DevOps即服务如何在NetAPP内部实现高效代码交付

1.使用Helm自动安装:由Kubernetes管理员运行的此步骤使用Helm安装基本服务。基本服务启动并运行后,可以使用Web用户界面来部署解决方案。

2.在Namespace中创建基本Helm图表

DevOps即服务如何在NetAPP内部实现高效代码交付

3.用户界面来部署解决方案

此步骤使解决方案所有者或管理员可以配置和部署容器化的Jenkins实例,并将其与选定的SCM集成在一起——以及所有必需插件的部署和配置。过去需要管理员花费几个小时才能完全自动化,现在,只需单击一下即可在几分钟之内完成。

使用Helm图表(基础架构作为代码)部署解决方案使此过程可编程且可重复,从而为开发人员节省了大量时间。借助Helm中的所有内容并进行源代码控制,可以保存对项目的其他修改,可以还原更改,并且可以在升级之前安全地存储信息。

4.通用Web UI选择和安装所需的服务

DevOps即服务如何在NetAPP内部实现高效代码交付

一旦安装了必需的服务,就会安装和部署Jenkins以及Helm图表中的所有配置,无需手动干预。

5.Jenkins管道创建自动化

此功能自动创建多分支管道,从SCM中提取代码,并使用动态Jenkins代理执行管道步骤。每次创建新项目时,都需要为每个存储库创建新的管道。通过使用动态的Kubernetes Pod作为Jenkins代理,安装所有必需的插件,连接到SCM以及创建管道都可以自动完成。

6.自动创建管道

DevOps即服务如何在NetAPP内部实现高效代码交付

SCM服务帐户用于填充项目列表以及与所选项目关联的存储库。将根据项目和所选存储库自动填充SCM URL。

此步骤大大减少了项目管理员所需的时间和人工。创建管道后,将自动处理以下事项:每次在存储库中创建新分支时,都会自动拉入该分支并触发该分支的管道构建;每当存储库中的现有分支中有代码提交时,都会自动触发该分支的管道构建;删除管道后,Jenkins文件夹及其所有配置都将自动删除。并释放分配给管道的Kubernetes资源。

7.用于管道管理的Jenkins模板引擎(JTE)

该框架使项目具有模板化的工作流,无论团队使用什么工具,这些工作流都可以同时被多个团队重用。项目可能很复杂,并且它们的Jenkins文件可能会很长,并且具有多个管道和许多行代码。JTE简化并将其分解为易于理解和调试的可重用模板。

JTE的主要功能包括:可重用的库;可以在多个级别(配置级别,库级别和项目级别)对工作流施加治理规则;项目特定的自定义脚本;将分支和部署策略定义为代码(高级功能);Jenkins服务器上没有存储任何配置;借助JTE,我们可以抽象化CI / CD管道的构建方式,并且可以针对每个工作流定制和定制单个模板。

8.数据监控和指标

Linkerd和Splunk用于监视解决方案。Linkerd是Kubernetes的服务网格,并与Splunk结合使用,用于此处的运营和开发指标。

第一是可操作性。监视基础结构中的故障包括:基本指标,例如成功率,部署和Pod的延迟;通过HTTP,TCP和gRPC调用进行实时调用;在应用程序层上调试服务。第二是可进化性,包括监视管道,吊舱和自动化中的故障。

Grafana可用于这些指标的可视化。它为开箱即用的服务提供了可操作的仪表板,例如部署,服务和名称空间详细信息,运行状况监视,群集监视,网络I/O以及CPU和内存使用情况。甚至对于吊舱,也可以查看高级指标并深入研究细节。

总结

我们的DevOps即服务是基于Kubernetes的完整的端到端CI / CD解决方案,可对整个软件开发工具生态系统(Jenkins,SCM和Artifactory)进行集中管理。它可以轻松地进行项目入门;使服务的安装,配置和部署自动化,并为开发团队节省大量时间和人工。

通过利用诸如JTE之类的功能,该解决方案可简化Jenkins并使其模板化。Linkerd,Splunk和Grafana的组合可监视基础结构和自动化,因此我们的开发人员可以专注于开发。

最重要的是,我们的DaaS提供了可以在各个开发团队之间重复使用的最佳实践。以及Jenkins,SCM,Artifactory,安全合规性,指标和监视等工具的自动化和集成。

DevOps即服务如何在NetAPP内部实现高效代码交付

DevOps即服务如何在NetAPP内部实现高效代码交付

本文分享自微信公众号 - 开源村OSV(osvosvosv)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这