持续集成Jenkins+sonarqube部署教程

  • Post author:
  • Post category:其他


一 概述

本文主要介绍jenkins,sonarQube的安装与集成,代码分析有sonarQUbe和sonar-runner构建,或者在maven项目情况下可以sonarQbude和maven的构建。介绍jenkins的编译打包部署,代码检查。最后集成jenkins

二 预装软件

  • 软件名称 平台 备注
  • jdk1.8.0_60 Win10 操作系统
  • apache-tomcat-8.0.20 Win10 Tomcat容器
  • Jenkins Win10 端口 8088
  • sonarqube-6.2 Win10 端口 9090
  • sonar-runner-2.6.1 Win10
  • mysql 5.6 Win10
  • nexus-3.2.0-01 Linux Maven私有服务

三 配置环境变量

配置各软件的环境变量方法不展开描述。除nexus外,其余都在安装在本地。



四 sonarQube安装

4.1 将sonaeQbude解压到本地。

修改sonar.properties文件.数据库使用本地的mysql,创建一个名为sonar的库。

当sonarQube启动时候会自动创建表。

建库语句

Js代码

收藏代码


  1. CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;

添加如下内容,sonar默认自带mysql驱动。

Js代码

收藏代码


  1. sonar.jdbc.username=root

  2. sonar.jdbc.password=11111

  3. sonar.jdbc.url=jdbc:mysql:

    //localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true


  4. sonar.jdbc.driverClassName=com.mysql.jdbc.Driver

新的sonarQbude的表相对旧版来说有了新的改动,升级时候需要把旧的表删除。否则会报以下错。

Js代码

收藏代码


  1. exception caught on transport layer [[id: 0xc7fbf08e, /127.0.0.1:55381 => /127.0.0.1:9001]], closing connection

  2. java.io.IOException: 远程主机强迫关闭了一个现有的连接。

4.2 启动sonarQube



运行“StartSonar.bat”, 访问9000端口,sonar默认自带了jetty服务器。

默认用户名密码 admin、admin。一些设置和菜单只有在登陆之后才能看到。

因个人9000端口有其他用途,将端口改为9090.

Java代码

收藏代码


  1. sonar.web.port=

    9090

4.3汉化sonarQube

官网地址 http://docs.sonarqube.org/display/PLUG/Plugin+Library


将sonar-l10n-zh-plugin-1.13.jar放置于sonarqube-6.2\extensions\plugins下。重启sonarQube。

soanrQube有一些需要到的插件,用于代码分析。

插件介绍

插件的下载地址为:http://docs.codehaus.org/display/SONAR/Plugin+Library

将下载后的插件上传到${SONAR_HOME}extensions\plugins目录下,重新启动sonar。

sonar默认集成了Java Ecosystem插件,该插件是一组插件的合集

(1)Java [sonar-java-plugin]:java源代码解析,计算指标等

(2)Squid [sonar-squid-java-plugin]:检查违反Sonar定义规则的代码

(3)Checkstyle [sonar-checkstyle-plugin]:使用CheckStyle检查违反统一代码编写风格的代码

(4)FindBugs [sonar-findbugs-plugin]:使用FindBugs检查违反规则的缺陷代码

(5)PMD [sonar-pmd-plugin]:使用pmd检查违反规则的代码

(6)Surefire [sonar-surefire-plugin]:使用Surefire执行单元测试

(7)Cobertura [sonar-cobertura-plugin]:使用Cobertura获取代码覆盖率

(8)JaCoCo [sonar-jacoco-plugin]:使用JaCOCO获取代码覆盖率

常用的插件:

(1)

JavaScript

代码检查:http://docs.codehaus.org/display/SONAR/JavaScript+Plugin

(2)

Python

代码检查:http://docs.codehaus.org/display/SONAR/Python+Plugin

(3)Web页面检查(HTML、JSP、JSF、Ruby、

PHP

等):http://docs.codehaus.org/display/SONAR/Web+Plugin

(4)xml文件检查:http://docs.codehaus.org/display/SONAR/XML+Plugin

(5)scm源码库统计分析:http://docs.codehaus.org/display/SONAR/SCM+Stats+Plugin

(6)文件度量:http://docs.codehaus.org/display/SONAR/Tab+Metrics+Plugin

(7)中文语言包:http://docs.codehaus.org/display/SONAR/Chinese+Pack

(8)时间表显示度量结果:http://docs.codehaus.org/display/SONAR/Timeline+Plugin

(9)度量结果演进图:http://docs.codehaus.org/display/SONAR/Motion+Chart+Plugin

