持续集成

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

持续集成包含持续交付和持续部署,其实是一个自动化部署的流程。将整个技术生态流程自动化,如今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管理界面进行搜索安装,如图:

持续集成

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
[[email protected] php-sonar-runner-unit-tests]# cd src/
[[email protected] 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界面来查看管理:

持续集成

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


Jenkens与Sonar集成

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

持续集成


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

持续集成

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

持续集成

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

持续集成


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


持续集成


SonarQube的跳转结果:

持续集成

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


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

持续集成


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

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


持续部署

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

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

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

持续集成

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

持续集成



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

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

持续集成


设置pipeline视图:

持续集成

配置起始项目:

持续集成


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

持续集成



Jenkins与Gitlab集成

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

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

先生成一个随机的Token:

1
2
# openssl  rand -hex 10
c71bfc71b32d3c4785c5

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

持续集成

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

持续集成


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

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




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