Bootstrap

docker学习总结5 - 部署 sonarqube 及jenkins持续集成

1、环境准备

  1. 查询linux的值:
[root@aa ~]# sysctl vm.max_map_count
vm.max_map_count = 524288
[root@aa ~]# sysctl fs.file-max
fs.file-max = 1608722
[root@aa ~]# ulimit -n
131072
[root@aa ~]# ulimit -u
63407
  1. 设置linxu的值满足以下要求:

vm.max_map_count 大于或等于524288
fs.file-max 大于或等于131072
运行SonarQube的用户可以打开至少131072个文件描述符
运行SonarQube的用户可以打开至少8192个线程

设置方法为:

sysctl -w vm.max_map_count=524288
sysctl -w fs.file-max=131072
ulimit -n 131072
ulimit -u 8192

2、使用compose集群部署 sonarqueb

  1. linux 安装 docker\docker-compose,参考 docker学习总结2
  2. 编写 docker-compose-sonarqube.yml
version: '3'
services: 
  postgres: 
    image: postgres
    restart: always
    container_name: sonarqube_postgres
    ports:
      - 5432:5432
    volumes:
      - ./postgresql/:/var/lib/postgresql
      - ./datasql/:/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:
      - ./extensions:/opt/sonarqube/extensions
      - ./logs:/opt/sonarqube/logs
      - ./data:/opt/sonarqube/data
      - ./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
  1. mkdir目录后,touch 文件 docker-compose-sonarqube.yml,将内容复制进去
  2. 在该目录下执行:docker-compose up -d
  3. 进入web界面:http://10.240.3.253:9000,初始密码:admin/admin
  4. 配置中文插件,当前版本有bug,配置不了

3、与jenkins的持续集成配置

3.1 linux配置最新jdk11

原因:jdk8后面运行会报错, 解决办法:更新服务器上的jdk为最新版本,参考链接:https://stackoverflow.com/questions/37686144/java-lang-unsupportedclassversionerror-org-sonar-batch-bootstrapper-environment

jdk8 执行时候会报错:java.lang.UnsupportedClassVersionError: org/sonar/batch/bootstrapper/EnvironmentInformation has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

  • 卸载原有的jdk
查看已安装的jdk: yum list installed | grep java  
卸载所有的jdk: yum -y remove java-1.7.0-openjdk*  
  • 安装新的jdk
查看当前所有的jdk版本: yum -y list java*  
下载jdk11: yum install -y java-11-openjdk.x86_64
验证: java -version

3.2 jenkins 上配置 sonarqube 插件

  1. 插件管理中安装:
Sonar Quality Gates Plugin
SonarQube Scanner for Jenkins
  1. 全局工具配置:
    在这里插入图片描述

3.3 jenkins 上配置 sonarscaner 插件

系统配置中添加 SonarQube servers 的配置

  • Name 输入: SonarQube
  • Server URL 输入: http://ip:9000
  • Server authentication token 中选择:Secret text
    在这里插入图片描述
  • 点击添加按钮,在弹框中选择 secret text 类型,输入secret密码信息,值来自于http://ip:9000 网站,如下:
    在这里插入图片描述
    在这里插入图片描述

4、扫描指定分支的代码

参考链接:https://www.cnblogs.com/cjsblog/p/10740840.html

  1. 在jenkins系统管理 > 系统配置 > sonarqube servers层级下:勾选 Environment variables
  2. 新建自由风格的任务,任务名:demo_sonar_001
  3. 源码管理:配置git任务,参考 git总结
    (1)输入开发那边不同git仓库的ssh地址、密钥、分支名
    在这里插入图片描述

(2)配置密钥:复制id.rsa文件里面的内容到jenkins上即可,路径一般在:C:\Users\tfjiao.ssh
在这里插入图片描述

  1. 构建环境:勾选 Pre sonarqube scanner ,不输入密钥,因为系统全局变量已经配置过了
  2. 构建: 增加构建步骤 > execute sonarqube scanner > Analysis properties中输入
sonar.projectKey=demo001
sonar.projectName=demo001
sonar.projectVersion=1.0
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.sources=$WORKSPACE
sonar.java.binaries=$WORKSPACE
sonar.projectKey=demo001  # 唯一性,不能跟其他项目重名
sonar.projectName=demo001  # sonarqube界面显示的项目名
sonar.projectVersion=1.0  #  项目版本
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.sources=$WORKSPACE  # 需要检测的目录
sonar.java.binaries=$WORKSPACE

不常用的配置:

sonar.projectKey=demo001      #sonar平台中相对应项目的key
sonar.projectName=demo001      #sonar平台中相对应项目的名字
sonar.sources=.               #sonar检测的源文件目录,‘.’表示当前根目录下的所有文件目录;包含主要源文件的目录的逗号分隔路径
sonar.exclusions=**/*_test.go,**/vendor/**      #检测中排除的源文件(排除的源文件不参与检测,一般排除单元测试文件、配置文件等)
sonar.tests=.                 #sonar检测的测试文件目录,‘.’表示当前根目录下的所有文件目录;包含测试源文件的目录的逗号分隔路径。从构建系统中读取Maven,Gradle,MSBuild项目。否则默认为空。
sonar.test.inclusions=**/**_test.go             #检测中的测试源文件(指定单元测试文件)
sonar.test.exclusions=**/vendor/**              #检测中排除的测试源文件(排除的源文件不参与检测)
  1. 运行任务,sonarqube会自动创建项目

5、问题汇总

  1. 配置git仓库时候,一直提示无法连接仓库,密钥也没问题,

排查发现其他项目的任务都失败了,根因是jdk调用时候报错了
解决办法:1、删掉了全局配置里面的jdk,因为我没有配用户名,jenkins默认优先调用jenkins配置的jdk,干掉后,就会调用服务器我配置的jdk11,问题解决

  1. 报错;ERROR: Couldn’t find any revision to build. Verify the repository and branch configuration for this job.

ERROR: Couldn’t find any revision to build. Verify the repository and branch configuration for this job.
根因:配置git任务时分支名多了个空格

  1. 启动pt容器老失败?

报错:initdb: error: directory “/var/lib/postgresql/data” exists but is not empty
If you want to create a new database system, either remove or empty
the directory “/var/lib/postgresql/data” or run initdb
with an argument other than “/var/lib/postgresql/data”.
The files belonging to this database system will be owned by user “postgres”.
This user must also own the server process.
解决办法:去掉pg数据库容器的数据卷

  1. 启动sonarqube容器失败?

2021.12.07 12:53:22 INFO web[][o.sonar.db.Database] Create JDBC data source for jdbc:postgresql://192.168.10.120:5432/sonar
2021.12.07 12:53:32 ERROR web[][o.s.s.p.PlatformImpl] Web server startup failed
服务启动失败
解决办法:更新ip,忘了改ip了

;