TimeBook
  • Introduction
  • 1.前言
    • 前言
    • 鸣谢
  • 2.环境篇
    • 工具部署和使用
      • 团队协作工具
        • Confluence
      • 开发工具
        • Docker
          • 镜像导入导出
          • 安装
        • Docker Compose
      • 持续集成工具
        • Gerrit
        • Sonarqube
          • 分析参数设定
          • Prerequisite
          • 服务端设置
        • Ubuntu Ci Deploy
          • ubuntu使用docker部署jenkins+sonarqube
        • 持续集成部署
      • 文本编辑工具
        • Gitbook相关注意事项
        • Markdown快速入门
      • 版本控制
        • Git
          • 1.基础
            • Git基础(一)
            • Git基础(二)
            • Git基础(三)
            • Git基础(四)
            • Git基础(五)
          • 2.命令详解
            • 命令速查
          • 3.进阶技巧
            • git技巧
      • 自动化测试工具
        • Appium
          • capability参数配置
          • 安装
          • 简介
      • 项目管理工具
        • Jira
    • 开发环境配置
      • 通用
        • Homebrew安装与使用
        • Git服务器添加SSH Key
        • koroFileHeader使用
        • nodejs与npm的安装
        • npm更换国内源
        • pip使用相关
        • PostgreSQL安装与使用
        • proxychain安装与使用
        • shell配置环境变量
        • snapd安装与使用
        • terminal走代理
    • 快捷键速查
      • shell常用快捷键
  • 3.语言篇
    • C
      • 代码规范
      • 语言技巧
    • Cpp
      • 代码规范
      • 基础知识
        • 理解C++中的左值和右值
      • 语言技巧
        • 并发编程
          • 简单的线程池实现
    • Golang
      • 代码规范
        • 避免使用转义字符串
        • 避免参数语义不明确
        • 嵌套式结构体
        • 函数的分组与顺序
        • 函数命名
        • 声明一致性
        • 导入别名
        • 使用字段名初始化结构体
        • 本地变量声明
        • map初始化
        • nil用法
        • 包命名
        • 命名Printf样式的函数
        • 减少嵌套
        • 缩小变量作用域
        • struct引用初始化
        • 测试表声明
        • 顶层变量声明
        • 不必要的else
      • 环境配置
        • 代码检查格式化工具
          • Go Fmt
          • Goimports
          • Golint
          • Go Vet
        • go mod详解
        • golang安装
        • Golang开发环境
        • Troubleshooting
      • 语言技巧
        • 如何分包
    • Java
      • 代码规范
      • 语言技巧
        • 注解编程
        • 动态代理
    • Js
      • 语言技巧
        • Rollup
    • Kotlin
      • 基础知识
        • 写给开发者Kotlin指引(一)
        • 写给开发者Kotlin指引(二)
    • Python
      • 语言技巧
        • Best Practice Of Python S Project Structure
  • 4.规范篇
    • Git message规范
  • 5.技术篇
    • Android技术
      • Hook
        • EdXposed例子
        • Android 10 上安装Magisk和EdXposed
      • Tinker
        • 1.Tinker及其使用
      • 准备
        • ADB连接设备步骤及注意事项
        • adb连接设备
        • aosp编译
      • 基础
        • Binder接口调用的鉴权方法
        • Make 及 Android 编译系统介绍
        • 使用Content Provider为其他应用提供数据
      • 源码阅读
        • Framework源码分析 Looper Handler
        • Framework源码分析 启动流程 ServiceManager的初始化
        • Framework源码分析 启动流程 Zygote启动SystemServer
    • JS Bridge
      • JSBridge初探
    • Kernel技术
      • kallsyms子系统
    • Test技术
      • 软件测试
        • jnekin+sonar 部署 问题总结
        • 性能测试基础
        • 软件测试的背景
        • 测试基础
        • 测试人员的核心竞争力
    • 操作系统原理
      • 处理器如何实现原子操作
Powered by GitBook
On this page
  • 一、系统架构
  • 二、部署步骤
  • 2.1 镜像安装
  • 2.2 配置
  • 2.3 添加项目测试
  • 2.4 查看测试结果
  • 三、troubleshooting

Was this helpful?

  1. 2.环境篇
  2. 工具部署和使用
  3. 持续集成工具

持续集成部署

本文介绍如何基于docker,将代码静态分析工具sonarqube集成至Jenkins。

一、系统架构

以Jenkins为持续集成系统架构的核心,sonarqube在代码编译之后进行静态扫描,sonarqube使用PostgreSQL作为静态扫描的数据持久化方案。目前架构如下图所示: todo

二、部署步骤

