上一篇文章主要是jenkins如何集成gitlab,详情请查看:
汪康:jenkins学习系列之集成gitlabzhuanlan.zhihu.com
一、jenkins集成PMD流程
实际生产中,上线的代码往往要经过检测,满足一些规则才行,这些规则可以是直接使用官方的规则,也可以是自己写的。
因为目前的工作和java有关,所以这里以java代码静态检测 PMD为例子来进行讲解。这里PMD是通过maven命令来启动的。
jenkins集成pmd流程大致如下:
- 用户上传代码到代码库,代码库有代码变更
- jenkins抓取到这次变更,开始下载代码库
- jenkins开始解析maven pom文件,并下载相应的依赖
- jenkins开始pmd检测,检测通过就构建成功,检测失败就发送失败邮件
本篇文章是以gitlab当做代码的存放地址,具体配置可以查看上一篇文章。关于实时抓取代码变更,jenkins中有gitlab的merge request操作以及“Build when a change is pushed to GitLab”选项,但是因为我是用的本地jenkins,而gitlab中web-hook不允许使用localhost,所以第三个选项和第六个选项都勾选不了,这两个选项具体的区别之后用到的时候再讲,这里我采取的其他办法(scm poll、手动构建),如下图所示:
二、jenkins配置
2.1 邮件配置
试想这样一种情景:代码修改很频繁的情况下,项目负责人需要一直跟进jenkins的工作状态,对其来说,也是一件很痛苦的事情。所以在实际项目中,我们需要使用邮件的功能,当构建失败的时候发送邮件给项目负责人。
- 安装“Email Extension Plugin”插件
Email Extension Plugin即可
2. 邮件配置
点击系统管理--->系统设置
3.job中邮件配置
2.2 job配置
因为pmd是用maven来启动的,所以在配置的时候需要先配置好maven环境,具体配置见
汪康:jenkins学习系列之jenkins基本配置zhuanlan.zhihu.com
- 新建一个maven项目
2.job配置如下
- General部分
- 源码管理部分选择git
- build配置如下所示(一般Goals and options填写pmd:pmd,不需要再另外配置pom):
- 构建设置如下图所示:
3.pom文件部分配置如下所示:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
- 1.6指的是jdk的版本
- 如果对于maven的pom文件不太熟悉,请自行百度(因为我也不熟悉^_^)
- 如果在jenkins上出现pom.xml找不到,可能是你配置的地址不对,请自行核查pom文件是否在你的根目录下
- 如果在构建的时候因为有错误导致jenkins一直在执行中,点击叉叉依然停止不了,请自行使用命令行jenkins restart来重启jenkins,然后刷新页面
2.3项目运行以及查看
配置完了以后点击立即构建:
左下角红色代表构建失败,说明有错误需要解决,蓝色代表构建成功。点最近的一次构建:
失败以后会收到相应的邮件,这里我以163邮箱截图为例子:
邮件里面是jenkins的log日志,可以自己去配置邮件模板来解决显示内容的问题。
以上就是jenkins集成PMD的全部过程了。PMD主要是java代码的扫描,还有的是findbugs、checkstyle以及jacoco覆盖率等都可以使用jenkins集成起来,如果你是用的php、C++、C等编程语言,那推荐可以使用sonarqube来做代码检测,sonarqube的代码检查的广度和深度都更高,这个以后用到了再说如何配置。
如果对文章有疑问或者哪里不懂的请联系我,在力所能及的范围内帮助解答;如果文章有错误,也欢迎指出;也希望jenkins的大牛来一起互相交流学习。
微信号:kakaicoco