DevOps工具链大全 on Openshift

Stella981
• 阅读 717

本文作者为陈沙克,原文题目为:OpenShift的DevOps工具链,大魏已获得授权转载。

在OpenShift,整整忙乎了一年,逐步一点一点完善整个CI 的工具链。根据我自己的理解和实践,我整理一下。

涉及的相关的技术,其实我同事已经分享到简书上,大家可以参考。

https://www.jianshu.com/u/15a6a6df3202

我是按照jenkins的运行的流程来介绍工具

  1. 在Jenkins创建一个Maven的job

  2. Gitlab的webhook,触发Jenkins里的job,jenkins的slave镜像启动,Maven已经集成到jenkins的slave镜像里。

  3. 从Gitlab拉取代码

  4. Jenkins调用SonarQube静态扫描代码

  5. Maven利用Nexus build jar包

  6. Maven利用Junit和TestNG自动化测试

  7. Jenkins Slave镜像完成相关工作,会把结果传到Jenkins的Master节点上,然后把slave节点销毁掉。

  8. 触发Openshift build 镜像,deploy环境

  9. UI自动化测试

对于ci的流程,不少工具会产生大量的数据,所以尽可能使用S3,对象存储来存储数据,这样可以避免磁盘撑破。流程里的工具,都采用OpenLdap来统一身份验证,授权在应用里进行。

下面的工具,全部容器化,跑在OpenShift上。整个环境的部署,从OpenShift安装,一直到工具链对接,跑完一个Java的demo测试,1天就可以完成,应该还是非常高效。

Contents

  • 1 身份统一认证

  • 2 项目管理

  • 3 持续集成工具

  • 4 项目构建工具

  • 5 代码管理工具

  • 6 代码质量管理

  • 7 制品库

  • 8 测试框架

  • 9 配置管理中心

  • 10 UI自动化测试

  • 11 测试管理

身份统一认证

DevOps工具链大全 on Openshift

其实打造一套工具链,面临了一个很现实的问题,如何统一不同工具的身份验证的问题。那么通过OpenLdap,基本是唯一办法,这是代价最小的方式,现在目前基本所有的应用,都支持ldap认证。

所以我们也花精力把OpenLdap跑起来,用来提供用户验证,当我设置允许该用户登录某个系统,用户用统一的用户名和密码,登录到不同的系统中。

第一个需要解决的系统,其实就是OpenShift平台的用户管理。用户在openldap上创建,用户的权限管理,在openshift设置。

OpenLdap在OpenShift平台部署,比较简单。

https://github.com/openshift/openldap

OpenShift上部署生产的OpenLdap,需要考虑不少东西,主从架构,估计还需要搞一个Operator,不过应该够用。

目前OpenLdap的用户管理,缺乏UI,这块我们自己开发一套OpenLdap管理的UI,当然也肯定是跑在OpenShift上。

项目管理

DevOps工具链大全 on Openshift

软件的项目管理,需求管理,这是在比较大的项目里的一个需求,另外还有项目的文档管理。

软件的开发,我们希望可以支持敏捷开发,实现看板的功能。还有就是issue的管理。关于issue,详细的介绍,大家可以http://www.ruanyifeng.com/blog/2017/08/issue.html   阮一峰介绍的很详细。

  1. Redmine

  2. Jira+confluence

  3. 禅道

上面三个软件,都能支持ldap的用户管理,我基本都折腾了一遍。最好的肯定是Jira+confluence。很多创业公司一成立,就直接把jira+confluence搭建起来,宁愿付费,也要使用,提高效率。

Jira和confluence官方提供docker镜像,你可以拿来修改一下就可以跑在OpenShift上。这个过程,基本就是体力活。当jira和confluence用起来后,存储需求比较大,其实应该考虑把数据放到S3上,减轻PaaS平台的存储压力。

禅道,基本是能满足我们使用需求。缺点就是一个孤岛,没法和外面的系统集成。

Redmine,老牌的开源项目管理软件,可以通过装上各种插件满足项目的需求。可以和gitlab对接。唯独社区不是很活跃,用ruby语言开发,感觉非常不可控。

对于Jira来说,其实可以作为一个公司的门户入口。如果你舍得投入的话,要有的功能都有。可以对接jenkins,Sonarqube。把各个软件的运行的信息,显示在jira的页面上。

持续集成工具

DevOps工具链大全 on Openshift

红帽的OpenShift上已经直接集成了Jenkins,而且用户是和OpenShift统一。可以启用jenkins的k8s插件,这样可以把jenkins的slave跑起来。当job在slave跑完后,会把相应的结果复制到master上,就会销毁掉。

jenkins的插件非常多,常用的gitlab对接,gitlab触发jenkins,jenkins和jira对接,jenkins的深入,其实就看你使用的插件的数量。

