持续集成主要用于频繁将代码集成到主干的场景。这样的好处是可以快速的发现代码的错误,而且可以防止分支大幅度的偏离主干,造成主干难以集成。持续集成的目的是在保证产品质量的同时让产品快速迭代。
持续集成包含持续交付和持续部署,其实是一个自动化部署的流程。将整个技术生态流程自动化,如今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;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