(b)插件配置示例(本段内容来自

http://www.ibm.com/developerworks/cn/java/j-lo-sonar/

五 sonar-runner安装

5.1 修改sonar-runnerc下的conf的sonar-scanner.properties配置文件

Java代码

收藏代码


  1. sonar.host.url=http:

    //localhost:9090


  2. sonar.jdbc.username=root

  3. sonar.jdbc.password=

    11111


  4. sonar.jdbc.url=jdbc:mysql:

    //10.10.5.64:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true


  5. sonar.jdbc.driverClassName=com.mysql.jdbc.Driver

5.2  在项目的根目录下添加文件sonar-project.properties

1 单一个项目

Java代码

收藏代码


  1. sonar.projectKey=pljj

  2. sonar.projectName=pljj

  3. sonar.projectVersion=

    1.0

    -SNAPSHOT

  4. sonar.sources=src/main/java

  5. sonar.tests=src/test/java

  6. sonar.binaries=target/classes


  7. sonar.language=java

2 maven多模块

Java代码

收藏代码


  1. sonar.projectKey=pljj

  2. sonar.projectName=pljj

  3. sonar.projectVersion=

    1.0


  4. sonar.sources=.

  5. sonar.language=java

  6. sonar.sourceEncoding=UTF-

    8

或者

Java代码

收藏代码


  1. sonar.projectKey=com.pljj-job

  2. sonar.projectName=elastic-job

  3. sonar.projectVersion=

    1.1

    .

    0


  4. # Set modules IDs

  5. sonar.modules=pljj-core,pljj-console,pljj-spring

  6. # Modules inherit properties set at parent level

  7. sonar.sources=src/main/java

  8. sonar.tests=src/test/java

  9. sonar.java.binaries=target

  10. sonar.language=java

5.3,运行sonar-runner

在“开始”》“运行”中输入cmd切换的项目更目录 输入“sonar-runner”

以下为成功目录

登陆http://localhost:9090/ 查看代码扫描结果,帐号密码admin/admin


六   mave安装和sonarQbude配合使用

6.1在maven官网下载maven


http://maven.apache.org/download.cgi

打开cmd窗口数据 mvn –v 查看maven版本,打印如下表示安装成功。



6.2 在%M2_HOME%\conf\setting.xml中输入下面内容(直接用下面的内容覆盖原文件)

Xml代码

收藏代码



  1. <?


    xmlversion


    xmlversion

    =

    “1.0”


    encoding

    =

    “UTF-8”


    ?>



  2. <


    settingsxmlns


    settingsxmlns

    =

    “http://maven.apache.org/SETTINGS/1.0.0”



  3. xmlns:xsi

    =

    “http://www.w3.org/2001/XMLSchema-instance”



  4. xsi:schemaLocation

    =

    “http://maven.apache.org/SETTINGS/1.0.0http://maven.apache.org/xsd/settings-1.0.0.xsd”


    >



  5. <


    profiles


    >



  6. <


    profile


    >



  7. <


    id


    >

    sonar

    </


    id


    >



  8. <


    activation


    >



  9. <


    activeByDefault


    >

    true

    </


    activeByDefault


    >



  10. </


    activation


    >



  11. <


    properties


    >



  12. <!– EXAMPLE FOR MYSQL–>



  13. <


    sonar.jdbc.url


    >


  14. jdbc:mysql://localhost:3306/sonar?

    useUnicode

    =

    true

    &amp;

    characterEncoding

    =

    utf8



  15. </


    sonar.jdbc.url


    >



  16. <


    sonar.jdbc.driverClassName


    >

    com.mysql.jdbc.Driver

    </


    sonar.jdbc.driverClassName


    >



  17. <


    sonar.jdbc.username


    >

    root

    </


    sonar.jdbc.username


    >



  18. <


    sonar.jdbc.password


    >

    11111

    </


    sonar.jdbc.password


    >




  19. <!– SERVER ON A REMOTE HOST–>



  20. <


    sonar.host.url


    >

    http://localhost:9000

    </


    sonar.host.url


    >



  21. </


    properties


    >



  22. </


    profile


    >



  23. </


    profiles


    >



  24. </


    settings


    >

使用asonr-maven-plugin进行分析,在项目的pom.xml里面添加

参考官网:

http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Maven

Xml代码

收藏代码



  1. <


    build


    >



  2. <


    pluginManagement


    >



  3. <


    plugins


    >



  4. <


    plugin


    >



  5. <


    groupId


    >

    org.codehaus.mojo

    </


    groupId


    >



  6. <


    artifactId


    >

    sonar-maven-plugin

    </


    artifactId


    >



  7. <


    version


    >

    2.7.1

    </


    version


    >



  8. </


    plugin


    >



  9. </


    plugins


    >



  10. </


    pluginManagement


    >



  11. </


    build


    >

保存后找到你需要被sonar分析的maven项目根目录, 被分析的项目必须带有pom文件

6.3、在CMD窗口下,命令行进入到项目文件的目录中去,然后再输入mvn sonar:soanr进行测试

6.4、在浏览器中输入http://localhost:9000查看结果。

7 ,nexus安装

nexus仓库并不是必须的,不使用私有仓库情况,不必安装。

7.1下载nexus

http://www.sonatype.org/nexus/go/ 我的是linux版本

将安装包复制到需要安装的机器,我安装在/opt/soft/nexus


tar –zxvf nexus-latest-bundle.tar.gz


解压后会出现两个目录





cd nexus-2.7.7-01/bin


./nexus


输出如下:





列出了nexus的各种命令


./nexus start 启动服务


然后在本机访问http://localhost:8081/nexus,默认用户名密码:admin,admin123



如果是远程机访问还需要开通8081端口,操作如下:

Java代码

收藏代码


  1. /sbin/iptables -I INPUT -p tcp –dport

    8081

    -j ACCEPT #开启

    8081

    端口

  2. /etc/rc.d/init.d/iptables save #保存配置

  3. /etc/rc.d/init.d/iptables restart #重启服务

  4. 查看端口是否已经开放

  5. /etc/init.d/iptables status

7.2 项目本地pom.xml配置

Xml代码

收藏代码



  1. <


    project


    xmlns

    =

    “http://maven.apache.org/POM/4.0.0”


    xmlns:xsi

    =

    “http://www.w3.org/2001/XMLSchema-instance”



  2. xsi:schemaLocation

    =

    “http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”


    >



  3. <


    modelVersion


    >

    4.0.0

    </


    modelVersion


    >




  4. <


    modules


    >



  5. <


    module


    >

    pljj-common

    </


    module


    >



  6. <


    module


    >

    pljj-core

    </


    module


    >



  7. <


    module


    >

    pljj-report

    </


    module


    >



  8. </


    modules


    >




  9. <


    groupId


    >

    com.pljj

    </


    groupId


    >



  10. <


    artifactId


    >

    pljj-pom

    </


    artifactId


    >



  11. <


    version


    >

    0.0.1-SNAPSHOT

    </


    version


    >



  12. <


    packaging


    >

    pom

    </


    packaging


    >



  13. <


    name


    >

    pljj-pom

    </


    name


    >



  14. <


    url


    >

    http://maven.apache.org

    </


    url


    >




  15. <


    properties


    >



  16. <


    project.build.sourceEncoding


    >

    UTF-8

    </


    project.build.sourceEncoding


    >



  17. <


    project.groupId


    >

    com.pljj

    </


    project.groupId


    >



  18. <


    project.version


    >

    0.0.1-SNAPSHOT

    </


    project.version


    >



  19. <


    spring.version


    >

    3.2.9.RELEASE

    </


    spring.version


    >



  20. <


    lucene.version


    >

    3.6.2

    </


    lucene.version


    >



  21. <


    querydsl.version


    >

    2.9.0

    </


    querydsl.version


    >



  22. <


    jackson.version


    >

    2.0.6

    </


    jackson.version


    >



  23. <


    shiro.version


    >

    1.2.1

    </


    shiro.version


    >



  24. </


    properties


    >




  25. <


    dependencies


    >



  26. <!– dependency of apache-commons –>



  27. <


    dependency


    >



  28. <


    groupId


    >

    commons-beanutils

    </


    groupId


    >



  29. <


    artifactId


    >

    commons-beanutils

    </


    artifactId


    >



  30. <


    version


    >

    1.9.2

    </


    version


    >



  31. </


    dependency


    >



  32. <


    dependency


    >



  33. <


    groupId


    >

    org.apache.commons

    </


    groupId


    >



  34. <


    artifactId


    >

    commons-lang3

    </


    artifactId


    >



  35. <


    version


    >

    3.1

    </


    version


    >



  36. </


    dependency


    >



  37. <


    dependency


    >



  38. <


    groupId


    >

    commons-cli

    </


    groupId


    >



  39. <


    artifactId


    >

    commons-cli

    </


    artifactId


    >



  40. <


    version


    >

    1.2

    </


    version


    >



  41. </


    dependency


    >



  42. <


    dependency


    >



  43. <


    groupId


    >

    commons-codec

    </


    groupId


    >



  44. <


    artifactId


    >

    commons-codec

    </


    artifactId


    >



  45. <


    version


    >

    1.6

    </


    version


    >



  46. </


    dependency


    >



  47. <


    dependency


    >



  48. <


    groupId


    >

    commons-io

    </


    groupId


    >



  49. <


    artifactId


    >

    commons-io

    </


    artifactId


    >



  50. <


    version


    >

    2.2

    </


    version


    >



  51. </


    dependency


    >



  52. <


    dependency


    >



  53. <


    groupId


    >

    commons-net

    </


    groupId


    >



  54. <


    artifactId


    >

    commons-net

    </


    artifactId


    >



  55. <


    version


    >

    3.3

    </


    version


    >



  56. </


    dependency


    >



  57. <


    dependency


    >



  58. <


    groupId


    >

    commons-fileupload

    </


    groupId


    >



  59. <


    artifactId


    >

    commons-fileupload

    </


    artifactId


    >



  60. <


    version


    >

    1.3.1

    </


    version


    >



  61. </


    dependency


    >



  62. <


    dependency


    >



  63. <


    groupId


    >

    commons-dbcp

    </


    groupId


    >



  64. <


    artifactId


    >

    commons-dbcp

    </


    artifactId


    >



  65. <


    version


    >

    1.3

    </


    version


    >



  66. </


    dependency


    >



  67. <


    dependency


    >



  68. <


    groupId


    >

    org.apache.ant

    </


    groupId


    >



  69. <


    artifactId


    >

    ant

    </


    artifactId


    >



  70. <


    version


    >

    1.8.4

    </


    version


    >



  71. </


    dependency


    >




  72. <!– dependency of lucene –>



  73. <


    dependency


    >



  74. <


    groupId


    >

    org.apache.lucene

    </


    groupId


    >



  75. <


    artifactId


    >

    lucene-core

    </


    artifactId


    >



  76. <


    version


    >

    ${lucene.version}

    </


    version


    >



  77. </


    dependency


    >



  78. <


    dependency


    >



  79. <


    groupId


    >

    org.apache.lucene

    </


    groupId


    >



  80. <


    artifactId


    >

    lucene-analyzers

    </


    artifactId


    >



  81. <


    version


    >

    ${lucene.version}

    </


    version


    >



  82. </


    dependency


    >



  83. <


    dependency


    >



  84. <


    groupId


    >

    org.apache.lucene

    </


    groupId


    >



  85. <


    artifactId


    >

    lucene-highlighter

    </


    artifactId


    >



  86. <


    version


    >

    ${lucene.version}

    </


    version


    >



  87. </


    dependency


    >



  88. <


    dependency


    >



  89. <


    groupId


    >

    org.apache.lucene

    </


    groupId


    >



  90. <


    artifactId


    >

    lucene-memory

    </


    artifactId


    >



  91. <


    version


    >

    ${lucene.version}

    </


    version


    >



  92. </


    dependency


    >



  93. <


    dependency


    >



  94. <


    groupId


    >

    org.apache.lucene

    </


    groupId


    >



  95. <


    artifactId


    >

    lucene-queries

    </


    artifactId


    >



  96. <


    version


    >

    ${lucene.version}

    </


    version


    >



  97. </


    dependency


    >




  98. <!– dependency of springframework –>



  99. <


    dependency


    >



  100. <


    groupId


    >

    org.springframework

    </


    groupId


    >



  101. <


    artifactId


    >

    spring-core

    </


    artifactId


    >



  102. <


    version


    >

    ${spring.version}

    </


    version


    >



  103. </


    dependency


    >



  104. <


    dependency


    >



  105. <


    groupId


    >

    org.springframework

    </


    groupId


    >



  106. <


    artifactId


    >

    spring-context-support

    </


    artifactId


    >



  107. <


    version


    >

    ${spring.version}

    </


    version


    >



  108. </


    dependency


    >



  109. <


    dependency


    >



  110. <


    groupId


    >

    org.springframework

    </


    groupId


    >



  111. <


    artifactId


    >

    spring-web

    </


    artifactId


    >



  112. <


    version


    >

    ${spring.version}

    </


    version


    >



  113. </


    dependency


    >



  114. <


    dependency


    >



  115. <


    groupId


    >

    org.springframework

    </


    groupId


    >



  116. <


    artifactId


    >

    spring-webmvc

    </


    artifactId


    >



  117. <


    version


    >

    ${spring.version}

    </


    version


    >



  118. </


    dependency


    >



  119. <


    dependency


    >



  120. <


    groupId


    >

    org.springframework.data

    </


    groupId


    >



  121. <


    artifactId


    >

    spring-data-commons-core

    </


    artifactId


    >



  122. <


    version


    >

    1.4.1.RELEASE

    </


    version


    >



  123. </


    dependency


    >



  124. <


    dependency


    >



  125. <


    groupId


    >

    org.springframework.data

    </


    groupId


    >



  126. <


    artifactId


    >

    spring-data-jpa

    </


    artifactId


    >



  127. <


    version


    >

    1.2.0.RELEASE

    </


    version


    >



  128. </


    dependency


    >




  129. <


    dependency


    >



  130. <


    groupId


    >

    org.slf4j

    </


    groupId


    >



  131. <


    artifactId


    >

    slf4j-api

    </


    artifactId


    >



  132. <


    version


    >

    1.7.2

    </


    version


    >



  133. </


    dependency


    >




  134. <


    dependency


    >



  135. <


    groupId


    >

    ch.qos.logback

    </


    groupId


    >



  136. <


    artifactId


    >

    logback-classic

    </


    artifactId


    >



  137. <


    version


    >

    1.0.7

    </


    version


    >



  138. </


    dependency


    >



  139. <


    dependency


    >



  140. <


    groupId


    >

    ch.qos.logback

    </


    groupId


    >



  141. <


    artifactId


    >

    logback-core

    </


    artifactId


    >



  142. <


    version


    >

    1.0.7

    </


    version


    >



  143. </


    dependency


    >




  144. <!– dependency of freemarker –>



  145. <


    dependency


    >



  146. <


    groupId


    >

    org.freemarker

    </


    groupId


    >



  147. <


    artifactId


    >

    freemarker

    </


    artifactId


    >



  148. <


    version


    >

    2.3.19

    </


    version


    >



  149. </


    dependency


    >




  150. <!– dependency of querydsl –>



  151. <


    dependency


    >



  152. <


    groupId


    >

    com.mysema.querydsl

    </


    groupId


    >



  153. <


    artifactId


    >

    querydsl-jpa

    </


    artifactId


    >



  154. <


    version


    >

    ${querydsl.version}

    </


    version


    >



  155. </


    dependency


    >



  156. <


    dependency


    >



  157. <


    groupId


    >

    com.mysema.querydsl

    </


    groupId


    >



  158. <


    artifactId


    >

    querydsl-lucene

    </


    artifactId


    >



  159. <


    version


    >

    ${querydsl.version}

    </


    version


    >



  160. </


    dependency


    >




  161. <!– dependency of hibernate-jpa –>



  162. <


    dependency


    >



  163. <


    groupId


    >

    org.hibernate

    </


    groupId


    >



  164. <


    artifactId


    >

    hibernate-core

    </


    artifactId


    >



  165. <


    version


    >

    3.6.10.Final

    </


    version


    >



  166. </


    dependency


    >



  167. <


    dependency


    >



  168. <


    groupId


    >

    org.hibernate

    </


    groupId


    >



  169. <


    artifactId


    >

    hibernate-entitymanager

    </


    artifactId


    >



  170. <


    version


    >

    3.6.10.Final

    </


    version


    >



  171. </


    dependency


    >



  172. <


    dependency


    >



  173. <


    groupId


    >

    org.hibernate.javax.persistence

    </


    groupId


    >



  174. <


    artifactId


    >

    hibernate-jpa-2.0-api

    </


    artifactId


    >



  175. <


    version


    >

    1.0.1.Final

    </


    version


    >



  176. </


    dependency


    >



  177. <


    dependency


    >



  178. <


    groupId


    >

    org.hibernate

    </


    groupId


    >



  179. <


    artifactId


    >

    hibernate-validator

    </


    artifactId


    >



  180. <


    version


    >

    4.2.0.Final

    </


    version


    >



  181. </


    dependency


    >




  182. <!– dependency of shiro –>



  183. <


    dependency


    >



  184. <


    groupId


    >

    org.apache.shiro

    </


    groupId


    >



  185. <


    artifactId


    >

    shiro-web

    </


    artifactId


    >



  186. <


    version


    >

    ${shiro.version}

    </


    version


    >



  187. </


    dependency


    >



  188. <


    dependency


    >



  189. <


    groupId


    >

    org.apache.shiro

    </


    groupId


    >



  190. <


    artifactId


    >

    shiro-ehcache

    </


    artifactId


    >



  191. <


    version


    >

    ${shiro.version}

    </


    version


    >



  192. </


    dependency


    >



  193. <


    dependency


    >



  194. <


    groupId


    >

    org.apache.shiro

    </


    groupId


    >



  195. <


    artifactId


    >

    shiro-spring

    </


    artifactId


    >



  196. <


    version


    >

    ${shiro.version}

    </


    version


    >



  197. </


    dependency


    >




  198. <!– dependency of jcaptcha –>



  199. <


    dependency


    >



  200. <


    groupId


    >

    com.octo.captcha

    </


    groupId


    >



  201. <


    artifactId


    >

    jcaptcha

    </


    artifactId


    >



  202. <


    version


    >

    2.0-alpha-1

    </


    version


    >



  203. </


    dependency


    >




  204. <!– dependency of imgscalr –>



  205. <


    dependency


    >



  206. <


    groupId


    >

    org.imgscalr

    </


    groupId


    >



  207. <


    artifactId


    >

    imgscalr-lib

    </


    artifactId


    >



  208. <


    version


    >

    4.2

    </


    version


    >



  209. </


    dependency


    >




  210. <!– dependency of filters –>



  211. <


    dependency


    >



  212. <


    groupId


    >

    com.jhlabs

    </


    groupId


    >



  213. <


    artifactId


    >

    filters

    </


    artifactId


    >



  214. <


    version


    >

    2.0.235

    </


    version


    >



  215. </


    dependency


    >




  216. <!– dependency of jackson –>



  217. <


    dependency


    >



  218. <


    groupId


    >

    com.fasterxml.jackson.core

    </


    groupId


    >



  219. <


    artifactId


    >

    jackson-annotations

    </


    artifactId


    >



  220. <


    version


    >

    ${jackson.version}

    </


    version


    >



  221. </


    dependency


    >



  222. <


    dependency


    >



  223. <


    groupId


    >

    com.fasterxml.jackson.core

    </


    groupId


    >



  224. <


    artifactId


    >

    jackson-core

    </


    artifactId


    >



  225. <


    version


    >

    ${jackson.version}

    </


    version


    >



  226. </


    dependency


    >



  227. <


    dependency


    >



  228. <


    groupId


    >

    com.fasterxml.jackson.core

    </


    groupId


    >



  229. <


    artifactId


    >

    jackson-databind

    </


    artifactId


    >



  230. <


    version


    >

    ${jackson.version}

    </


    version


    >



  231. </


    dependency


    >



  232. <


    dependency


    >



  233. <


    groupId


    >

    com.fasterxml.jackson.dataformat

    </


    groupId


    >



  234. <


    artifactId


    >

    jackson-dataformat-xml

    </


    artifactId


    >



  235. <


    version


    >

    ${jackson.version}

    </


    version


    >



  236. </


    dependency


    >




  237. <!– dependency of htmlparser –>



  238. <


    dependency


    >



  239. <


    groupId


    >

    org.htmlparser

    </


    groupId


    >



  240. <


    artifactId


    >

    htmlparser

    </


    artifactId


    >



  241. <


    version


    >

    1.6

    </


    version


    >



  242. </


    dependency


    >




  243. <!– dependency of joda –>



  244. <


    dependency


    >



  245. <


    groupId


    >

    joda-time

    </


    groupId


    >



  246. <


    artifactId


    >

    joda-time

    </


    artifactId


    >



  247. <


    version


    >

    2.1

    </


    version


    >



  248. </


    dependency


    >




  249. <


    dependency


    >



  250. <


    groupId


    >

    com.oracle

    </


    groupId


    >



  251. <


    artifactId


    >

    ojdbc14

    </


    artifactId


    >



  252. <


    version


    >

    10.2.0.3.0

    </


    version


    >



  253. </


    dependency


    >



  254. <!–

    <


    dependency


    >



  255. <


    groupId


    >

    com.oracle

    </


    groupId


    >



  256. <


    artifactId


    >

    ojdbc6

    </


    artifactId


    >



  257. <


    version


    >

    12.1.0.1

    </


    version


    >



  258. </


    dependency


    >



    >





  259. <


    dependency


    >



  260. <


    groupId


    >

    org.aspectj

    </


    groupId


    >



  261. <


    artifactId


    >

    aspectjweaver

    </


    artifactId


    >



  262. <


    version


    >

    1.7.2

    </


    version


    >



  263. </


    dependency


    >




  264. <


    dependency


    >



  265. <


    groupId


    >

    javax.servlet

    </


    groupId


    >



  266. <


    artifactId


    >

    servlet-api

    </


    artifactId


    >



  267. <


    version


    >

    2.4

    </


    version


    >



  268. <


    scope


    >

    provided

    </


    scope


    >



  269. </


    dependency


    >




  270. <


    dependency


    >



  271. <


    groupId


    >

    org.apache.httpcomponents

    </


    groupId


    >



  272. <


    artifactId


    >

    httpcore

    </


    artifactId


    >



  273. <!–<scope>test</scope>–>



  274. <


    version


    >

    4.3.2

    </


    version


    >



  275. </


    dependency


    >




  276. <


    dependency


    >



  277. <


    groupId


    >

    org.apache.httpcomponents

    </


    groupId


    >



  278. <


    artifactId


    >

    httpclient

    </


    artifactId


    >



  279. <!–<scope>test</scope>–>



  280. <


    version


    >

    4.3.2

    </


    version


    >



  281. </


    dependency


    >




  282. <


    dependency


    >



  283. <


    groupId


    >

    org.codehaus.woodstox

    </


    groupId


    >



  284. <


    artifactId


    >

    stax2-api

    </


    artifactId


    >



  285. <


    version


    >

    4.0.0

    </


    version


    >



  286. </


    dependency


    >




  287. <


    dependency


    >



  288. <


    groupId


    >

    org.quartz-scheduler

    </


    groupId


    >



  289. <


    artifactId


    >

    quartz

    </


    artifactId


    >



  290. <


    version


    >

    2.1.7

    </


    version


    >



  291. </


    dependency


    >




  292. <


    dependency


    >



  293. <


    groupId


    >

    junit

    </


    groupId


    >



  294. <


    artifactId


    >

    junit

    </


    artifactId


    >



  295. <


    version


    >

    3.8.1

    </


    version


    >



  296. <


    scope


    >

    test

    </


    scope


    >



  297. </


    dependency


    >



  298. </


    dependencies


    >



  299. <


    distributionManagement


    >



  300. <


    repository


    >



  301. <


    id


    >

    nexus

    </


    id


    >



  302. <


    name


    >

    Releases

    </


    name


    >



  303. <


    url


    >

    http://私服ip:8081/repository/maven-releases

    </


    url


    >



  304. </


    repository


    >



  305. <


    snapshotRepository


    >



  306. <


    id


    >

    nexus

    </


    id


    >



  307. <


    name


    >

    Snapshot

    </


    name


    >



  308. <


    url


    >

    http://私服ip:8081/repository/maven-snapshots

    </


    url


    >



  309. </


    snapshotRepository


    >



  310. </


    distributionManagement


    >



  311. <


    build


    >



  312. <


    defaultGoal


    >

    compile

    </


    defaultGoal


    >



  313. <


    finalName


    >

    page

    </


    finalName


    >



  314. <


    plugins


    >



  315. <


    plugin


    >



  316. <


    groupId


    >

    org.apache.maven.plugins

    </


    groupId


    >



  317. <


    artifactId


    >

    maven-surefire-plugin

    </


    artifactId


    >



  318. <


    version


    >

    2.6

    </


    version


    >



  319. <


    configuration


    >



  320. <


    skip


    >

    true

    </


    skip


    >



  321. </


    configuration


    >



  322. </


    plugin


    >



  323. <


    plugin


    >



  324. <


    groupId


    >

    org.apache.maven.plugins

    </


    groupId


    >



  325. <


    artifactId


    >

    maven-compiler-plugin

    </


    artifactId


    >



  326. <


    version


    >

    2.1

    </


    version


    >



  327. <


    configuration


    >



  328. <


    source


    >

    1.6

    </


    source


    >



  329. <


    target


    >

    1.6

    </


    target


    >



  330. </


    configuration


    >



  331. </


    plugin


    >



  332. </


    plugins


    >



  333. </


    build


    >



  334. </


    project


    >

7.3 maven配置,修改conf下的setting.xml

Xml代码

收藏代码



  1. <


    settings


    >




  2. <


    pluginGroups


    >



  3. <


    pluginGroup


    >

    org.sonatype.plugins

    </


    pluginGroup


    >



  4. </


    pluginGroups


    >




  5. <


    servers


    >



  6. <


    server


    >



  7. <


    id


    >

    nexus

    </


    id


    >



  8. <


    username


    >

    admin

    </


    username


    >



  9. <


    password


    >

    admin123

    </


    password


    >



  10. </


    server


    >



  11. </


    servers


    >




  12. <


    mirrors


    >



  13. <


    mirror


    >



  14. <


    id


    >

    nexus

    </


    id


    >



  15. <


    mirrorOf


    >

    *

    </


    mirrorOf


    >



  16. <


    url


    >

    http://私服ip:8081/repository/maven-public/

    </


    url


    >



  17. </


    mirror


    >



  18. <


    mirror


    >



  19. <


    id


    >

    repo2

    </


    id


    >



  20. <


    mirrorOf


    >

    central

    </


    mirrorOf


    >



  21. <


    name


    >

    Human Readable Name for this Mirror.

    </


    name


    >



  22. <


    url


    >

    http://repo2.maven.org/maven2/

    </


    url


    >



  23. </


    mirror


    >




  24. </


    mirrors


    >




  25. <


    profiles


    >



  26. <


    profile


    >



  27. <


    id


    >

    nexus

    </


    id


    >



  28. <


    repositories


    >



  29. <


    repository


    >



  30. <


    id


    >

    central

    </


    id


    >



  31. <


    url


    >

    http://私服ip:8081/repository/maven-central

    </


    url


    >



  32. <


    releases


    >


    <


    enabled


    >

    true

    </


    enabled


    >


    </


    releases


    >



  33. <


    snapshots


    >


    <


    enabled


    >

    true

    </


    enabled


    >


    </


    snapshots


    >



  34. </


    repository


    >



  35. </


    repositories


    >



  36. <


    pluginRepositories


    >



  37. <


    pluginRepository


    >



  38. <


    id


    >

    central

    </


    id


    >



  39. <


    url


    >

    http://私服ip:8081/repository/maven-central

    </


    url


    >



  40. <


    releases


    >


    <


    enabled


    >

    true

    </


    enabled


    >


    </


    releases


    >



  41. <


    snapshots


    >


    <


    enabled


    >

    true

    </


    enabled


    >


    </


    snapshots


    >



  42. </


    pluginRepository


    >



  43. </


    pluginRepositories


    >



  44. </


    profile


    >



  45. </


    profiles


    >



  46. <


    activeProfiles


    >



  47. <


    activeProfile


    >

    nexus

    </


    activeProfile


    >



  48. </


    activeProfiles


    >



  49. </


    settings


    >

然后执行mvn clean deploy

八 jenkins,sonar和 maven集成

8.1 jenkins安装

1,Jenkins的默认工作间在C:\Users\xxxxxx.jenkins,修改工作空为间D:\jenkins,只需要添加环境变量


JENKINS_HOME=D:\jenkins

2,从jenkins官网下载jenkins:https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins点击“download jenkins.war”

下载的为jenkins.zip将其更改为jenkins.war包,有两种运行方式


a. 运行 java -jar jenkins.war,采用内置jetty服务器。

b. 将下载的war包文件部署到 servlet 容器,然后启动容器(推荐这种方式)。


用浏览器打开http://localhost:8080/ jenkins,访问Jenkins主页。

8.2 修改jenkins配置

为了让

jenkins

可以在构建项目的时候执行

sonar

,所以我们需要在jenkins上安装插件 。

同时为了可以使用svn,maven,email也同样需要安装插件。

image_1b4i6426o4sb18mp16ob4vl1evd4o.png-121.8kB

现在就可以进行配置,让jenkins和sonar结合在一起。这样我们构建项目的时候就会进行代码检测

image_1b4i64e6l199910vo1u3d1tsh148k55.png-140.1kB

1,系统设置

1)全局属性 -Tool Locations




