基础环境
Centos7.3 x86_64
SVN
JDK1.8
MySQL 5.7.18
Jenkins 2.65 (https://jenkins.io/download/)
ANT 1.9.4 (http://archive.apache.org/dist/ant/binaries/)
下载
https://jenkins.io/download/
安装
yum部署
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
yum install jenkins -y
rpm部署
rpm -ivh https://pkg.jenkins.io/redhat/jenkins-2.65-1.1.noarch.rpm
#默认路径:/var/lib/jenkins/
war包部署
nohup java -jar jenkins.war --httpPort=8080 &
#默认路径:/root/.jenkins/
Jenkins基础配置
查看并修改密码
从/var/lib/jenkins/secrets/initialAdminPassword
安装推荐插件
如果你看到了offline报错,是因为jenkins会ping www.google.com,如果ping不通,就会报offline,在jenkins设置一个hosts,把google域名指向jenkins设备就解决了
配置环境变量
增加插件
新建项目
注意Ignore externals,如果项目连接着别的项目代码,请取消选择
build.xml请看附件
第一次发布的时候,会把工作目录下的所有文件清空,然后check-out一份完整的项目到工作目录下;
以后更新的时候,不会判断已有文件是否在svn里存在。比如工作目录下的文件123在svn里不存在,那么更新的时候不会删除123。
不会判断工作目录下的文件是否被改动,只会判断svn是否有新版本需要更新。比如工作目录下的文件zzz.txt内容为zzz,svn上的zzz.txt内容为空,如果svn上zzz.txt没有新版本,则在更新的时候不会更新zzz.txt,也就是说如果手动修改了工作目录下的文件,如果此文件在svn上没有出现新版本,就不会更新。一旦svn上的zzz.txt有新版本后就会更新工作目录的zzz.txt,这时工作目录下会生成如下几个文件:zzz.txt、zzz.txt.mine、zzz.txt.r223、zzz.txt.r224,其中zzz.txt.r223为svn上老版本、zzz.txt.r224为svn上新版本、zzz.txt.mine为工作目录上的zzz.txt的副本、zzz.txt记录了文件变化。
svn上删除了文件,更新的时候,工作目录里的此文件也会被删除。但是如上例中的zzz.txt手动修改过,已经和svn上的不一样了,这时将不会被删除。
第一次发布的时候,会把工作目录下的所有文件清空,然后check-out一份完整的项目到工作目录下;
每一次更新的时候,都会先清除工作目录下的所有文件,然后重新check-out一份完整的项目到工作目录下。
第一次发布的时候,会把工作目录下的所有文件清空,然后check-out一份完整的项目到工作目录下;
以后更新的时候会判断工作目录下的文件是否在svn里存在,如果不存在则删除,如果存在且有新版本则更新。
会判断工作目录下的文件是否被改动,不管有没有新版本,都会还原为svn上的最新版本。
svn上删除了文件,更新的时候,工作目录里的此文件也会被删除。
第一次发布的时候,会把工作目录下的所有文件清空,然后check-out一份完整的项目到工作目录下;
以后更新的时候不会判断工作目录下的文件是否在svn里存在。
会判断工作目录下的文件是否被改动,不管有没有新版本,都会还原为svn上的最新版本。
svn上删除了文件,更新的时候,工作目录里的此文件也会被删除。
svn引用外部项目,导致文件下载不完整
在配置项目时,去掉“Ignore externals”的勾选,即可将svn上引用的外部项目也一并checkout。在配置项目时,去掉“Ignore externals”的勾选,即可将svn上引用的外部项目也一并checkout。详见http://blog.csdn.net/wudj810818/article/details/51076353
感谢《5后's Blog》
Jenkins构建项目时,JAVA_HOME is not defined correctly
在系统配置,Global Tool Configuration中创建JAVA_HOME变量,重新构建。
该变量用于编译项目,和系统中的JDK1.8没有关系。
配置Build.xml文件
本文配置来源于http://blog.csdn.net/wangyajin333/article/details/47860577
SonarQube 与 Jenkins 简 介
SonarQube 是一个开源的代码质量分析平台,便于管理代码的质量,可检查出项目代码的漏洞和潜在的逻辑问题。同时,它提供了丰富的插件,支持多种语言的检测, 如 Java、Python、Groovy、C、C++等几十种编程语言的检测。它主要的核心价值体现在如下几个方面:
** SonarQube 平台是由4个部分组成:**
参考https://www.ibm.com/developerworks/cn/devops/1612_qusm_jenkins/index.html 感谢《IBM的曲世明和陈计云》
SonarQube Scanner原理
SonarQube Scanner,作为代码扫描的工具,通过它,将项目的代码读取并发送至SonarQube服务器中,才能让SonarQube进行代码分析。
可以认为SonarQube Scanner就是SonarQube的客户端。SonarQube Scanner很方便和不同类型的构建工具进行整合
参考http://aoyouzi.iteye.com/blog/2294992 感谢《aoyouzi》
功能介绍(个人理解)
下载SonarQube Server(5.6.6版本)
https://www.SonarQube.org/downloads/
安装SonarQube Server
create user 'sonar'@'192.168.0.231' identified by 'sonar2017';
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
grant all privileges on sonar.* to 'sonar'@'192.168.0.231';
unzip SonarQube-5.6.6.zip
mv SonarQube-5.6.6 /app/
ln -s SonarQube-5.6.6 SonarQube
5.编辑配置文件(/app/SonarQube/conf/sonar.properties)
#grep -vE '#|^.$' /app/SonarQube/conf/sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar2017
sonar.jdbc.url=jdbc:mysql://192.168.0.231:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.web.host=192.168.0.231
sonar.web.context=/sonar
sonar.web.port=9000
sonar.log.level=INFO
sonar.path.logs=logs
备注:sonar.web.context=/sonar 是访问地址后缀,配置后访问地址变为,http://192.168.0.231:9000/sonar
SonarQube Server汉化(注意:不同版本,汉化包不同)
SonarQube 5.6.6中文包地址
上传到/app/SonarQube/extensions/plugins
启动SonarQube
/app/SonarQube/bin/linux-x86-64/sonar.sh restart
tail -f /app/SonarQube/logs/sonar.log
/app/SonarQube/bin/linux-x86-64/sonar.sh console
登录,并修改密码,创建token(后面jenkins要用)
参考文章:http://www.cnblogs.com/westfly/p/6098100.html 感谢《westfly》
安装SonarQube Scanner for Jenkins插件
系统管理-->管理插件-->SonarQube Scanner for Jenkins-->安装
配置SonarQube Server的连接
系统管理-->系统设置-->配置SonarQube servers
Environment variables 勾选
SonarQube installations
name:随便写
Server URL:http://192.168.0.231:9000/sonar
Server version:5.3 or higher
注:5.1 or higher不支持token方式,如果写了数据库信息,在输出中会提示这个特性已被忽略,不建议使用。
Server authentication token:你懂的。
配置项目构建过程中的选项,增加SonarQube Scanner
系统管理-->Global Tool Configuration
SonarQube Scanner for MSBuild(Microsoft 和 Visual Studio的生成系统,不配置)
SonarQube Scanner(我们配置这个)
name:随便填
自动安装:勾选
选择版本:最新(3.0.3.778)
项目中配置SonarQube Scanner参数(读哪的代码、什么语言等)
项目-->增加构建步骤-->Execute SonarQube Scanner
JDK:选jdk1.8(提前配置)
Analysis Properties:
sonar.language=java
sonar.sources=$WORKSPACE/
sonar.projectName=ding
sonar.projectKey=ding
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
sonar.language=java
开发语言(匹配Server上的语言规则)
sonar.sources=$WORKSPACE/
RPM包安装后,位置是/var/lib/jenkins/workspace/
项目都会下载到这里
sonar.projectName=ding
项目名称,回去里面读src
sonar.projectKey=ding
唯一的项目Key,SonarQube Server上作为唯一标识,生成链接
sonar.projectVersion=1.0
版本:不太理解,强制要求
sonar.sourceEncoding=UTF-8
开发代码字符集
参考链接:https://docs.SonarQube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
故障1:项目中配置SonarQube Scanner的Task to run为ding,就报这个错,去掉就可以了
13:53:22.236 ERROR: Error during SonarQube Scanner execution
Task 'ding' does not exist. Please use 'list' task to see all available tasks.
13:53:22.236 DEBUG: Execution getVersion
13:53:22.236 DEBUG: Execution stop
ERROR: SonarQube scanner exited with non-zero code: 1
Sending e-mails to: [email protected]
Finished: FAILURE
解决 去掉SonarQube Scanner的Task to run中的内容
故障2: E170001
报错
Caused by: org.tmatesoft.svn.core.SVNAuthenticationException: svn: E170001: Authentication required for ' VisualSVN Server'
解决: 登录SonarQube Server-->配置-->SCM-->设置为是(关闭SCM)
故障2:SonarQube安装完后出现SonarQube is under maintenance. Please check back later.
SonarQube在安装完后运行:192.168.0.235:9000出现如下提示
SonarQube is under maintenance. Please check back later.
Whilst waiting, you might want to check new plugins to extend the current functionality.
If you are an administrator and have no idea why this message is showing, you should read the upgrade guide
这个需要安装完后先运行http://192.168.0.235:9000/setup 更新下 SonarQube