Jenkins 使用 SonarQube 扫描 Coding

 

系统环境:

  • Jenkins 版本:2.176
  • SonarQube 版本:7.4.0

一、SonarQube 介绍

1、SonarQube 简介

SonarQube 是一个用于代码质量管理的开源平台,用于管理源代码的质量。同时 SonarQube 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 SonarQube。此外, SonarQube 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。

2、SonarQube工作原理

SonarQube 并不是简单地将各种质量检测工具的结果直接展现给客户,而是通过不同的插件算法来对这些结果进行再加工,最终以量化的方式来衡量代码质量,从而方便地对不同规模和种类的工程进行相应的代码质量管理。

3、SonarQube 特性

  • 多语言的平台: 支持超过20种编程语言,包括Java、Python、C#、C/C++、JavaScript等常用语言。
  • 自定义规则: 用户可根据不同项目自定义Quality Profile以及Quality Gates。
  • 丰富的插件: SonarQube 拥有丰富的插件,从而拥有强大的可扩展性。
  • 持续集成: 通过对某项目的持续扫描,可以对该项目的代码质量做长期的把控,并且预防新增代码中的不严谨和冗余。
  • 质量门: 在扫描代码后可以通过对“质量门”的比对判定此次“构建”的结果是否通过,质量门可以由用户定义,由多维度判定是否通过。

4、需要注意的代码质量问题

  • (1)、不遵循代码标准: SonarQube可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规 范代码编写。
  • (2)、糟糕的复杂度分布: 文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。
  • (3)、注释不足或者过多: 没有注释将使代码可读性变差,特别是当不可避免地出现人员变动 时,程序的可读性将大幅下降而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷。
  • (4)、缺乏单元测试: SonarQube 可以很方便地统计并展示单元测试覆盖率。
  • (5)、潜在的缺陷: –SonarQube 可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检 测出潜在的缺陷。
  • (6)、重复: 显然程序中包含大量复制粘贴的代码是质量低下的,SonarQube 源码中重复严重的地方。
  • (7)、糟糕的设计

二、一般执行流程

在项目中一般流程为:

  • (1)、项目人员开发代码。
  • (2)、将代码推送到持久化仓库,如 Git。
  • (3)、Jenkins 进行代码拉取,然后利用 SonarQube 扫描器进行扫描分析代码信息。
  • (4)、将分析结果等信息上传至 SonarQube Server 服务器进行分类处理。
  • (5)、SonarQube 将分析结果等信息持久化到数据库,如 Mysql。
  • (6)、开发人员访问 SonarQube UI 界面访问,查看扫描出的结果信息进行项目优化。

这里只描述 Jenkins 如何与 SonarQube 集成

执行过程流程图

三、SonarQuke 配置

1、禁用SCM传感器

  • 点击 配置—SCM—Disable the SCM Sensor 将其关闭。

2、安装 JAVA 分析插件

由于这里要分析的项目是 JAVA 项目,所以需要确保安装 Java 语言分析插件,如果是别的类型的项目,可以类似安装相关分析插件即可。

  • 点击 配置—应用市场—插件 搜索 SonarJava 插件安装

如果忘记安装,可能会导致 Jenkins 编译过程中提示没有语言插件的异常错误信息,确保一定要安装。

3、生成 Token

这里生成验证用的 Token 字符串,用于 Jenkins 在执行流水线时候将待检测信息发送到 SonarQube 时候用于的安全验证。

  • 点击 头像—我的账号—安全—生成令牌 生成验证的 Token。

因为此 Token 不会显示第二次,所以这里记住此 Token。

四、Jenkins 安装插件

1、需要安装的插件介绍

Jenkins 先提前安装好可能需要用到的插件,这里需要用到一下插件:

  • Maven Integration

Maven 插件,用于编译 Maven 项目和安装 Maven 工具到任务中。

  • Pipeline Utility Steps

参考:https://jenkins.io/doc/pipeline/steps/pipeline-utility-steps/

用于在 Pipeline 执行过程中操作文件“读/写”的插件,这里用其创建 Sonar properties 配置文件。

  • SonarQube Scanner

参考:https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Jenkins

SonarQube 是一种用于连续检查代码质量的开源平台,该插件可轻松与 SonarQube 集成。

2、安装 SonarQube Scanner 插件

打开 系统管理—插件管理—可选插件 输入 sonarqube 进行插件筛选,如下如方式进行安装。