2) SonarQube servers



3) Jenkins Location


3) Extended E-mail Notification

邮件配置中的密码均为,邮件的takens,直接stmp的端口,还是回不能成功,连接不到,改为ssl,端口为465。成功发送邮件。

参考  https://zhuanlan.zhihu.com/p/22810691。



4) 邮件通知

可以通过这个功能测试邮件是否可以正常使用。

用户名不带@163.com,使用ssl,465端口。在不勾选情况下,使用smtp的25端口发送失败。




2 Global Tool Configuration

点击“系统管理”页面,点击Global Tool Configuration。

image_1b4i650bnnp2n7v1idt1f9o6vu5v.png-125.7kB

增加jdk,maven,sonar-runner等环境地址。如jdk,点击新增,去掉【自动安装】的勾选。




配完后点击保存。

7.4 构建一个自由风格的项目


1)增加svn的url和需要密码验证是后输入帐号密码




2)构建触发器,3分钟触发一次


3)构建 编辑我们的项目,选择最下放。找到构建

image_1b4i65rj31qufmou16u417q914hn6p.png-27.2kB

  1. Not authorized. Please check the properties sonar.login and sonar.password.




4)sonarQbude必须把sonar-project.properties的内容粘贴进来。否则构建时候,会报异常,



5)构建后操作.增加一个邮件通知的管理。

