目录

一、Jenkins新建发布任务

二、Jenkins基本流程

三、Jenkins构建部署脚本

四、Jenkins实用功能技巧

五、Jenkins与Sonar集成使用

六、Sonar简单介绍

七、Sonar名词介绍

八、TODO


一、Jenkins新建发布任务

1.添加服务器信息:Jenkins->系统管理->系统设置->SSH Servers添加

#关注 Remote Directory 配置:

The base directory for this configuration.

This directory must exist, it will not be created.
The publisher will only be able to place files below this directory.

Note that nothing prevents an exec from creating, deleting or moving files anywhere that the user has permission to.

2.新建或复制发布任务:Jenkins->新建

  • 2.1 输入项目名称,不可重复
  • 2.2 丢弃旧的构建,防止构建任务过多导致磁盘占满,可设置保持构建的天数、保持构建的最大个数
  • 2.3 发布版本参数化构建过程,在构建过程中选择选择不同版本进行构建
  • 2.4 发布目标参数化构建过程,在构建过程中选择不同的发布目标进行构建
  • 2.5 源码管理设置项目git仓库地址
  • 2.6 Post Steps:添加需要待构建的目标,其中在Exec command需填以下信息:
/bin/bash /data/jbc/shell/post_unified_build.sh springboot jbc_portal_admin jbc_portal_admin-commit.zip

或

/bin/bash /data/jbc/shell/post_unified_build.sh dubbo jbc_service_finance jbc_service_finance-commit.war
  • 2.6 构建后操作:此处配置构建后邮件配置

3.发起构建:Build with Parameters

windows系统jenkins怎么安装sonar jenkins sonar_Jenkins

二、Jenkins基本流程

windows系统jenkins怎么安装sonar jenkins sonar_代码质量_02

三、Jenkins构建部署脚本

#/usr/bin/bash

export JAVA_HOME=/data/jdk1.8
MODULE_TYPE=$1
MODULE_NAME=$2
PACKAGE_NAME=$3
EXEC_ENV=$4
APP_HOME=/data/jbc/app
TOMCAT_HOME=/data/tomcat
BAK_DIR=/data/jbc/bak
BAK_FILE_NAME=$MODULE_NAME"_`date +%Y%m%d%H%M%S`.war"
TMP_APP_HOME=/tmp

