Framework项目持续集成及集合SonarQube - 前言

个人博客原文地址:http://book.levy.net.cn/doc/devops/jenkins_sonar.html

本文主要记录在windows平台部署 jenkins 服务和 sonar 服务,然后实现持续集成和代码质量管理的一套服务。

jenkins是一款开源的提供友好操作界面的持续集成交付工具,主要用于持续构建、测试、发布软件项目。且能通过邮件、钉钉等通知最终构建结果,支持常用版本控制工具GIT/SVN。

sonarqube是一款开源的提供友好操作界面的代码质量管理工具。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具。

而两者结合起来使用,大概步骤就是 代码提交 - sonar质量监控 - jenkins集成部署 - 测试 - 生产使用

CI/CD是什么 -- jenkins

CI的英文名称是Continuous Integration,中文翻译为:持续集成。

CD可对应多个英文名称,持续交付Continuous Delivery和持续部署Continuous Deployment

主要是将代码分成几个环境来管理,如 开发环境 - 测试环境 - 生产环境 ,一般来说,在开发人员代码提交后,(尽快的进行代码质量检测 - sonar),马上使用jenkins进行构建、单元测试。根据测试结果判断是否发布测试环境,跑自动化测试流程或者人工测试相关功能,进行回归测试,检查正确性和稳定性等。然后再集成到生产环境 的工作模式。

什么是sonarqube?什么是CodeReview?

什么是sonarqube?

Sonar (SonarQube)是一个开源平台,用于管理源代码的质量。 Sonar 不只是一个质量数据报告工具,更是代码质量管理平台。支持多种语言的代码质量管理与检测

SonarQube是一种自动代码审查工具,用于检测代码中的错误,漏洞和代码异味。可以与jenkins集成,或手动执行,以便在项目分支和拉取请求之间进行连续的代码检查

检测结果存储于数据库,支持多种数据库(新版不再支持mysql),然后通过UI展示出来结果

什么是CodeReview?为什么要这样做?

CodeReview简单来说就是由有经验、对业务熟悉的老前辈进行检查代码,查看代码漏洞的的一种流程。从而提高项目健壮性,减少错误及使代码简洁易懂。

通常情况下,由于项目开发进度太赶,没时间进行代码审查,从而导致出现一些低级错误,这样会导致用户体验很差,进而可能流失客户。而为了提高开发速度及效率,还要保证代码质量,就可以使用sonar来自动检测,然后检测完成后在网页上查看检测结果,再进行修复。虽不能从业务上来保证正确性,但能通过这种途径减少代码上的直接错误。

工具安装

要使用这一套环境,得先安装好JDK,本文记录使用的都是最新版的工具,因此请安装 JDK 11来保证服务可用。且配置好环境变量。

jenkins安装

可从官网 https://www.jenkins.io/download/ 上下载相应的安装包,或war包,对应去操作使用,可能下载会比较慢,文末有提供安装包版本 2.253。

双击运行安装包,安装时会让你进行选择使用端口号,安装完成后,不要着急去访问服务,先将插件源给替换掉,以保证光速下载推荐插件。

更换插件源

配置地址:C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins.jenkins 我的是这个,提供参考

或者修改 hudson.model.UpdateCenter 中的地址

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

然后修改updates 文件夹中的 default.json 文件

修改后到服务中重启jenkins服务。 或者docker restart jenkins 重新启动服务 修改完,有时候会被重置回去,发现下载插件很慢的时候,就检查下,重新替换吧

jenkins初始化及插件安装

这里就不配图了,毕竟都是简单的操作步骤。

  1. 打开 localhost:端口 地址,复制本地地址到地址栏获取密码并填写

  2. 点击第一个安装推荐插件后,开始安装推荐的插件。这时候你会感受到光速下载插件。

  3. 安装完成后,点击继续,创建一个新的管理员账户

  4. 点击完成,相当于jenkins服务就安装完成了。

msbuild 和 nuget下载

文末有提供相关工具

msbuild工具,下载地址:https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16

nuget下载地址:https://www.nuget.org/downloads