转载自:

https://zhuanlan.zhihu.com/p/22810691

进入到具体的某一job中配置邮件通知


选择html

点击“add trigger”选择awyas


Html代码

收藏代码



  1. <


    hr


    />


  2. (本邮件是程序自动下发的,请勿回复!)

    <


    br


    />


    <


    hr


    />


  3. 项目名称:$PROJECT_NAME

    <


    br


    />


    <


    hr


    />


  4. 构建编号:test_$BUILD_NUMBER

    <


    br


    />


    <


    hr


    />


  5. svn版本号:${SVN_REVISION}

    <


    br


    />


    <


    hr


    />


  6. 构建状态:$BUILD_STATUS

    <


    br


    />


    <


    hr


    />


  7. 触发原因:${CAUSE}

    <


    br


    />


    <


    hr


    />


  8. 构建日志地址:

    <


    a


    href

    =

    “${BUILD_URL}console”


    >

    ${BUILD_URL}console

    </


    a


    >


    <


    br


    />


    <


    hr


    />


  9. 构建地址:

    <


    a


    href

    =

    “$BUILD_URL”


    >

    $BUILD_URL

    </


    a


    >


    <


    br


    />


    <


    hr


    />


  10. 变更集:${JELLY_SCRIPT,

    template

    =

    “html”

    }

    <


    br


    />


    <


    hr


    />

将构建日志压缩作为附件也添加到邮件当中发送,需要注意的是,每一次构建都会产生一个报告文档,仓库里会包含有之前构建的所有的报告文档,

所以需要打包的是当前这次产生的报告文档,不是之前的构建产生的文档点击应用“apply”,然后保存

八 构建项目

填写完毕后,我们点击保存


image_1b4i66u061lhp1qkjvk6124a1k497j.png-90.1kB

点击开始构建,则开始构建job,点击sonarQbude可以查看分析的结果。点击具体的构建记录可以看到

构建的日志。

Build History的#50,#49可以看到构建的日志。