关于安装 Pipeline Utility Steps 与 Maven Integration 插件和上面类似,请自行安装即可,这里不过多描述。

五、Jenkins 配置插件

1、连接 SonarQube 配置

打开 系统管理—系统设置—SonarQube servers 配置下面属性

参数说明:

  • Name: 用于 Jenklins Pipeline 中构建环境指定的名称,在 Pipeline 脚本中会用到,自定义即可。
  • Server URL: SonarQube 地址。
  • Server authentication token: 用于连接 SonarQube 的 Token,将上面 SonarQube 中生成的 Token 输入即可。

2、配置 SonarQube Scanner 插件

打开 系统管理—全局工具配置—SonarQube Scanner 输入 Name,选择最新版本点击自动安装即可

3、配置 Maven 插件

打开 系统管理—全局工具配置—Maven 输入 Name,选择最新版本点击自动安装即可

六、创建流水线项目写 Pipeline 脚本

1、创建流水线任务

2、设置 SonarQube 配置文件

(1)、Sonar 配置文件说明

在使用 SonarQube 来进行代码扫描时候需要一个名称为 sonar-project.properties 的配置文件。该文件设置了项目的一些属性用于 SonarQube 扫描的属性。

例如,设置项目在 Sonar 面板中的唯一标识 Key,项目名称及其版本,要扫描项目的语言类型等等。

sonar-project.properties

  1.  
    sonar.projectKey=key:value
  2.  
    sonar.projectName=ProjectName
  3.  
    sonar.projectVersion=1.0.0
  4.  
    sonar.sources=src
  5.  
    sonar.language=java
  6.  
    sonar.sourceEncoding=UTF-8
  7.  
    sonar.java.binaries=target/classes
  8.  
    sonar.java.source=1.8
  9.  
    sonar.java.target=1.8

配置参数:

  • sonar.projectKey: 项目在 SonarQube 的唯一标识,不能重复
  • sonar.projectName=ProjectName: 项目名称
  • sonar.projectVersion: 项目版本
  • sonar.language: 项目语言,例如 Java、C#、PHP 等
  • sonar.sourceEncoding: 编码方式
  • sonar.sources: 项目源代码目录
  • sonar.java.binaries: 编译后 class 文件目录

(2)、Sonar 配置文件存放位置

这个文件可以放在源代码根目录中,也可是设置到 Jenkins 变量。

① ————————方式一:放置到源代码———————————————–

直接在源代码中放置文件 sonar-project.properties,然后在此配置文件中设置这些配置参数。

② ————————方式二:设置到变量并在 Jenkins 编译时候创建————————

可以设置文本到环境变量中,在变量文本中设置哪些配置参数,之后在执行 Pipeline 脚本时候利用 “Pipeline Utility Steps” 插件的创建文件方法创建 sonar-project.properties 文件。

在 Jenkins sonar-qube-coding 任务—>配置—>参数化构建过程—>添加参数—>文本参数 输入 Sonar 配置。

  • 变量名称:sonar_project_properties
  • 变量内容:
  1.  
    sonar.sources=src
  2.  
    sonar.language=java
  3.  
    sonar.sourceEncoding=UTF-8
  4.  
    sonar.java.binaries=target/classes
  5.  
    sonar.java.source=1.8
  6.  
    sonar.java.target=1.8

注意:这里不设置 sonar.projectKey、sonar.projectName、sonar.projectVersion 这三个参数,将三个参数在执行 Pipeline 脚本的时候设置。

这里为了配置更灵活方便,所以采用将 SonarQube 配置设置到环境变量

3、创建 Pipeline 脚本