插件安装

点击左边Manage Jenkins按钮,在plugin中安装如下插件,除推荐插件外,

  • Publish Over SSH

  • DingTalk

  • SonarQube Scanner

  • push over ssh

  • MSBuild

插件配置

点击左边Manage Jenkins按钮,点击 Configure System

集成sonarqube,配置这里的token,添加时选secret text,需要在下面安装的sonar服务中获取,相关截图如下

钉钉通知的配置

push over ssh的配置,由于windows不支持ssh,可自行安装相关软件来支持,这里使用的是PowerShellServer2020。在文末中有提供

Extended E-mail Notification 邮件通知配置,自行网上查找jenkins 邮件通知 会有很多的。

点击左边Manage Jenkins按钮,点击 Global Tool Configuration

配置好jdk和git,服务器得准备git环境

再把framework生成 和 扫描插件配置好

sonarqube安装

服务器要求只要要2核4G,不然可能会安装不成功。

在SonarQube的下载页面:https://www.sonarqube.org/downloads/,下载需要的版本。下载完成后,解压后可直接使用,文末有提供安装包和相关需要使用到的工具。

需要使用到的目录或文件就是

  • bin目录下 对应平台 的StartSonar.bat

  • conf,配置文件

  • extensions\jdbc-driver\oracle 用于放置连接数据库工具

  • logs 日志文件目录,错误时查看错误的地方

  • web UI文件夹目录

数据库创建及处理

先在SqlServer数据中新建对应数据库 Sonar,然后做相应修改

-- 查看排序策略
SELECT name, collation_name
FROM sys.databases
WHERE name = N'Sonar';
-- 更改排序策略
ALTER DATABASE Sonar
COLLATE Chinese_PRC_CS_AS ; --***锁 无法更改 查询连接用户
select spid
from master.dbo.sysprocesses
where dbid=db_id('Sonar')
-- 杀死连接进程
kill 53 -- 排序规则必须区分大小写(CS)和区分重音(AS)。
-- READ_COMMITED_SNAPSHOT 必须在SonarQube数据库上设置。
SELECT is_read_committed_snapshot_on FROM sys.databases WHERE name='Sonar'; ALTER DATABASE Sonar SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;

-- 开启了区分大小写后 注意数据库名称等的大小写

上面两个数据库调整是必须的。

官方文档地址:https://docs.sonarqube.org/latest/setup/install-server/

再创建相关的用户,并设置密码。

需要使用到的插件准备

当然这里也需要jdk 11,需要先行安装。

msbuild扫描插件下载地址:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-msbuild/

Microsoft SQL JDBC驱动程序下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=57782 下载完成后,将下载的exe放到extensions\jdbc-driver\oracle下。

配置文件更改

conf下的sonar.properties文件,由于这里使用的sqlserver,因此这里是对SqlServer做的调整,

# 数据库
sonar.jdbc.username=sonar
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:sqlserver://IP:端口;databaseName=Sonar # web端口
sonar.web.port=9000

若系统中有多个jdk版本,则修改wrapper.conf

wrapper.java.command=C:\Program Files\Java\jdk-11.0.8\bin\java

然后运行 C:\DevOps\sonarqube-8.4.1.35646\bin\windows-x86-64\StartSonar.bat ,会自动生成数据库表文件,运行成功后,访问http://localhost:9000

可在 administration -- Market 然后搜索Chinese 安装,安装完成后需要重启服务,界面上也会出现重启按钮。

需要将这两个配置打开

jenkins 集成 sonarqube

在前面的服务启动后,相关配置配置好,新建项目流程

在jenkins服务中,点击 new item,输入一个项目名字,然后选择Freestyle project

相关操作步骤截图

项目描述及构建日志处理

配置git服务,及设置每30分钟轮询,当轮询到有新代码提交时就进行构建。

设置构建环境,构建前删除,和构建日志输出时间,及构建时,先进行还原项目

设置构建扫描,和项目构建环境

构建完成后,通过SSH推送到服务器,推送完成后,会执行 Exec command中的命令。可在高级设置中,设置忽略文件。格式如 **/Web*.config,**/Release/assets/,images/

