持续集成

简介:

持续集成主要用于频繁将代码集成到主干的场景。这样的好处是可以快速的发现代码的错误,而且可以防止分支大幅度的偏离主干,造成主干难以集成。持续集成的目的是在保证产品质量的同时让产品快速迭代。

持续集成包含持续交付和持续部署,其实是一个自动化部署的流程。将整个技术生态流程自动化,如今DevOps理念已经大行其道。整合整个技术部门是DevOps的核心,可以预见,未来运维将是一个消失的岗位,但是就目前国内的整个行业来看,还会存在3到5年的调整时间,如果你是一个运维人员,将重点放在调整企业组织架构,将开发、运维、测试一体化,顺势而为,才是明智之选。


持续集成之Jenkins

Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:

1、持续的软件版本发布/测试项目。

2、监控外部调用执行的工作。


安装部署Jenkins:https://www.unixhot.com/article/55 

在Jenkins安装插件有时候由于网络的原因需要手动去下载hpi的插件https://updates.jenkins-ci.org/download/plugins/ 在web界面上传到服务器上。

如果需要使用gitlab,要安装gitlab-plugin 和gitlab-hook的插件。


将安装Jenkins服务器上的公钥部署在gitlab上,在Jenkins上部署本机的私钥,并在新建的Jenkins项目中添加对应的gitlab仓库链接,这样在启动项目时,Jenkin会自动从gitlab上下拉代码,默认是放在

/var/lib/jenkins/workspace/auto-deploy目录下。


持续代码质量管理-Sonar

https://www.unixhot.com/article/56 

Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar可以集成不同的测试工具,代码分析工具和持续集成工具。

Sonar的官方下载站点: https://www.sonarqube.org/downloads/ 

这里需要注意,如果是安装的sonar5.6.4以上版本,需要安装mysql5.6及以上版本才可以。

在第一次启动时,会比较慢,在后台sonar会自动同步数据库。

在启动之后使用默认的账号密码admin登录。

sonar也是通过管理一系列的插件来工作的,默认插件的安装路径在/usr/local/sonarqube/extensions/plugins 。


使用Sonar实现代码分析

Sonar在github上有一些代码示例,可以帮助我们测试各种主流的代码https://github.com/SonarSource/sonar-examples  通过下载这些代码示例,可以完成多已有代码类型的测试示范。

在进行代码测试之前,需要安装对应的语言插件和安装sonar-scanner插件。语言插件可以直接从WEB管理界面进行搜索安装,如图:

wKioL1hh4EThbK-1AAD7Vl7HXeM884.jpg

Sonar-Scanner可以直接从官方下载:

http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner 


Sonar-scanner可以直接使用,但是在使用前需要与sonar进行关联,修改配置文件:

/usr/local/sonar-scanner/conf/sonar-scanner.properties 

1
2
3
4
5
6
7
8
9
10
#----- Default SonarQube server
sonar.host.url=    #配置sonar的主机访问URL
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
#----- Global database settings (not used for SonarQube 5.2+)
sonar.jdbc.username=sonar     #连接sonar数据库的账号
sonar.jdbc.password=sonar     #连接sonar数据库的密码
 
#----- MySQL
sonar.jdbc.url=jdbc:mysql: //localhost :3306 /sonar ?useUnicode= true &characterEncoding=utf8

关联上之后,我们就可以直接对实例代码进行测试了。可以查看sonar-example的使用方法

/software/sonar-examples/projects/languages/php/php-sonar-runner-unit-tests/README.md 

在sonar-project.properties文件中记录了测试文件的在WEB界面的显示属性,包含名称,版本,字符集等信息。

/software/sonar-examples/projects/languages/php/php-sonar-runner-unit-tests/sonar-project.properties

进入scr目录,直接利用sonar-scanner来测试:

1
2
3
4
5
6
[root@localhost php-sonar-runner-unit-tests] # cd src/
[root@localhost src] # ll
total 8
drwxr-xr-x. 2 root root   22 Dec  1 20:06 Foo
-rw-r--r--. 1 root root 5559 Dec  1 20:06 Math.php
# /usr/local/sonar-scanner/bin/sonar-scanner

此时会返回一系列的检查结果,可以通过web界面来查看管理:

wKioL1hh7RvDWhEfAADrtSvHu6c966.jpg

在实际应用中,通过Jenkins来获取代码,通过Sonar对代码进行测试。


Jenkens与Sonar集成

在Jenkens中集成Sonar需要安装Sonar插件。

wKiom1hiBzajdbf2AADLSHF6fLk496.jpg


在Jenkins上设置全局的sonar-scanner路径,在 Global Tools Configuration:

wKiom1hiHrqB0wEqAAB1AlMh5wg971.jpg

同时在系统配置中,配置sonar服务:

wKiom1hiIZeT9mkWAACj8leQwNg043.jpg

在创建的项目中,添加构建sonar的配置信息:

wKiom1hiIkWh95GoAAC226KwHyM721.jpg


配置完之后就可以对代码进行构建了,此时会自动生成一个SonarQube的快捷链接,点击此链接就能直接跳转到SonarQube的界面,显示构建后的,对代码质量检测的结果:


wKiom1hiI7ey0U-PAAD2pS1jMjs176.jpg


SonarQube的跳转结果:

wKioL1hiJHXQ4DL2AADBWERN7iA358.jpg

这样在Jenkens调用Sonar进行代码质量检测的功能就实现了。