if [ $# -lt 3 ];then
  echo "脚本参数必须包含模块类型、模块名称、包名称等信息"
  exit 0
fi

if [ ! -x "$BAK_DIR" ];then
    mkdir -p $BAK_DIR
    echo "创建备份文件夹成功"
fi

if [ "$MODULE_TYPE" == "dubbo" ];then  
  echo "开始自动化部署dubbo项目"
  mv $APP_HOME/*.war $BAK_DIR/$BAK_FILE_NAME
  if [ $? -eq 0 ];then
    echo "备份文件成功"
  else
    echo "备份文件失败,或没有需要备份的文件"
  fi
  cd $TOMCAT_HOME/bin && $TOMCAT_HOME/bin/shutdown.sh
  if [ $? -eq 0 ];then  
    mv $TMP_APP_HOME/$PACKAGE_NAME $APP_HOME/
    
    ./startup.sh  
    if [ $? -eq 0 ];then
          echo "启动服务成功"
    fi
  else
    echo "关闭服务失败,请检查"
  fi
else
  echo "开始自动化部署springboot:项目"
  cd $APP_HOME/$MODULE_NAME/ && ./stop.sh
  
  if [ $? -eq 0 ];then
    echo "关闭服务成功"
  else
    echo "关闭服务失败,请检查"
  fi
  
  mv $APP_HOME/*.zip $BAK_DIR/$BAK_FILE_NAME
  rm -fr $APP_HOME/$MODULE_NAME
  if [ $? -eq 0 ];then
    echo "备份文件成功"
  else
    echo "备份文件失败,或没有需要备份的文件"
  fi
  
  mv $TMP_APP_HOME/$PACKAGE_NAME $APP_HOME/
  unzip $APP_HOME/$PACKAGE_NAME -d $APP_HOME/
  
  
  if [ $? -eq 0 ];then
    cd $APP_HOME/$MODULE_NAME && chmod +x *.sh
    if [ "$EXEC_ENV" == "PRD" ];then
      ./start.sh
    else
      ./start-commit.sh
    fi
    
    if [ $? -eq 0 ];then
          echo "启动服务成功"
    fi
  fi
fi

四、Jenkins实用功能技巧

  • 4.1 查看工作空间:可通过查看查看最新构建的代码
  • 4.2 清理工作空间:清理构建缓存
  • 4.3 修改记录:可以查看每次构建的变更集

五、Jenkins与Sonar集成使用

1.登录sonar系统(默认用户名密码admin/admin)生成Jenkins登录sonar系统token凭证

 

windows系统jenkins怎么安装sonar jenkins sonar_代码质量_03

2.Jenkins->系统设置->SonarQube servers配置sonar信息

windows系统jenkins怎么安装sonar jenkins sonar_代码质量_04

3.Jenkins->全局工具配置->SonarQube Scanner,配置SonarQube Scanner信息

windows系统jenkins怎么安装sonar jenkins sonar_代码质量_05

4.修改SonarQube Scanner配置文件sonar-scanner.properties

windows系统jenkins怎么安装sonar jenkins sonar_bc_06

5.修改sonar系统配置文件/data/sonarqube-6.7.5/conf/sonar.properties,主要修改数据库相关配置

windows系统jenkins怎么安装sonar jenkins sonar_bc_07

6.配置jenkins的job信息,构建环境处选择SonarQube环境

windows系统jenkins怎么安装sonar jenkins sonar_代码质量_08

7.Jenkins PreSteps选择Execute SonarQube Scanner,并填写如下三项信息

windows系统jenkins怎么安装sonar jenkins sonar_代码质量_09

8.Jenkins 构建后操作修改

windows系统jenkins怎么安装sonar jenkins sonar_bc_10

9.由于sonar构建是基于target/classes编译后的文件的,所以第七步一定得是在之前完成。

六、Sonar简单介绍

SonarQube 是一个用于管理源代码质量开放平台,它可以从多个维度检测代码质量,可以快速的定位代码中潜在的或者明显的 Bug、错误。它支持包括 Java、Python、Php、C/C++、C#、HTML、JavaScript、PL/SQL、Objective C 等二十多种编程语言的代码质量管理与检测。可作为我们日常开发中检测代码质量的重要工具。

七、Sonar名词介绍

  • 6.1 Bugs Bug是出现了明显错误或是高度近似期望之外行为的代码。
  • 6.2 漏洞 漏洞是指代码中可能出现被黑客利用的潜在风险点
  • 6.3 坏味道 代码异味会困扰代码的维护者并降低他们的开发效率。主要的衡量标准是修复它们所需的时间。
  • 6.4 质量阈 项目的质量阈是在发布到生产环境之前所需要达到的一系列的条件标准。质量阈可以确保下一个版本的代码质量总能高于上一个版本。
  • 6.5 问题级别
BLOCKER(阻断):Bug with a high probability to impact the behavior of the application in production: memory leak, unclosed JDBC connection, .... The code MUST be immediately fixed.
CRITICAL(严重):Either a bug with a low probability to impact the behavior of the application in production or an issue which represents a security flaw: empty catch block, SQL injection, ... The code MUST be immediately reviewed.
MAJOR(主要):Quality flaw which can highly impact the developer productivity: uncovered piece of code, duplicated blocks, unused parameters, ...
MINOR(次要):Quality flaw which can slightly impact the developer productivity: lines should not be too long, "switch" statements should have at least 3 cases, ...
INFO(提示):Neither a bug nor a quality flaw, just a finding.
  • 6.6 圈复杂度即条件复杂度 其符号为VG或是M,圈复杂度用来衡量一个模块判定结构的复杂程度,数量上表现为线性无关的路径条数,即合理的预防错误所需测试的最少路径条数,圈复杂度大说明程序代码的判断逻辑复杂,可能质量低且难于测试和 维护。程序的可能错误和高的圈复杂度有着很大关系。

八、TODO

  • 7.1 版本发布前需在sonar平台检查自己代码质量
  • 7.2 sonar质量规则如何定义
  • 7.3 /data/git-2.17/bin/git ls-remote -h git@xx.xx.xx.x:jbc_service/jbc_service_los.git