持续集成
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了持续集成相关的知识,希望对你有一定的参考价值。
持续集成主要用于频繁将代码集成到主干的场景。这样的好处是可以快速的发现代码的错误,而且可以防止分支大幅度的偏离主干,造成主干难以集成。持续集成的目的是在保证产品质量的同时让产品快速迭代。
持续集成包含持续交付和持续部署,其实是一个自动化部署的流程。将整个技术生态流程自动化,如今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
#----- 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来测试:
[[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:
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:
# openssl rand -hex 10 c71bfc71b32d3c4785c5
在起始的Jenkins项目创建远程触发,关联gitlab信息:
保存之后,将提示中给出的URL和生成的token配置到gitlab上。在gitlab的webhooks中配置如下信息:
配置完成之后,在gitlab上可以点击test按钮进行测试。
这样在向gitlab push代码时,就会触发demo2项目的操作,demo2本身再触发其它项目操作,完成整个代码部署的流程。
以上是关于持续集成的主要内容,如果未能解决你的问题,请参考以下文章