2.1 镜像安装

  1. 使用以下命令拖取Jenkins、PostgreSQL、SonarQube的docker镜像:

     docker pull jenkins/jenkins:lts
     docker pull sonarqube:lts
     docker pull postgres:10
  2. 编写docker-compose.yaml

     version: "3"
    
     services:
         jenkins:
             image: jenkins/jenkins:lts
             ports:
                 - "8080:8080"
                 - "50000:50000"
             networks:
                 ci_net:
                     ipv4_address: 172.20.0.2
             volumes:
                 - ${WQ_CI_HOME}/jenkins_home:/var/jenkins_home:rw
    
         sonarqube:
             image: sonarqube:lts
             ports:
                 - "9000:9000"
             networks:
                 ci_net:
                     ipv4_address: 172.20.0.3
             environment:
             - SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar
             volumes:
                 - ${WQ_CI_HOME}/sonarqube_home/conf:/opt/sonarqube/conf:rw
                 - ${WQ_CI_HOME}/sonarqube_home/logs:/opt/sonarqube/logs:rw
                 - ${WQ_CI_HOME}/sonarqube_home/data:/opt/sonarqube/data:rw
                 - ${WQ_CI_HOME}/sonarqube_home/extensions:/opt/sonarqube/extensions:rw
    
         db:
             image: postgres:10
             networks:
                 ci_net:
                     ipv4_address: 172.20.0.4
             ports:
                 - "8001:5432"
             environment:
             - POSTGRES_USER=sonar
             - POSTGRES_PASSWORD=sonar
             volumes:
             - ${WQ_CI_HOME}/db_data:/var/lib/postgresql/data:rw
    
     networks:
         ci_net:
             driver: bridge
             ipam:
                 driver: default
                 config:
                     - subnet: 172.20.0.0/16
  3. 将docker-compose.yaml中用到的bind目录创建出来;

  4. 在docker-compose.yaml同级目录下使用docker-compose up启动服务;

  5. 等待服务器启动完成,即可进入Jenkins和SonarQube进行配置。

2.2 配置

  1. 初始密码键入

    Jenkins在初次启动会要求输入初始密码,该密码位于$JENKINS_HOME/secrets/initialAdminPassword,使用下列命令查看:

     cat $JENKINS_HOME/secrets/initialAdminPassword

    输入该密码并进入Jenkins。

  2. 选择初始安装插件

    这一步会选择初始安装的插件,如果当前环境不能翻墙,建议反选所有插件,并进入用户名密码设置阶段,设置完成后就可以进入Jenkins。

  3. 安装插件

    Jenkins提供了在线安装的方式,如果不能翻墙,也可以选择使用下载好的离线插件。点击Manage Jenkins->Manage Plugin->Advanced,点击Browse上传已经下载好的*.hpi插件。

  4. 配置证书

    • 打开sonarqube的web管理页,登陆账号,初始账号和密码均为admin。点击Administration->Security->User,在admin里面点击tokens下面的button,添加界面如下图所示:

      在Generate Tokens随意输入一个key,点击generate,复制弹出框中的token。

    • 打开Jenkins的web管理页,点击Credentials->System,在右边点击Global credentials (unrestricted),然后点击左边的Add Credentials,在Kind中选为Secret Text,然后将刚刚复制的token粘贴到Secret框中,在ID中为该证书取名,Description可以为空。

  5. 其中Name表示该服务器的名字,可以随意更改;Server URL为固定值,如果想修改,需要修改docker-compose.yaml中的ipam;Server authentication token是Jenkins和sonarqube服务器通信的证书,选择上一步添加的证书即可。

  6. 配置sonarqube scanner

    sonarqube scanner是用于代码静态分析的工具,点击Manage Jenkins->Global Tool Configuration,找到SonarQube Scanner Installations,进入配置。如果不能翻墙,请反选Install Automatically,并将安装包解压的路径填入SONAR_RUNNER_HOME。

2.3 添加项目测试

  1. Jenkins点击New Items,然后选择Freestyle Project,输入项目名称点击OK;

  2. 找到Source Code Management,选择Git,填入项目地址。如果是从公司的gerrit上clone代码,那么需要配置证书,配置方法跟上面所述类似。

  3. 找到Build,选择Add build step->Execute SonarQube Scanner。根据所测项目的类型,在Analysis properties,填入相关配置。以golang为例,通用填法如下:

     sonar.projectKey=$(projectKey)
     sonar.sources=.
     sonar.exclusions=**/*_test.go,**/vendor/**
    
     sonar.tests=.
     sonar.test.inclusions=**/*_test.go
     sonar.test.exclusions=**/vendor/**

2.4 查看测试结果

三、troubleshooting

  1. 执行docker-compose可能会有文件夹权限错误:

     sonarqube_1  | 2020-04-26 10:13:50,791 main ERROR RollingFileManager (/opt/sonarqube/logs/es.log) java.io.FileNotFoundException: /opt/sonarqube/logs/es.log (Permission denied) java.io.FileNotFoundException: /opt/sonarqube/logs/es.log (Permission denied)

    solution:

     //获取sonarqube的bind目录应为什么权限
     docker run --rm sonarqube:lts id sonarqube
     //根据结果设定目录权限
     sudo chown -R 999:999 sonarqube_home/
  2. error 1 bootstrap checks failed sonarqube

    执行以下命令即可:

     sudo sysctl -w vm.max_map_count=262144
Previousubuntu使用docker部署jenkins+sonarqubeNext文本编辑工具

Last updated 4 years ago

Was this helpful?

配置sonarqube服务器 点击Manage Jenkins->Configure System,找到SonarQube servers,按照下图进行设置。

其中,$(projectKey)可以随意填,例如项目的名字,但是对于maven项目,它的格式为<groupId>:<artifactId>。具体请参考。 其余语言参考。

在SonarQube页面点击Project即可查看扫描结果。

官方文档
sonarqube分析参数
扫描结果
sonarqube scanner
sonarqube服务器设置
sonarqube声称证书