配置 Jenkins 任务,创建脚本并加入到 “流水线” 配置项中

  1.  
    // 设置超时时间为10分钟,如果未成功则结束任务
  2.  
    timeout(time: 600, unit: 'SECONDS') {
  3.  
    node () {
  4.  
    stage('Git 拉取阶段'){
  5.  
    // Git 拉取代码
  6.  
    git branch: "master" ,changelog: true , url: "https://github.com/a324670547/springboot-helloworld"
  7.  
    }
  8.  
    stage('Maven 编译阶段') {
  9.  
    // 设置 Maven 工具,引用先前全局工具配置中设置工具的名称
  10.  
    def m3 = tool name: 'maven'
  11.  
    // 执行 Maven 命令
  12.  
    sh "${m3}/bin/mvn -B -e clean install -Dmaven.test.skip=true"
  13.  
    }
  14.  
    stage('SonarQube 扫描阶段'){
  15.  
    // 读取maven变量
  16.  
    pom = readMavenPom file: "./pom.xml"
  17.  
    // 创建SonarQube配置文件
  18.  
    writeFile file: 'sonar-project.properties',
  19.  
    text: """sonar.projectKey=${pom.artifactId}:${pom.version}\n"""+
  20.  
    """sonar.projectName=${pom.artifactId}\n"""+
  21.  
    """sonar.projectVersion=${pom.version}\n"""+
  22.  
    """${sonar_project_properties}"""
  23.  
    // 设置 SonarQube 代码扫描工具,引用先前全局工具配置中设置工具的名称
  24.  
    def sonarqubeScanner = tool name: 'sonar-scanner'
  25.  
    // 设置 SonarQube 环境,其中参数设置为之前系统设置中SonarQuke服务器配置的 Name
  26.  
    withSonarQubeEnv('jenkins') {
  27.  
    // 执行代码扫描
  28.  
    sh "${sonarqubeScanner}/bin/sonar-scanner"
  29.  
    }
  30.  
    }
  31.  
    }
  32.  
    }

七、执行 Jenkins 任务

1、执行 Jenkins Pipeline 任务

点击 Build with Parameters 执行 Jenkins 任务

2、查看任务执行日志

