技术分享|利用maven与bamboo实现应用实时构建和代码检查
Posted Neunn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了技术分享|利用maven与bamboo实现应用实时构建和代码检查相关的知识,希望对你有一定的参考价值。
明星工程师:丁翠平
(任职于东网移动互联网事业部 )
8年架构经验,精于Java全栈开发,擅长构建稳定/高并发/分布式的后端服务。在构建高可用、分布式消息队列方面经验丰富。致力于微服务架构的落地实现和优化,关注应用微服务化的行业发展趋势。
曾负责手机订烟产品规划和技术实现,该产品服务于广大的烟草零售户,实现烟草商业和零售商之间的数据交换和信息流通。并主导了消息推送平台、移动后端平台的架构设计,完成核心模块开发,简化企业应用开发和应用整合,并且在各行业多家企业中得到应用。
背景介绍:
虽然近年来云计算的火热发展给DevOps带来了一段小高潮,然而这并不是适合所有的应用场景。在实际的项目开发过程中,可能因为组织结构不同、团队文化差异、资源配置不足等因素导致每个团队面临的问题都不尽相同。我们团队目前都是小team集中式开发,并行密集、开发周期短、迭代速度快,开发、测试乃至客户演示更加频繁,那么我们就是要以解决问题为根本出发点,提升团队工作效率,减少人工参与次数,降低出错的可能性,实现开发和测试之间平滑过度,使程序随时可变随时可见。
思路简介:
本文基于东网云平台内部自建的Bamboo自动化构建平台完成各项任务的编辑、调度和执行;利用maven来作为项目管理工具,集成tomcat、sonar和docker插件等完成具体任务。
正文:
Bamboo的简介和使用说明(熟练工请略过)
Bamboo简介
Bamboo是Atlassian公司一款持续集成构建服务器软件。 Bamboo用户界面简单,容易安装;自动检测本机环境变量设置;能够监测构建日志。
Bamboo使用示例(发布到tomcat)
创建一个任务
填写项目信息
关联代码源
添加构建任务
部署到Tomcat
重启Tomcat
一个小例子就介绍到这里,其实bamboo功能还是很强大的,提供很多任务类型,我刚刚演示的maven只是其中一种。大家有兴趣的可以自己在使用的过程慢慢深入了解。
利用maven-docker构建最新的应用环境
阅读这一节假设您已经对docker有一定了解和实践,本节只介绍如何通过maven-docker插件实现镜像生成、上传和应用。maven-docker插件的原理实际上利用项目中pom.xml文件中的xml配置生成dockefile文件,然后在项目构建的过程中基于本地或者远端docker服务生成docker镜像,并推送到pom.xml中事先指定好的镜像仓库服务器上。这样一来只要代码仓库有变化,Bamboo就会执行事先定义好的构建任务生成最新的镜像并推送到云端,这样就随时可以通过一个docker命令启动一个完整的服务,用以内部测试、演示,甚至试用。
各服务之间的结构如下:
安装、启动docker服务并开启远程访问
快速安装,借个道。
curl -sSL https://get.daocloud.io/docker | sh
开启远程服务
1.编辑/lib/systemd/system/docker.service修改DOCKER_OPTS
2.绑定host、指定私有registry(可选)、指定mtu
ExecStart=/usr/bin/docker daemon -H unix:///var/run/docker.sock -H 0.0.0.0:4243 --insecure-registry=10.20.0.215 --mtu 1400
3.重启docker服务
``` service docker restart ```
docker配置本地maven-docker参数
1.将docker服务注入到构建服务器
``` export DOCKER_HOST=tcp://A:4243 ```
2.配置私有镜像仓库B的授权信息
在maven的本地配置文件settings.xml中根节点下增加如下配置:
这个文件一般会放在~/.m2或者$MAVEN_HOME/conf目录下。
<servers> <server> <id>docker-hub</id> <username>heartarea</username> <password>xxxxxxx</password> <configuration> <email>ding_cuiping@163.com</email> </configuration> </server> </servers>
在pom.xml中增加docker-plugin
<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.3</version> <configuration> <baseImage>java</baseImage> <baseImage>tomcat</baseImage> <maintainer>Frank Ting</maintainer> <imageName>heartarea/ruma:latest</imageName> <exposes> <expose>8080</expose> </exposes> <serverId>docker-hub</serverId> <registryUrl>http://B:5000/v1/</registryUrl> <resources> <resource> <targetPath>/var/lib/tomcat7/webapps</targetPath> <directory>target</directory> <include>demo-web.war</include> </resource> </resources> </configuration> </plugin>
构建命令如下
mvn clean package docker:build -DpushImage
该命令会生成项目最新镜像并切推送到指定的私有仓库中,如果有需要只需将镜像down到本地启动即可。
至此docker-maven插件配置和使用就完成了。
利用maven-sonar执行代码检查计划
阅读本节假设您已经搭建好了sonar,如果是第一次接触sonar请移步。
* sonar简介
Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量
通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测。
SonarQube服务架构
* maven-sonar配置
指定分析结果存储数据库的连接信息
<?xml version="1.0" encoding="UTF-8"?> <settings> <pluginGroups> <pluginGroup>org.sonarsource.scanner.maven</pluginGroup> </pluginGroups> <profiles> <profile> <id>sonar</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <sonar.jdbc.url>jdbc:postgresql://x.x.x.x:5432/sonar</sonar.jdbc.url> <sonar.jdbc.driver>org.postgresql.Driver</sonar.jdbc.driver> <sonar.jdbc.username>postgres</sonar.jdbc.username> <sonar.jdbc.password></sonar.jdbc.password> <sonar.host.url>http://10.20.0.171:9000</sonar.host.url> </properties> </profile> </profiles> </settings>
在此提醒一点,maven-sonar-plugin的会将分析完结果插入sonar指定的数据库中,所以在此需要保证数据库可以外网访问。postgresql为例:
a.更改postgressql.conf
listen_addresses = '*'
b.更改 pg_hba.conf
# IPv4 local connections: host all all 127.0.0.1/32 md5 host all all 0.0.0.0/0 trust
执行代码分析
mvn clean verify sonar:sonar
以上命令如果出现如下错误:
Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.0.1:sonar
那么需要指定sonar-maven的包名和版本号,如下:
mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.0.1:sonar
重要提示:
如果执行服务器时间和本地不一致同样会报错,很奇葩的。如果没有问题上面那个命令将会执行很长时间,足够上个厕所喝杯☕️了。
结果查看 看起来很多问题,慢慢分析吧。
总结
这篇文章是根据实际工作总结出来的入门教程类文章,所以在框架选型上更多地选择现有的环境。可能很多读者会觉的有更优秀的方案,比如构建引擎Bamboo完全可以用开源的Jenkins来替代;另外sonar怎么分析,如何帮助程序员提高代码质量,我们涉及的还很浅。因自身功力有限,文章不免有偏颇之处,请大家多提点。
长按关注~
以上是关于技术分享|利用maven与bamboo实现应用实时构建和代码检查的主要内容,如果未能解决你的问题,请参考以下文章
尝试与 Bamboo 一起运行时,Selenium 测试挂起