• Framework项目持续集成(jenkins)及集合SonarQube



    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:WindowsSystem32configsystemprofileAppDataLocalJenkins.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,配置文件

    • extensionsjdbc-driveroracle 用于放置连接数据库工具

    • 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放到extensionsjdbc-driveroracle下。

    配置文件更改

    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 FilesJavajdk-11.0.8injava
    

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

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

    需要将这两个配置打开

    jenkins 集成 sonarqube

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

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

    相关操作步骤截图

    项目描述及构建日志处理

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

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

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

    构建完成后,通过SSH推送到服务器,推送完成后,会执行 Exec command中的命令,一般都是通过某个命令将上传的文件移动覆盖发布的文件。

    命令大致就是xcopy /s C:jenkins"PowerShell Server 2020"sftprootdemo_new* C:productWeb /Y。前面的是PowerShellServer2020的sftproot安装/上传路径,后面的是发布文件路径

    可在高级设置中,设置忽略文件。格式如 **/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/13fJS4rDQTmi1fsy1HVrdxQ 提取码: cd41

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

  • 相关阅读:
    「初级篇」跟我一起学docker(二)--核心概念和安装
    程序员有哪些借口可以让自己写出低质量的代码?
    「初级篇」跟我一起学docker(一)--认识
    后端程序猿怎么提高技术?提高编码质量?
    河南这么大的省,也所谓的准一线,为什么IT行业就是发展不起来呢?
    JAVA使用Gson解析json数据,实例
    JAVA equals 和 “==”的异同
    JAVA WEB 对返回数据进行按中文名称首字母A~Z升序排序
    JAVA验证数字的正则表达式,来一发
    【转】Java.util.ArrayList.set()方法实例
  • 原文地址:https://www.cnblogs.com/levywang/p/13588231.html
Copyright © 2020-2023  润新知