查看日志信息为:

  1.  
    ......
  2.  
    [Pipeline] { (Git 拉取阶段)
  3.  
    [Pipeline] echo
  4.  
    Git 阶段
  5.  
    > git rev-parse --is-inside-work-tree # timeout=10
  6.  
    Fetching changes from the remote Git repository
  7.  
    > git config remote.origin.url https://github.com/a324670547/springboot-helloworld # timeout=10
  8.  
    Fetching upstream changes from https://github.com/a324670547/springboot-helloworld
  9.  
    > git --version # timeout=10
  10.  
    > git fetch --tags --progress https://github.com/a324670547/springboot-helloworld
  11.  
    Commit message: "修改jenkinsfile"
  12.  
    > git rev-list --no-walk a34691106075d58bc99d9dcc06f5eadcc03ca759 # timeout=10
  13.  
    [Pipeline] { (Maven 编译阶段)
  14.  
    [Pipeline] tool
  15.  
    + /var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/maven/bin/mvn -B -e clean install -Dmaven.test.skip=true
  16.  
    [INFO] Error stacktraces are turned on.
  17.  
    [INFO] Scanning for projects...
  18.  
    [INFO]
  19.  
    [INFO] ------------------< club.mydlq:springboot-helloworld >------------------
  20.  
    [INFO] Building springboot-helloworld 0.0.1
  21.  
    [INFO] --------------------------------[ jar ]---------------------------------
  22.  
    [INFO]
  23.  
    [INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ springboot-helloworld ---
  24.  
    [INFO] Deleting /var/jenkins_home/workspace/sonar-qube-coding/target
  25.  
    [INFO]
  26.  
    [INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ springboot-helloworld ---
  27.  
    [INFO] Using 'UTF-8' encoding to copy filtered resources.
  28.  
    [INFO] Copying 1 resource
  29.  
    [INFO] Copying 0 resource
  30.  
    [INFO]
  31.  
    [INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ springboot-helloworld ---
  32.  
    [INFO] Changes detected - recompiling the module!
  33.  
    [INFO] Compiling 2 source files to /var/jenkins_home/workspace/sonar-qube-coding/target/classes
  34.  
    [INFO]
  35.  
    [INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ springboot-helloworld ---
  36.  
    [INFO] Not copying test resources
  37.  
    [INFO]
  38.  
    [INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ springboot-helloworld ---
  39.  
    [INFO] Not compiling test sources
  40.  
    [INFO]
  41.  
    [INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ springboot-helloworld ---
  42.  
    [INFO] Tests are skipped.
  43.  
    [INFO]
  44.  
    [INFO] --- maven-jar-plugin:3.1.1:jar (default-jar) @ springboot-helloworld ---
  45.  
    [INFO] Building jar: /var/jenkins_home/workspace/sonar-qube-coding/target/springboot-helloworld-0.0.1.jar
  46.  
    [INFO]
  47.  
    [INFO] --- spring-boot-maven-plugin:2.1.4.RELEASE:repackage (repackage) @ springboot-helloworld ---
  48.  
    [INFO] Replacing main artifact with repackaged archive
  49.  
    [INFO]
  50.  
    [INFO] --- maven-install-plugin:2.5.2:install (default-install) @ springboot-helloworld ---
  51.  
    [INFO] Installing /var/jenkins_home/workspace/sonar-qube-coding/target/springboot-helloworld-0.0.1.jar to /root/.m2/repository/club/mydlq/springboot-helloworld/0.0.1/springboot-helloworld-0.0.1.jar
  52.  
    [INFO] Installing /var/jenkins_home/workspace/sonar-qube-coding/pom.xml to /root/.m2/repository/club/mydlq/springboot-helloworld/0.0.1/springboot-helloworld-0.0.1.pom
  53.  
    [INFO] ------------------------------------------------------------------------
  54.  
    [INFO] BUILD SUCCESS
  55.  
    [INFO] ------------------------------------------------------------------------
  56.  
    [INFO] Total time: 3.695 s
  57.  
    [INFO] Finished at: 2019-05-09T17:59:45Z
  58.  
    [INFO] ------------------------------------------------------------------------
  59.  
    [Pipeline] }
  60.  
    [Pipeline] { (SonarQube 扫描阶段)
  61.  
    [Pipeline] readMavenPom
  62.  
    [Pipeline] writeFile
  63.  
    [Pipeline] tool
  64.  
    [Pipeline] withSonarQubeEnv
  65.  
    Injecting SonarQube environment variables using the configuration: jenkins
  66.  
    [Pipeline] {
  67.  
    [Pipeline] sh
  68.  
    + /var/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/sonar-scanner/bin/sonar-scanner
  69.  
    INFO: Scanner configuration file: /var/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/sonar-scanner/conf/sonar-scanner.properties
  70.  
    INFO: Project root configuration file: /var/jenkins_home/workspace/sonar-qube-coding/sonar-project.properties
  71.  
    INFO: SonarQube Scanner 3.3.0.1492
  72.  
    INFO: Java 1.8.0_212 Oracle Corporation (64-bit)
  73.  
    INFO: Linux 3.10.0-957.1.3.el7.x86_64 amd64
  74.  
    INFO: User cache: /root/.sonar/cache
  75.  
    INFO: SonarQube server 7.4.0
  76.  
    INFO: Default locale: "en", source code encoding: "UTF-8"
  77.  
    INFO: Publish mode
  78.  
    INFO: Load global settings
  79.  
    INFO: Load global settings (done) | time=89ms
  80.  
    INFO: Server id: D549D2A8-AWpYoogtP1ytl0VN9Fsr
  81.  
    INFO: User cache: /root/.sonar/cache
  82.  
    INFO: Load/download plugins
  83.  
    INFO: Load plugins index
  84.  
    INFO: Load plugins index (done) | time=31ms
  85.  
    INFO: Plugin [l10nzh] defines 'l10nen' as base plugin. This metadata can be removed from manifest of l10n plugins since version 5.2.
  86.  
    INFO: Load/download plugins (done) | time=38ms
  87.  
    INFO: Loaded core extensions:
  88.  
    INFO: Process project properties
  89.  
    INFO: Load project repositories
  90.  
    INFO: Load project repositories (done) | time=11ms
  91.  
    INFO: Load quality profiles
  92.  
    INFO: Load quality profiles (done) | time=32ms
  93.  
    INFO: Load active rules
  94.  
    INFO: Load active rules (done) | time=201ms
  95.  
    INFO: Load metrics repository
  96.  
    INFO: Load metrics repository (done) | time=24ms
  97.  
    INFO: Project key: springboot-helloworld:0.0.1
  98.  
    INFO: Project base dir: /var/jenkins_home/workspace/sonar-qube-coding
  99.  
    INFO: ------------- Scan springboot-helloworld
  100.  
    INFO: Base dir: /var/jenkins_home/workspace/sonar-qube-coding
  101.  
    INFO: Working dir: /var/jenkins_home/workspace/sonar-qube-coding/.scannerwork
  102.  
    INFO: Source paths: src
  103.  
    INFO: Source encoding: UTF-8, default locale: en
  104.  
    INFO: Load server rules
  105.  
    INFO: Load server rules (done) | time=109ms
  106.  
    INFO: Language is forced to java
  107.  
    INFO: Index files
  108.  
    WARN: File '/var/jenkins_home/workspace/sonar-qube-coding/src/main/resources/application.yaml' is ignored because it doesn't belong to the forced language 'java'
  109.  
    INFO: 2 files indexed
  110.  
    INFO: Quality profile for java: Sonar way
  111.  
    INFO: Sensor JavaSquidSensor [java]
  112.  
    INFO: Configured Java source version (sonar.java.source): 8
  113.  
    INFO: JavaClasspath initialization
  114.  
    WARN: Bytecode of dependencies was not provided for analysis of source files, you might end up with less precise results. Bytecode can be provided using sonar.java.libraries property.
  115.  
    INFO: JavaClasspath initialization (done) | time=8ms
  116.  
    INFO: JavaTestClasspath initialization
  117.  
    INFO: JavaTestClasspath initialization (done) | time=0ms
  118.  
    INFO: Java Main Files AST scan
  119.  
    INFO: 2 source files to be analyzed
  120.  
    INFO: 2/2 source files have been analyzed
  121.  
    INFO: Java Main Files AST scan (done) | time=609ms
  122.  
    INFO: Java Test Files AST scan
  123.  
    INFO: 0 source files to be analyzed
  124.  
    INFO: Java Test Files AST scan (done) | time=1ms
  125.  
    INFO: Sensor JavaSquidSensor [java] (done) | time=1334ms
  126.  
    INFO: Sensor SurefireSensor [java]
  127.  
    INFO: 0/0 source files have been analyzed
  128.  
    INFO: parsing [/var/jenkins_home/workspace/sonar-qube-coding/target/surefire-reports]
  129.  
    INFO: Sensor SurefireSensor [java] (done) | time=55ms
  130.  
    INFO: Sensor JaCoCoSensor [java]
  131.  
    INFO: Sensor JaCoCoSensor [java] (done) | time=2ms
  132.  
    INFO: Sensor JavaXmlSensor [java]
  133.  
    INFO: Sensor JavaXmlSensor [java] (done) | time=0ms
  134.  
    INFO: Sensor Zero Coverage Sensor
  135.  
    INFO: Sensor Zero Coverage Sensor (done) | time=8ms
  136.  
    INFO: Sensor Java CPD Block Indexer
  137.  
    INFO: Sensor Java CPD Block Indexer (done) | time=10ms
  138.  
    INFO: SCM Publisher is disabled
  139.  
    INFO: 2 files had no CPD blocks
  140.  
    INFO: Calculating CPD for 0 files
  141.  
    INFO: CPD calculation finished
  142.  
    INFO: Analysis report generated in 114ms, dir size=13 KB
  143.  
    INFO: Analysis reports compressed in 39ms, zip size=6 KB
  144.  
    INFO: Analysis report uploaded in 671ms
  145.  
    INFO: ANALYSIS SUCCESSFUL, you can browse http://10.2.5.143:9000/dashboard?id=springboot-helloworld%3A0.0.1
  146.  
    INFO: Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report
  147.  
    INFO: More about the report processing at http://10.2.5.143:9000/api/ce/task?id=AWqdwF0moB4s4osu4wHu
  148.  
    INFO: Task total time: 3.412 s
  149.  
    INFO: ------------------------------------------------------------------------
  150.  
    INFO: EXECUTION SUCCESS
  151.  
    INFO: ------------------------------------------------------------------------
  152.  
    INFO: Total time: 4.469s
  153.  
    INFO: Final Memory: 10M/158M
  154.  
    INFO: ------------------------------------------------------------------------
  155.  
    ......
  156.  
    Finished: SUCCESS

八、SonarQube 查看代码扫描结果

登录 SonarQube 平台,查看代码扫描结果

Jenkins 使用 SonarQube 扫描 Coding的更多相关文章

  1. jenkins集成sonarQube实现代码质量检查

    1.sonarQube的简介 SonarQube是一款自动化代码审查工具,用于检测代码中的错误.漏洞和代码异味.它可以与你现有的工作流集成,以支持跨项目分支和拉取请求的连续代码检查. 其工作流程如下: ...

  2. jenkins的sonarqube之代码检测的两种方法

    #:sonarqube下载地址,我们安装6.7  高版本已经不支持MySQL和Mariadb(最小3G内存) https://www.sonarqube.org/downloads/ #:安装文档 h ...

  3. jenkins配置sonarqube

    jenkins配置sonarqube 下载插件SonarQube Scanner for Jenkins 在系统管理系统设置中选择 SonarQube servers 配置服务器名称.访问URL地址, ...

  4. Azure DevOps Server(TFS 2019) 中的SonarQube扫描任务出现错误:AppTest.java can't be indexed twice

    SonarQube错误描述 将一个Maven示例程序导入到Azure DevOps的待库中,执行SonarQube扫描过程时, DevOps Server提示下面的错误信息: [ERROR] Fail ...

  5. jenkins集成sonarqube代码审核

    目前在持续集成领域,除了后起之秀travis ci,在老牌工具中,最著名的还是非jenkins莫属.本篇文章简单的说一声jenkins与sonarqube的集成来实现代码的静态审核. 在这里不详细罗列 ...

  6. SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)

    [前言] 本系列主要讲述sonarqube的安装部署以及如何集成jenkins自动化分析.netcore项目.目录如下: SonarQube系列一.Linux安装与部署 SonarQube系列二.分析 ...

  7. SonarQube 扫描 Java 代码

    SonarQube 扫描 Java 代码 环境 需要提前安装好 SonarQube7.9,安装步骤见 Docker 安装 SonarQube 步骤 填写项目名 my_project 填写token名 ...

  8. 在 k8s 中的 jenkins 集成 sonarqube 实现代码质量检查

    不乱于心,不困于情,不畏将来,不念过往,如此安好 --<不宠无惊过一生>丰子恺 概述 关于在 k8s 中安装 jenkins 和 sornarqube 可以查看下面的文章: 在 k8s 中 ...

  9. jenkins 使用oclint 扫描 oc 代码

    jenkins 环境的搭建,在这里不在赘述,下面我们写一写,如何接入oclint. OCLint是一个强大的静态代码分析工具,可以用来提高代码质量,查找潜在的bug,主要针对c,c++和Objecti ...

随机推荐

  1. linux解压缩的常用命令

    1.解包:tar xvf filename.tar, 打包: tar cvf filename DirName 2.解压:gunzip filename.gz, tar zxvf filename.t ...

  2. 浏览器渲染html的过程

    关于浏览器如何渲染html界面一直不太清晰,所以现在理一理.由于本身对前深入的东西不太清晰,这篇博客更多的是在记录. 参考:https://www.cnblogs.com/dojo-lzz/p/398 ...

  3. crontab 定时任务简单备份数据库

    备份数据库/usr/local/mysql5.5/bin/mysqldump -uroot -p1234abcd wordpress >~/wordpress_20151206.sql 59 2 ...

  4. Haproxy 反向代理

    一.haproxy介绍 HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性.负载均衡,以及基于TCP和HTTP的应用程序代理. 特点如下: .支持两种代理模式:TCP(四层)和H ...

  5. Beta冲刺第2次

    二.Scrum部分 1. 各成员情况 翟仕佶 学号:201731103226 今日进展 优化了文件IO 存在问题 无 明日安排 同小小组另两人协商功能改进 截图 曾中杰 学号:201731062517 ...

  6. 为什么要指定HashMap的容量?HashMap指定容量初始化后,底层Hash数组已经被分配内存了吗?

    为什么要指定HashMap的容量? 首先创建HashMap时,指定容量比如1024后,并不是HashMap的size不是1024,而是0,插入多少元素,size就是多少: 然后如果不指定HashMap ...

  7. KVM管理工具

    Ovirt:功能强大,RHEV的开源版本 WebVirtMgr:virt-manager的WEB模式的替代品 ConVirt:分为开源版.商业版 Openstack:开源框架,复杂程度较高

  8. 项目Beta冲刺(团队)——05.23(1/7)

    项目Beta冲刺(团队)--05.23(1/7) 格式描述 课程名称:软件工程1916|W(福州大学) 作业要求:项目Beta冲刺(团队) 团队名称:为了交项目干杯 作业目标:记录Beta敏捷冲刺第1 ...

  9. SpringBoot 过滤器, 拦截器, 监听器 对比及使用场景

    1. 过滤器 (实现 javax.servlet.Filter 接口) ① 过滤器是在web应用启动的时候初始化一次, 在web应用停止的时候销毁. ② 可以对请求的URL进行过滤, 对敏感词过滤, ...

  10. 金融类openapi

    股市URL解析 http://money.finance.sina.com.cn/moneyflow/?stockName=上证指数&symbol=sh000001&stockSymb ...