项目截图。

这是扫描一个大项目的结果,有一些问题,项目越大,扫描时间也会越长哦

特别说明。如果出现构建失败,提示msbuild找不到项目文件的话,可以尝试把jenkins的配置文件config.xml中的工作路径给修改下,把目录放到外层试试。

我这里改成了这个,就正常工作了。<workspaceDir>C:/DevOps/workspace/${ITEM_FULL_NAME}</workspaceDir>

docker中安装相关服务 yml

由于本项目是framework,在linux中没法生成。所以这个就没做后文了,

拉取相关镜像后,在yml所在文件目录,执行命令启动服务

服务器安装Docker-Compose太慢,可以通过本地安装好后,上传服务器。

Docker-Compose简介安装使用

version: '3'
services:
postgres:
image: postgres
restart: always
container_name: postgres
ports:
- 5432:5432
volumes:
- /data/postgres/postgresql/:/var/lib/postgresql
- /data/postgres/data/:/var/lib/postgresql/data
environment:
TZ: Asia/Shanghai
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
POSTGRES_DB: sonar
networks:
- sonar-network
sonar:
image: sonarqube
restart: always
container_name: sonarqube
depends_on:
- postgres
volumes:
- /data/sonarqube/extensions:/opt/sonarqube/extensions
- /data/sonarqube/logs:/opt/sonarqube/logs
- /data/sonarqube/data:/opt/sonarqube/data
- /data/sonarqube/conf:/opt/sonarqube/conf
ports:
- 9000:9000
environment:
SONARQUBE.JDBC.USERNAME: sonar
SONARQUBE.JDBC.PASSWORD: sonar
SONARQUBE.JDBC.URL: jdbc:postgresql://postgres:5432/sonar
networks:
- sonar-network
networks:
sonar-network:
driver: bridge

配置解释:

version: '3': 表示使用第三代语法来构建 docker-compose.yaml 文件。

services: 用来表示 compose 需要启动的服务,上面的配置文件中服务分别为:sonar、mysql

Image:指定下载镜像版本

container_name: 指定容器名称

environment: 此节点下的信息会当作环境变量传入容器,例如mysql 服务配置了数据库、密码和权限信息。

ports: 表示对外开放的端口

volumes: 加载本地目录下的配置文件到容器目标地址下

restart: always 表示如果服务启动不成功会一直尝试。

depends_on:配置依赖服务,表示需要先启动 depends_on 下面的服务后,再启动本服务。

links:与depends_on相对应,depends_on控制启动顺序,links控制容器连接问题。值为"服务名:别名"或者直接使用服务名

command: 执行内部命令

networks:加入指定网络,用同一个网络。

相关工具包

链接: https://pan.baidu.com/s/1LAfeYEA5UiOvCQIjdIRXyg 提取码: sfb2

个人博客原文地址:http://book.levy.net.cn/doc/devops/jenkins_sonar.html