如果要实现自动化的部署,可以在Jenkens中配置另一个项目,通过构建此项目,调用一个自动化的脚本来实现上线部署的功能。

wKioL1hiK4iim6bVAABnak8M_6k107.jpg


此处需要对部署的服务器做SSH-KEY认证,在Jenkins主机上添加Jenkens账号的ssh sudo权限,并禁用默认的requiretty:

1
2
jenkins   ALL=(ALL)     NOPASSWD:  /usr/bin/ssh
#Defaults    requiretty


持续部署

如果将自动化测试和自动化部署结合起来,就可以构成一整套自动化的流程,Jenkens可以帮我们实现。

在实现这个功能之前,需要安装Parameterized Trigger plugin插件来触发一系列的操作。

比如,当我们对代码质量检测完成之后,就可以自动调用部署脚本进行代码部署操作:

wKioL1hiQiOAxBuhAAB9j4Fk3UU046.jpg

执行构建,当前的demo2项目完成之后会自动执行demo-deploy项目:

wKioL1hiQv-Rn12dAAA-RuvO4_k257.jpg



让代码从开发到部署像流水线一样进行,可以给整个流程布局一个视图效果,这样更容易查看和运行不同的项目。

需要安装Build Pipeline Plugin,在配置上起始项目和pipeline的视图:

wKiom1hiSROjhzVfAACiSkIU8DA301.jpg


设置pipeline视图:

wKioL1hiSjvCEOgiAACK3i0Dy88283.jpg

配置起始项目:

wKiom1hiSoSAkls0AACkBbqdr8s704.jpg


最终的展现视图,可以直接在视图中对需要构建的项目进行操作:

wKioL1hiSqOzw7FPAADN6T73W4c922.jpg



Jenkins与Gitlab集成

要在Jenkins中集成gitlab,需要安装gitlab Hook 插件,为了验证操作,需要安装Build Authorization Token Root 插件。

创建一系列的触发条件之后,当本地代码push到gitlab的时候,就会自动进行代码验证和测试,测试完成自动部署代码到预生产环境,实现整个流程的自动化。

先生成一个随机的Token:

1
2
# openssl  rand -hex 10
c71bfc71b32d3c4785c5

在起始的Jenkins项目创建远程触发,关联gitlab信息:

wKioL1hiX6PSoMw3AADro3vgCOY859.jpg

保存之后,将提示中给出的URL和生成的token配置到gitlab上。在gitlab的webhooks中配置如下信息:

wKiom1hiYLOQgl7HAACxI8zxrQc676.jpg


配置完成之后,在gitlab上可以点击test按钮进行测试。

这样在向gitlab push代码时,就会触发demo2项目的操作,demo2本身再触发其它项目操作,完成整个代码部署的流程。




 本文转自 酥心糖 51CTO博客,原文链接:http://blog.51cto.com/tryingstuff/1886666

相关文章
|
12天前
|
监控 Kubernetes 测试技术
现代软件开发中的持续集成与持续交付
传统软件开发中,集成和交付往往是耗时且容易出错的环节,而现代软件开发则借助持续集成与持续交付技术,通过自动化流程和持续部署,极大地提高了开发效率和软件质量。本文将探讨持续集成与持续交付在现代软件开发中的重要性、原理和实践方法。
|
3月前
|
安全 jenkins 测试技术
自动化测试与持续集成/持续交付(CI/CD)的实践与应用
自动化测试是现代软件开发不可或缺的环节,它可以有效地提高测试效率、降低测试成本。而持续集成/持续交付(CI/CD)则是一种基于自动化的软件开发流程,能够将代码的开发、构建、测试和部署等过程无缝连接起来,从而实现快速迭代和部署。本文将结合实际案例,介绍自动化测试和CI/CD的实践与应用。
144 2
|
1月前
|
敏捷开发 运维 Devops
深入理解软件测试中的持续集成与持续交付
【2月更文挑战第16天】 在高速迭代的软件发展周期中,持续集成(CI)与持续交付(CD)已成为确保产品质量和加快市场投入的关键实践。本文将探讨CI/CD在软件测试中的应用,阐述如何通过自动化测试、版本控制以及快速反馈循环来优化软件开发流程。我们将分析CI/CD对提高测试效率、降低风险以及促进团队协作的积极影响,并讨论实施过程中面临的挑战及应对策略。
|
8月前
|
前端开发 测试技术 持续交付
前端可持续集成与持续交付
前端可持续集成与持续交付
103 0
|
Kubernetes 容灾 Java
浅谈持续集成
角色:功能测试→自动化测试、性能测试、安全测试→测试开发(对软件研发过程提供各种支持,包括工具,框架,方案,最佳实践)
|
jenkins 测试技术 持续交付
你真的懂持续集成、持续交付、持续部署吗?!
你真的懂持续集成、持续交付、持续部署吗?!
289 0
你真的懂持续集成、持续交付、持续部署吗?!
|
Kubernetes Java jenkins
6. k8s + jenkins 实现持续集成(完)
一. 在node节点上安装软件. 具体软件内容如下
518 0
6. k8s + jenkins 实现持续集成(完)
|
存储 jenkins Devops
DevOps之持续集成
软件持续集成
881 0
DevOps之持续集成
|
Java jenkins 持续交付
Jenkins 自动化部署 持续集成
螢幕快照 2017-11-18 22.56.06.png Source files build/libs/cms-0.0.1-SNAPSHOT.
1628 0