Jenkins(运维自动化)

 Jenkins部署

Jeninsk部署及使用

基础环境

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设备就解决了

配置环境变量

  • 些变量会在你编译项目时用到
  • Global Tool Configuration中进行设置
  • 增加JDK环境变量(将jdk等文件上传到服务器指定位置)
  • 增加ANT环境变量(同JDK)

增加插件

  • 安装svn插件(系统管理-->管理插件-->可用插件-->安装SVN Publisher plugin
  • 增加认证(Credentials-->System-->Global credentials-->Add Credentials-->输入SVN的用户名密码

新建项目

  • 新建-->构建一个自由软件风格的软件项目
  • 输入项目名称
  • 选择jdk版本
  • 配置源码管理(链接,认证)

注意Ignore externals,如果项目连接着别的项目代码,请取消选择

  • 配置构建,配置ANT,选择之前添加的版本
  • 保存后构建

build.xml请看附件

知识点

  • Use‘svn update’ as much as possible

第一次发布的时候,会把工作目录下的所有文件清空,然后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上的不一样了,这时将不会被删除。

  • Alwayscheck out a fresh copy

第一次发布的时候,会把工作目录下的所有文件清空,然后check-out一份完整的项目到工作目录下;
每一次更新的时候,都会先清除工作目录下的所有文件,然后重新check-out一份完整的项目到工作目录下。

  • Emulateclean checkout by first deleting unversioned/ignored files,then ‘svn update’

第一次发布的时候,会把工作目录下的所有文件清空,然后check-out一份完整的项目到工作目录下;
以后更新的时候会判断工作目录下的文件是否在svn里存在,如果不存在则删除,如果存在且有新版本则更新。
会判断工作目录下的文件是否被改动,不管有没有新版本,都会还原为svn上的最新版本。
svn上删除了文件,更新的时候,工作目录里的此文件也会被删除。

  • Use‘svn update’ as much as possible,with ‘svn revert’ before update

第一次发布的时候,会把工作目录下的所有文件清空,然后check-out一份完整的项目到工作目录下;
以后更新的时候不会判断工作目录下的文件是否在svn里存在。
会判断工作目录下的文件是否被改动,不管有没有新版本,都会还原为svn上的最新版本。
svn上删除了文件,更新的时候,工作目录里的此文件也会被删除。

  • 该内容引用自http://zhangxingnan.blog.51cto.com/3241217/1427000/
  • 感谢《zhangxingnan》

遇到的问题

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

 

 Jenkins集成Sonar

理论知识

SonarQube 与 Jenkins 简 介

SonarQube 是一个开源的代码质量分析平台,便于管理代码的质量,可检查出项目代码的漏洞和潜在的逻辑问题。同时,它提供了丰富的插件,支持多种语言的检测, 如 Java、Python、Groovy、C、C++等几十种编程语言的检测。它主要的核心价值体现在如下几个方面:

  • 检查代码是否遵循编程标准:如命名规范,编写的规范等。
  • 检查设计存在的潜在缺陷:SonarQube 通过插件 Findbugs、Checkstyle 等工具检测代码存在的缺陷。
  • 检测代码的重复代码量:SonarQube 可以展示项目中存在大量复制粘贴的代码。
  • 检测代码中注释的程度:源码注释过多或者太少都不好,影响程序的可读可理解性。
  • 检测代码中包、类之间的关系:分析类之间的关系是否合理,复杂度情况。

** SonarQube 平台是由4个部分组成:**

  • SonarQube Server
  • SonarQube Database
  • SonarQube Plugins
  • SonarQube Scanner

参考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》

功能介绍(个人理解)

  • Jenkins
  • SonarQube Server(接收代码,进行分析)
  • SonarQube Scanner for Jenkins(Jenkins用来调用SonarQube Scanner的插件)
  • SonarQube Scanner(SonarQube的客户端,将读取的代码发送到SonarQube Server)

SonarQube Server服务部署

下载SonarQube Server(5.6.6版本)

https://www.SonarQube.org/downloads/

安装SonarQube Server

  1. 部署Centos 7.3 x86_64
  2. 部署JDK1.8(略)
  3. 部署MysQL5.7(略)
  4. 创建MySQL用户
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';
  1. 安装SonarQube(以前叫sonar)上传sonar到/opt目录下
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
  • console模式
/app/SonarQube/bin/linux-x86-64/sonar.sh console

登录,并修改密码,创建token(后面jenkins要用)

  • 登录地址:http://192.168.0.231:9000/sonar 默认用户名密码admin/admin
  • 修改管理员密码
    login-->配置-->权限-->用户-->点击administraotr后面的锁图标
  • 创建一个用户ding
    login-->配置-->权限-->用户-->token-->update token-->Generate Tokens(输入ding)-->generate
    记录下token

参考文章:http://www.cnblogs.com/westfly/p/6098100.html 感谢《westfly》

Jenkins和SonarQube Server集成

安装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

你可能感兴趣的:(Devops,运维)