Framework项目持续集成(jenkins)及集合SonarQube的更多相关文章

  1. 持续集成Jenkins + robot framework + git

    Jenkins + robot framework + git持续集成 一.Jenkins安装插件 进入系统管理—插件管理—可选插件下安装以下插件Git Client Plugin.GIT plugi ...

  2. Jenkins +Maven+Tomcat+SVN +Apache项目持续集成构建

    详解Jenkins +Maven+Tomcat+SVN +Apache项目持续集成 一:前言 1. Jenkins jenkins版本大全http://mirrors.jenkins-ci.org/ ...

  3. Jenkins构建Android项目持续集成之findbugs的使用

    Findbugs简介 关于findbugs的介绍,可以自行百度下,这里贴下百度百科的介绍.findbugs是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题 ...

  4. 持续集成~Jenkins构建GitHub项目的实现

    有了前两讲的基础,这回我们就可以把github上的项目做到CI(jenkins)里了,让它自动去集成部署,持续集成~Jenkins里的NuGet和MSBuild插件,持续集成~Jenkins里的pow ...

  5. 这些年我们一起搞过的持续集成~Jenkins+Perl and Shell script

    这些年我们一起搞过的持续集成~Jenkins+Perl and Shell script ##转载注明出处:http://www.cnblogs.com/wade-xu/p/4378224.html ...

  6. Selenium Web 自动化 - 项目持续集成(进阶)

    Selenium Web 自动化 - 项目持续集成(进阶) 2017-03-09 目录 1 背景及目标2 环境配置  2.1 SVN的安装及使用  2.2 新建Jenkins任务3 过程分析 1 背景 ...

  7. Selenium Web 自动化 - 项目持续集成

    Selenium Web 自动化 - 项目持续集成 2017-02-13 目录 1环境准备  1.1 安装git  1.2 安装jenkins  1.3 安装jenkins插件  1.4 jekins ...

  8. 自动化持续集成Jenkins

    自动化持续集成Jenkins 使用Jenkins配置自动化构建http://blog.csdn.net/littlechang/article/details/8642149 Jenkins入门总结h ...

  9. 持续集成Jenkins+sonarqube部署教程

    1 引言 1.1 文档概要 本文主要介绍jenkins,sonar的安装与集成,基于ant,maven构建.用一个例子介绍jenkins的编译打包部署,代码检查.最后集成jenkins.(现阶段只是简 ...

随机推荐

  1. 企业玩转DevOps转型:由弱到强,只需7步

    [摘要] 在参考业界方法并总结客户成功故事的基础上,本文提出了“七步法”路线图,希望能帮助更多的企业顺利进行DevOps转型. 从2009年诞生,DevOps已经悄然走过了10多个年头.Gartner ...

  2. python3.5 continue和break 项目:买房分期付款(2)

    #案例:买房分期付款24万(10年期限) i=1#定义年份sum1=0while i<=10: print("第",i,"年到了......") if i ...

  3. Qt编译出现cc1plus.exe: out of memory allocating 65536 bytes问题

    今天编译Qt程序,出现这个问题: cc1plus.exe: out of memory allocating 65536 bytes 这个还没有遇到过,上网查了下.问题原因是资源文件过大. qt的资源 ...

  4. Java web 小测验

    题目要求: 1登录账号:要求由6到12位字母.数字.下划线组成,只有字母可以开头:(1分) 2登录密码:要求显示“• ”或“*”表示输入位数,密码要求八位以上字母.数字组成.(1分) 3性别:要求用单 ...

  5. Weblogic 连接 RMI 服务报错 Connection refused

    WebLogic 连接 RMI 服务报错 Connection refused 访问 WebLogic RMI 服务报错,连接被拒绝,连接超时. 奇怪的是,报错的 host 根本不是我要访问的. 报错 ...

  6. Django REST framework 单元测试

    Django REST framework 单元测试 只是简单记录一下测试代码怎么写 环境 Win10 Python3.7 Django2.2 项目 参照官网 快速开始 写了一个 demo 测试 参照 ...

  7. mongodb 4.0副本集搭建

    近期有同学问mongodb副本集难不难部署,我的回答是不难,很快,几分钟搞定,比mysql MHA简单的不止一点半点. 那么到底如何部署呢?请看下文. 1.  准备工作 1.1 下载软件 选择版本并下 ...

  8. SpringBoot学习之整合Swagger

    Swagger介绍 1.什么是Swagger 作为后端程序开发,我们多多少少写过几个后台接口项目,不管是编写手机端接口,还是目前比较火热的前后端分离项目,前端与后端都是由不同的工程师进行开发,那么这之 ...

  9. JavaScript 跨站伪造请求-CSRF

    CSRF: Cross-Site Request Forgery CSRF 概念 `定义`: 是一种对网站的而已利用,也被称之为one-click-attack 或者 session riding, ...

  10. Centos7重置root密码(详细版)

    修改了root密码,步骤如下: 步骤一:在开机出现如下界面的时候就按“e”键     步骤二:在步骤一按下”e”键之后,出现如下界面,按 ↓键一直到底部找到“LANG=zh_CN.UTF-8”这句,在 ...