天天看点

持续集成

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

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

持续集成之Jenkins

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

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

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

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

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

持续代码质量管理-Sonar

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

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

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

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

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

使用Sonar实现代码分析

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

<a href="http://s2.51cto.com/wyfs02/M01/8C/15/wKioL1hh4EThbK-1AAD7Vl7HXeM884.jpg" target="_blank"></a>

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

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

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

1

2

3

4

5

6

7

8

9

10

<code>#----- Default SonarQube server</code>

<code>sonar.host.url=   </code><code>#配置sonar的主机访问URL</code>

<code>#----- Default source code encoding</code>

<code>sonar.sourceEncoding=UTF-8</code>

<code>#----- Global database settings (not used for SonarQube 5.2+)</code>

<code>sonar.jdbc.username=sonar    </code><code>#连接sonar数据库的账号</code>

<code>sonar.jdbc.password=sonar    </code><code>#连接sonar数据库的密码</code>

<code>#----- MySQL</code>

<code>sonar.jdbc.url=jdbc:mysql:</code><code>//localhost</code><code>:3306</code><code>/sonar</code><code>?useUnicode=</code><code>true</code><code>&amp;amp;characterEncoding=utf8</code>

关联上之后,我们就可以直接对实例代码进行测试了。可以查看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来测试:

<code>[root@localhost php-sonar-runner-unit-tests]</code><code># cd src/</code>

<code>[root@localhost src]</code><code># ll</code>

<code>total 8</code>

<code>drwxr-xr-x. 2 root root   22 Dec  1 20:06 Foo</code>

<code>-rw-r--r--. 1 root root 5559 Dec  1 20:06 Math.php</code>

<code># /usr/local/sonar-scanner/bin/sonar-scanner</code>

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

<a href="http://s4.51cto.com/wyfs02/M01/8C/16/wKioL1hh7RvDWhEfAADrtSvHu6c966.jpg" target="_blank"></a>

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

Jenkens与Sonar集成

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

<a href="http://s2.51cto.com/wyfs02/M00/8C/1A/wKiom1hiBzajdbf2AADLSHF6fLk496.jpg" target="_blank"></a>

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

<a href="http://s4.51cto.com/wyfs02/M02/8C/1C/wKiom1hiHrqB0wEqAAB1AlMh5wg971.jpg" target="_blank"></a>

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

<a href="http://s5.51cto.com/wyfs02/M02/8C/1D/wKiom1hiIZeT9mkWAACj8leQwNg043.jpg" target="_blank"></a>

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

<a href="http://s3.51cto.com/wyfs02/M01/8C/1D/wKiom1hiIkWh95GoAAC226KwHyM721.jpg" target="_blank"></a>

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

<a href="http://s3.51cto.com/wyfs02/M01/8C/1D/wKiom1hiI7ey0U-PAAD2pS1jMjs176.jpg" target="_blank"></a>

SonarQube的跳转结果:

<a href="http://s2.51cto.com/wyfs02/M00/8C/19/wKioL1hiJHXQ4DL2AADBWERN7iA358.jpg" target="_blank"></a>

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

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

<a href="http://s2.51cto.com/wyfs02/M01/8C/19/wKioL1hiK4iim6bVAABnak8M_6k107.jpg" target="_blank"></a>

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

<code>jenkins   ALL=(ALL)     NOPASSWD: </code><code>/usr/bin/ssh</code>

<code>#Defaults    requiretty</code>

持续部署

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

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

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

<a href="http://s1.51cto.com/wyfs02/M02/8C/1A/wKioL1hiQiOAxBuhAAB9j4Fk3UU046.jpg" target="_blank"></a>

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

<a href="http://s2.51cto.com/wyfs02/M01/8C/1A/wKioL1hiQv-Rn12dAAA-RuvO4_k257.jpg" target="_blank"></a>

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

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

<a href="http://s4.51cto.com/wyfs02/M02/8C/1E/wKiom1hiSROjhzVfAACiSkIU8DA301.jpg" target="_blank"></a>

设置pipeline视图:

<a href="http://s1.51cto.com/wyfs02/M02/8C/1A/wKioL1hiSjvCEOgiAACK3i0Dy88283.jpg" target="_blank"></a>

配置起始项目:

<a href="http://s4.51cto.com/wyfs02/M00/8C/1E/wKiom1hiSoSAkls0AACkBbqdr8s704.jpg" target="_blank"></a>

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

<a href="http://s5.51cto.com/wyfs02/M00/8C/1A/wKioL1hiSqOzw7FPAADN6T73W4c922.jpg" target="_blank"></a>

Jenkins与Gitlab集成

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

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

先生成一个随机的Token:

<code># openssl  rand -hex 10</code>

<code>c71bfc71b32d3c4785c5</code>

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

<a href="http://s5.51cto.com/wyfs02/M02/8C/1B/wKioL1hiX6PSoMw3AADro3vgCOY859.jpg" target="_blank"></a>

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

<a href="http://s3.51cto.com/wyfs02/M01/8C/1E/wKiom1hiYLOQgl7HAACxI8zxrQc676.jpg" target="_blank"></a>

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

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

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