zoukankan      html  css  js  c++  java
  • 持续集成Jenkins+sonarqube部署教程

    1 引言

    1.1 文档概要

    本文主要介绍jenkins,sonar的安装与集成,基于ant,maven构建。用一个例子介绍jenkins的编译打包部署,代码检查。最后集成jenkins。(现阶段只是简易的集成,后续需要修改accio源码做深度集成)

    1.2 预计读者

    系统配置管理员:要懂得搭建持续集成环境,有问题可以排查;
    架构师:了解持续集成实现原理,协助项目接入持续集成。项目在持续集成环境运行中,进行维护、分析构建异常等;
    维护人员:重启服务、排查环境问题、项目接入支持;

    1.3 关于持续集成

    提供一套可以持续集成项目流程。能够给接入的项目提供每日构建、自动化测试的支持,提高项目质量、节省项目成本。

    2 预装软件

    软件名称 平台 备注
    jdk1.7.0_17 Win7 操作系统
    apache-ant-1.9.6 Win7 Ant
    apache-tomcat-6.0.13 Win7 Tomcat容器

    3 安装列表

    软件名称 平台 备注
    Jenkins Win7 端口 8080
    sonarqube-5.1.2 Win7 端口 9000
    sonar-runner-2.4 Win7 
    nexus-2.7.1-01 Linux Maven私有服务

    4 jenkins安装步骤

    4.1 安装Jenkins服务端

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

    下载的为jenkins.zip将其更改为jenkins.war包,有两种运行方式
    1. 运行 java -jar jenkins.war,采用内置jetty服务器。
    2. 将下载的war包文件部署到 servlet 容器,然后启动容器(推荐这种方式)。
    用浏览器打开http://localhost:8080/ jenkins,访问Jenkins主页。

    安装成功!

    4.2 修改jenkins工作空间

    Jenkins的默认工作间在C:Usersxxxxxx.jenkins,修改工作空为间D:jenkins,只需要添加环境变量
    JENKINS_HOME=D:jenkins

    重启jenkins;

    4.3 基本配置

    配置JAVA_HOME ANT_HOME。只有配置了这三项,Jenkins才能支持Ant构建的Jave项目。
    地址:
    JAVA_HOME=D:Program Files (x86)Javajdk1.7.0_17
    ANT_HOME=D:ant-1.6.5

    用浏览器打开http://localhost:8080/ ,访问Jenkins主页。
    点击“系统管理”页面

    1. Utf-8编码
    Your container doesn't use UTF-8 to decode URLs. If you use non-ASCII characters as a job name etc, this will cause problems. See Containers and Tomcat i18n for more details.

    Jenkins建议在tomcat中使用utf-8编码,配置tomcat下conf目录的server.xml文件

    2.系统设置
    在已运行的Jenkins主页中,点击左侧的系统管理—>系统设置进入如下界面:

    3.JDK、Ant配置


    4.Jenkins Location配置

    5.邮件通知配置

    注意:如果使用qq邮箱需要开通SMTP服务,打开邮箱点击“设置”》“账户”

    4.4 邮件插件安装

    Jenkins默认的邮件发送功能非常弱,多人发送、按情况发送、邮件模板都支持不好,因此需要按照增强版的邮件插件。
    用浏览器打开http://localhost:8080/ ,访问Jenkins主页。
    点击“系统管理”-》“管理插件”

    选择“可选插件”卡片,显示出所有可以下载安装的插件。选择“Email Extension Plugin”插件,点击 按钮。

    等待插件安装完成后,登录到服务器上,重启Jenkins服务!
    服务重启后,用浏览器打开http://localhost:8080/ ,访问Jenkins主页。
    点击“系统管理”-》“系统设置”
    看到“Extended E-mail Notification”主题配置单元,就证明配置成功。


    email-ext插件允许使用变量来动态插入数据到邮件的主题和内容主体中。变量是一个以$(美元符号)开始,并以空格结束的字符串。当一个邮件触发时,主题和内容主体字段的所有变量都会通过真实的值动态地替换。同样,变量中的“值”能包含其它的变量,都将被替换成真实的内容。

    邮件的内容如下:

    项目名称:$PROJECT_NAME



    构建编号:$BUILD_NUMBER



    svn版本号:${SVN_REVISION}



    构建状态:$BUILD_STATUS



    触发原因:${CAUSE}



    构建日志地址:${BUILD_URL}console



    构建地址:$BUILD_URL



    变更集:${JELLY_SCRIPT,template="html"}



    全局属性详解
    1. Override Global Settings:如果不选,该插件将使用默认的E-mail Notification通知选项。反之,您可以通过指定不同于( 默认选项)的设置来进行覆盖。
    2. Default Content Type:指定构建后发送邮件内容的类型,有Text和HTML两种.
    3. Use List-ID Email Header:为所有的邮件设置一个List-ID的邮件信头,这样你就可以在邮件客户端使用过滤。它也能阻止邮件发件人大部分的自动回复(诸如离开办公室、休假等等)。你可以使用你习惯的任何名称或者ID号,但是他们必须符合如下其中一种格式(真实的ID必须要包含在<和>标记里):

    Build Notifications 
    “Build Notifications” 
    关于更详细的List-ID说明请参阅RFC-2919.
    4. Add 'Precedence: bulk' Email Header:设置优先级,更详细说明请参阅RFC-3834.
    5. Default Recipients:自定义默认电子邮件收件人列表。如果没有被项目配置覆盖,该插件会使用这个列表。您可以在项目配置使用$ DEFAULT_RECIPIENTS参数包括此默认列表,以及添加新的地址在项目级别。添加抄送:cc:电子邮件地址例如,CC:someone@somewhere.com
    6. Reply To List:回复列表, A comma separated list of e-mail addresses to use in the Reply-To header of the email. This value will be available as $DEFAULT_REPLYTO in the project configuration.
    7. Emergency reroute:如果这个字段不为空,所有的电子邮件将被单独发送到该地址(或地址列表)。
    8. Excluded Committers:防止邮件被邮件系统认为是垃圾邮件,邮件列表应该没有扩展的账户名(如:@domain.com),并且使用逗号分隔
    9. Default Subject:自定义邮件通知的默认主题名称。该选项能在邮件的主题字段中替换一些参数,这样你就可以在构建中包含指定的输出信息。
    10. Maximum Attachment Size:邮件最大附件大小。
    11. Default Content:自定义邮件通知的默认内容主体。该选项能在邮件的内容中替换一些参数,这样你就可以在构建中包含指定的输出信息。
    12. Default Pre-send Script:默认发送前执行的脚本(注:grooy脚本,这是我在某篇文章上看到的,不一定准确)。
    13. Enable Debug Mode:启用插件的调试模式。这将增加额外的日志输出,构建日志以及Jenkins的日志。在调试时是有用的,但不能用于生产。
    14. Enable Security:启用时,会禁用发送脚本的能力,直接进入Jenkins实例。如果用户试图访问Jenkins管理对象实例,将抛出一个安全异常。
    15. Content Token Reference:邮件中可以使用的变量,所有的变量都是可选的。
    邮件:

    详细配置可以参考 https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin

    4.5 权限插件安装

    点击“系统管理”-》“管理插件”》“可选插件” 在搜索框输入“Role-”点“直接下载”


    点击“系统管理”-》“Configure Global Security”

    点击“系统管理”-》“Manage and Assign Roles”

    点击“Manage Role”,Role to add 新增角色。

    点击点击“系统管理”》“管理用户”新增用户

    点击“Assign Roles”,User/group to add ,给用户添加相应的权限

    注意: 如果给anonymous新增admin权限,系统不用登陆也具有admin权限,所以其他的角色权限都是失效状态。

    4.6 自动部署插件安装

    点击“系统管理”-》“管理插件”》“可选插件”搜索“Deploy to container Plugin”,“直接下载”

    配置tomcat权限,在tomcat的conf目录下修改tomcat-users.xml,添加一下内容。










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

    在已运行的Jenkins主页中,点击左侧的新建Job进入如下界面:

    输入项目名称选择jdk(jdk已经在全局配置中配置)

    填写项目的snv地址

    配置触发器 ,“H/15 * ***”表示每个15分钟检查svn有没有更新,有更新则重新打包。

    选择项目构建工具,本例中使用ant,ant已经在全局配置中配置。

    配置构建完成自动部署,部署需要安装deploy插件,安装方法同邮件插件安装。如果是集群部署则需要点击“Add Container”新增需要部署的容器。

    看到如下日志说明部署成功

    配置邮件插件

    点击“保存”。进行项目构建,点击“立即构建”

    点击构建日期右边的小三角, 

    点击“Console Output”查看构建日志

    测试项目自动构建打包,打包完成后部署到远程服务器。

    5 Sonar安装

    5.1 Sonar安装

    下载sonar http://www.sonarqube.org/downloads/,下载后sonar是一个zip包解压即可。
    下载完后解压客户端,随意放置一个地方
    如 我放置于D:
    进入进入D:sonarqube-5.1.2in这里需要注意,选择32或者64是对应你配置的JDK)

    创建数据库,默认数据库H2,这里我们修改为mysql
    CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
    创建用户
    CREATE USER 'sonar' IDENTIFIED BY 'sonar'; 
    给用户授权
    GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
    GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar'; 
    FLUSH PRIVILEGES;

    修改sonar.properties文件

    添加如下内容,sonar默认自带mysql驱动。
    sonar.jdbc.username=sonar
    sonar.jdbc.password=sonar
    sonar.jdbc.url=jdbc:mysql://10.10.5.64:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true 
    sonar.jdbc.driverClassName=com.mysql.jdbc.Driver

    运行“StartSonar.bat”

    访问9000端口,sonar默认自带了jetty服务器。默认用户名密码 admin、admin。一些设置和菜单只有在登陆之后才能看到。

    安装sonar汉化包,点击“配置”》“系统”》“更新中心”》“Arailable Plugins”选择“Chinese Pack”,由于我已经安装了汉化包所以没有列出。


    安装完成后在“installed Plugins”可以看到该插件。记得重启后,记得刷新一下浏览器

    5.2 安装sonar-runner

    下载:http://www.sonarqube.org/downloads/

    下载后解压

    修改conf目录下的sonar-runner.properties文件,新增如下内容,数据库

    sonar.jdbc.username=sonar
    sonar.jdbc.password=sonar
    sonar.jdbc.url=jdbc:mysql://10.10.5.64:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true 
    sonar.jdbc.driverClassName=com.mysql.jdbc.Driver
    配置环境变量,将D:sonar-runner-2.4in 添加到Path

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

    文件内容如下
    sonar.projectKey=HotelMonitor
    sonar.projectName=HotelMonitor
    sonar.projectVersion=1.2
    sonar.sources=src
    sonar.sourceEncoding=UTF-8
    sonar.language=java

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

    看到如下日志,说明代码校验成功

    登陆http://localhost:9000/ 查看代码扫描结果

    点击项目名称查看校验详情

    6 Jenkins与sonar集成

    6.1 Jenkins配置

    点击点击“系统管理”》“系统设置”
    配置sonar-runner有两种方式
    第一种jenkins自动安装sonar-runner

    第二种 使用现有安装

    6.2 sonar配置


    点击“保存”。
    在项目中配置sonar代码分析
    点击项目名称进入项目配置,选择“新增构建步骤”,选择“invoke Standalone Sonar Analysis”

    作如下配置

    点击“保存”

    将项目根目录下的sonar-runner.properties提交svn,
    执行“立即构建”
    看到jenkins的控制台输出如下日志,校验成功


    访问http://localhost:9000/dashboard/index/HotelMonitor
    查看校验结果。

    若果本地安装了sonar-runner,可以运行本地bat脚本的方式运行sonar-runner,配置如下,前提是必须将sonar-runner加入的环境变量, 选择“增加构建步骤”

    输入bat脚本

    修改sonar配置,做如下配置,打开sonar配置页面,配置“disable the SCM Sensor”为“是”

    否则会报如下错误

    7 Maven安装与maven私服的搭建

    7.1 Maven安装

    在maven官网下载maven
    http://maven.apache.org/download.cgi
    下载apache-maven-3.1.1-bin.zip并解压

    配置环境变量

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

    7.2 Maven私服nexus安装

    下载nexus http://www.sonatype.org/nexus/go/,我下载的是linux版本。

    nexus-latest-bundle.tar.gz
    将安装包复制到需要安装的机器,我安装在/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端口,操作如下:
    /sbin/iptables -I INPUT -p tcp --dport 8081 -j ACCEPT #开启8081端口 
    /etc/rc.d/init.d/iptables save #保存配置 
    /etc/rc.d/init.d/iptables restart #重启服务 
    查看端口是否已经开放 
    /etc/init.d/iptables status

    7.3 Nexus配置

    hosted 类型的仓库,内部项目的发布仓库
    releases 内部的模块中release模块的发布仓库
    snapshots 发布内部的SNAPSHOT模块的仓库
    3rd party 第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去
    proxy 类型的仓库,从远程中央仓库中寻找数据的仓库
    group 类型的仓库,组仓库用来方便我们开发人员进行设置的仓库
    点击“Repositories”》“central”》“configuration”

    设置“Download Remote Indexes”为true 
    设置“Remote Storage Location”为:http://repo1.maven.org/maven2/

    配置完成保存之后,在“central”中右键“repair index”,下载索引

    在“browse Index”查看下载的索引

    注意:如果没有下载到索引可能是因为nexus安装的目录下sonatype-work目录没有修改权限,给文件夹赋权即可;
    Chmod 777 –R sonatype-work

    修改maven安装目录conf下的settings.xml文件添加如下代码
    1.在profiles节点下添加



    nexus
    nexus
    http://10.10.152.174:8081/nexus/content/groups/public/

    true


    true




    在settings节点下添加

    central

      </activeProfiles>

    在services节点下添加

    releases 
    admin 
    admin123 


    snapshots 
    admin 
    admin123 

    在项目的pom文件中添加

     <distributionManagement>     
         <repository>         
             <id>releases</id>         
             <name>Nexus Release Repository</name>         
             <url>http://10.10.152.174:8081/nexus/content/repositories/releases/</url>     
         </repository>     
         <snapshotRepository>         
             <id>snapshots</id>         
             <name>Nexus Snapshot Repository</name>         
             <url>http://10.10.152.174:8081/nexus/content/repositories/snapshots/</url>     
         </snapshotRepository> 
     </distributionManagement>

    然后执行clean deploy

    或者在eclipse中输入命令执行

    查看私服部署的jar包

    7.4 Nexus上传jar包

    右键“3rd party”

    在索引中查看上传的jar包

    如果要引用该jar包只需要将描述中的xml添加到项目引用的opm文件中

    7.5 Maven相关命令

    help:system可以打印所有可用的环境变量和Java系统属性。
    help:effective-pom用于查看当前生效的POM内容,指合并了所有父POM(包括Super POM)后的XML,所以可用于检测POM中某个配置是否生效
    help:effective-settings可用于查看当前生效的settings.xml文件内容,所以可用于判断某个settings配置是否生效
    mvn help:describe 你是否因为记不清某个插件有哪些goal而痛苦过,你是否因为想不起某个goal有哪些参数而苦恼,那就试试这个命令吧,它会告诉你一切的. 参数: 1. -Dplugin=pluginName 2. -Dgoal(或-Dmojo)=goalName:与-Dplugin一起使用,它会列出某个插件的goal信息,如果嫌不够详细,同样可以加-Ddetail.(注:一个插件goal也被认为是一个 “Mojo”) 下面大家就运行mvn help:describe -Dplugin=help -Dmojo=describe感受一下吧!
    mvn archetype:generate 你是怎么创建你的maven项目的?是不是像这样:mvn archetype:create -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=com.ryanote -Dartifact=common,如果你还再用的话,那你就out了,现代人都用mvn archetype:generate了,它将创建项目这件枯燥的事更加人性化,你再也不需要记那么多的archetypeArtifactId,你只需输入archetype:generate,剩下的就是做”选择题”了.
    mvn tomcat:run 用了maven后,你再也不需要用eclipse里的tomcat来运行web项目(实际工作中经常会发现用它会出现不同步更新的情况),只需在对应目录(如/ryanote)里运行 mvn tomat:run命令,然后就可在浏览器里运行http://localhost:8080/ryanote查看了.如果你想要更多的定制,可以在pom.xml文件里加下面配置: 01 02 03 04 org.codehaus.mojo 05 tomcat-maven-plugin 06 07 /web 08 9090 09 10 11 12 当然你也可以在命令里加参数来实现特定的功能,下面几个比较常用: 1. 跳过测试:-Dmaven.test.skip(=true) 2. 指定端口:-Dmaven.tomcat.port=9090 3. 忽略测试失败:-Dmaven.test.failure.ignore=true 当然,如果你的其它关联项目有过更新的话,一定要在项目根目录下运行mvn clean install来执行更新,再运行mvn tomcat:run使改动生效.
    mvnDebug tomcat:run 这条命令主要用来远程测试,它会监听远程测试用的8000端口,在eclipse里打开远程测试后,它就会跑起来了,设断点,调试,一切都是这么简单.上面提到的那几个参数在这里同样适用.
    mvn dependency:sources 故名思义,有了它,你就不用到处找源码了,运行一下,你项目里所依赖的jar包的源码就都有了

    8 Jenkins,maven,sonar集成

    8.1 集成

    默认jenkins已经安装了maven插件

    在jenkins“系统管理”》“系统设置”中添加jenkins配置,也可以使用“自动安装”

    新建一个maven项目,在“项目配置”中输入svn地址

    添加sonar代码分析,在“增加构建后操作步骤”选择“sonar”

    点击“保存”后进行项目构建,可以看到jenkins从私服上下载相关依赖jar包

    访问http://localhost:9000/ 查看sonar生成的代码监测报告

  • 相关阅读:
    Atitit.播放系统规划新版本 v4 q18 and 最近版本回顾
    Atitit.播放系统规划新版本 v4 q18 and 最近版本回顾
    atitit.极光消息推送服务器端开发实现推送  jpush v3. 总结o7p
    atitit.极光消息推送服务器端开发实现推送  jpush v3. 总结o7p
    Atitit.文件搜索工具 attilax 总结
    Atitit.文件搜索工具 attilax 总结
    Atitit.软件命名空间  包的命名统计 及命名表(2000个名称) 方案java package
    Atitit.软件命名空间  包的命名统计 及命名表(2000个名称) 方案java package
    Atitit..状态机与词法分析  通用分词器 分词引擎的设计与实现 attilax总结
    Atitit..状态机与词法分析  通用分词器 分词引擎的设计与实现 attilax总结
  • 原文地址:https://www.cnblogs.com/jinjiangongzuoshi/p/5645216.html
Copyright © 2011-2022 走看看