整个持续集成的重点,就在于Jenkins,jenkins是挺复杂,你需要投入时间了解他,不过好处就在于,好像基本没碰到什么bug。插件都能正常工作。

关于Jenkins启用k8s插件后,slave节点的配置

https://medium.com/muhammet-arslan/how-ive-created-scaled-and-distributed-jenkins-top-of-kubernetes-441db62b15cd

非常好用。

项目构建工具

DevOps工具链大全 on Openshift

对于java的开发人员来说,项目的构建工具:ANT,Maven和Gradle,ANT应该早已废弃。Gradle风头很猛,不过Maven在如今仍然是Java构建技术的事实标准。所以我们项目里,还是选择Maven作为构建工具。

大家可以简单理解,Maven,就是管理项目的依赖关系的工具。

Openshift内置的jenkins Slave镜像,默认就支持Maven。所以就非常方便。如果你希望用Gradle构建,那么还需要多做一点工作。

代码管理工具

DevOps工具链大全 on Openshift

其实这个悬念不多,建议直接使用gitlab就可以了。现在市场上还有好几个开源的代码管理仓库,功能都基本一致,不过最大的问题,就是和别的系统集成上,缺乏插件。

gitlab,作为代码仓库,至少需要和外面的系统对接:jira对接issue,对接jenkins。

gitlab也带CI的工具,不过我没有用,这也是大家比较诟病的一个功能,太重。不过还好,无非就是多用2g内存而已。

gitlab在OpenShift的部署,官方提供文档,照做就可以。

https://about.gitlab.com/2016/06/28/get-started-with-openshift-origin-3-and-gitlab/

gitlab的issue功能,可以关闭,直接集成到jira上,这样可以实现issue集中管理。

目前还没很好解决的问题就是无法通过ssh访问gitlab,只能是https的方式。后续再深入研究。ldap集成,也是没问题。

代码质量管理

DevOps工具链大全 on Openshift

代码扫描工具,基本目前大家都使用SonarQube。可以对没编译前的代码根据定义的规则,进行扫描,并且生成报告。

用户还能自定义规则,可以把公司的代码规范融入到规则里,一旦发现不规范的地方,马上提示。

DevOps工具链大全 on Openshift

Jenkins装上SonarQube插件,在流水线上,直接让SnoarQube进行代码的扫描。

另外SonarQube还能通过jira的插件,把报告显示在jira的UI上。

Openshift安装,红帽提供了一个模板:

https://github.com/OpenShiftDemos/sonarqube-openshift-docker

制品库

DevOps工具链大全 on Openshift

作为Maven的私有仓库,目前选择是

  • JFrog’s Artifactory

  • Sonatype’s Nexus

Nexus3.x的版本,比2.x版本功能多很多,还可以提供yum源管理。可以大大加快企业内部的build速度。

需要考虑的一个问题就是Nexus的存储,如果可能,存放到S3上。

Nexus容器化,OpenShift运行,红帽直接提供官方的支持

https://docs.openshift.com/container-platform/3.5/dev\_guide/app\_tutorials/maven\_tutorial.html

jenkins通过Maven构建的时候,就可以直接使用私有的仓库来构建,加快构建的速度。

测试框架

DevOps工具链大全 on Openshift

Maven本身并不是一个测试框架,Java世界中主流的测试框架为Junit和TestNG。Maven在构建执行到特定生命周期阶段的时候,通过插件maven-surefire-plugin来执行Junit或者TestNG的测试用例,也可以并行执行测试用例。该插件能很好的兼容Junit3、Junit4,unit5和TestNG。

https://www.baeldung.com/core-maven-plugins

配置管理中心

DevOps工具链大全 on Openshift

Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

对于OpenShift来说,开发,测试,生产使用相同的镜像,就需要一个配置管理中心,集中管理各个不同的环境的配置文件。

UI自动化测试

DevOps工具链大全 on Openshift

zalenium是一个Selenium Grid扩展,可以理解为在k8s跑Selenium Grid的版本,实现在Firefox和Chrome中进行的UI自动测试。

Selenium Grid包括两种角色,类似master,slave的概念,可以实现1主多从。

  1. hub :主节点,master节点

  2. node:分支节点,slave节点

测试管理

DevOps工具链大全 on Openshift

测试用例管理,测试计划管理,目前开源的工具,基本就是Testlink。可以和jira或者Redmine集成,把issue集成到上面。不过还无法在testlink里,指派issue给开发者。

DevOps工具链大全 on Openshift

魏新宇

  • "大魏分享"运营者、红帽资深解决方案架构师

  • 专注开源云计算、容器及自动化运维在金融行业的推广

  • 拥有MBA、ITIL V3、Cobit5、C-STAR、TOGAF9.1(鉴定级)等管理认证。

  • 拥有红帽RHCE/RHCA、VMware VCP-DCV、VCP-DT、VCP-Network、VCP-Cloud、AIX、HPUX等技术认证。

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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
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
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
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
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这