前言

环境和要求

系统环境:win11
配置要求:能跑得动文中服务总和的内存
软件环境:Docker desktop。https://www.docker.com/products/docker-desktop/
网络环境:有办法上外网下载容器和所需要的服务。

注意

本文是从零开始部署Android环境的Jenkins CI/CD流水线(docker环境,Win系统)-CSDN博客的后续文章,也是docker项目构建的第二篇。

说明

在本文中,如无特殊说明,所有需要输入指令的地方都为docker.desktop终端的terminal(其实就是powerShell),下图红框处点一下即可打开。输入docker,没有出现报错时,就算准备完成了。如果出现报错,检查一下你的环境变量是否有把docker加进去,这部分请百度解决。
在这里插入图片描述

1. 容器部署

1.1 docker-compose.yml

部署Sonarqube也需要一个Sonarqube专门的数据库,并且按照官方的说法,现在已经不推荐使用MySql作为Sonarqube的数据库了,建议使用PostgreSQL。

本次我们还是使用docker-compose.yml的方式构建容器。

  1. 随便找一个你用来放置配置文件的文件夹,新建一个也行,比如D:/docker/SonarqubeConfig。
  2. 新建一个文件,名称为docker-compose.yml,然后用txt的方式打开它。
  3. 把我们所需要的所有服务和连通网络都写到这个文件里面,把以下文件的内容复制进去。文件看着很长大一串,但是不要担心,这些内容你只需要复制进docker-compose.yml文件即可,除了最底下的network部分以外不需要做任何修改。
services:
  sonarqube-db:
    image: ${POSTGRES_IMAGE_TAG}
    container_name: ${POSTGRES_CONTAINER_NAME}
    restart: unless-stopped
    networks:
      - ${EXTERNAL_NETWORK}
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      PGDATA: /var/lib/postgresql/data/pgdata # 明确指定数据目录:cite[3]
    volumes:
      # 使用绑定挂载,将数据直接存储在主机自定义路径下
      - ${HOST_BASE_PATH}/postgres/data:/var/lib/postgresql/data
      - /etc/localtime:/etc/localtime:ro
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 10s
      timeout: 5s
      retries: 5

  sonarqube:
    image: ${SONARQUBE_IMAGE_TAG}
    container_name: ${SONARQUBE_CONTAINER_NAME}
    restart: unless-stopped
    depends_on:
      sonarqube-db:
        condition: service_healthy
    networks:
      - ${EXTERNAL_NETWORK}
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://${POSTGRES_CONTAINER_NAME}:5432/${POSTGRES_DB}
      SONAR_JDBC_USERNAME: ${POSTGRES_USER}
      SONAR_JDBC_PASSWORD: ${POSTGRES_PASSWORD}
      SONAR_WEB_JAVAOPTS: ${SONARQUBE_WEB_JAVA_OPTS}
    volumes:
      # 将SonarQube的数据、扩展插件和日志目录挂载到主机自定义路径
      - ${HOST_BASE_PATH}/sonarqube/data:/opt/sonarqube/data
      - ${HOST_BASE_PATH}/sonarqube/extensions:/opt/sonarqube/extensions
      - ${HOST_BASE_PATH}/sonarqube/logs:/opt/sonarqube/logs
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "${SONARQUBE_HOST_PORT}:9000"

networks:
  gitsystem_ci-network:
    external: true

接下来回到docker.desktop,输入以下指令,看一下你的gitea和jenkins所在的网络是哪个,像图中就是 gitsystem_ci-network。
这个网络一定要自己查一下,因为他会根据你之前的docker-compose.yml所在文件夹的名字而不一样的。

docker network ls

在这里插入图片描述
搜索完之后,把上面networks中的名字改成你的结果,文章中为gitsystem_ci-network。

1.2 .env

在docker-compose.yml的所在文件夹下,新建一个文件.env,然后用txt的方式打开,将以下内容复制进去。

# .env 环境配置文件
# 核心路径配置:请修改 HOST_BASE_PATH 为您自定义硬盘上的真实路径
HOST_BASE_PATH=D:\docker\SonarQube

# SonarQube 服务配置
SONARQUBE_CONTAINER_NAME=sonarqube
SONARQUBE_IMAGE_TAG=sonarqube:lts-community
SONARQUBE_HOST_PORT=9000
SONARQUBE_WEB_JAVA_OPTS=-Xmx512m -Xms128m

# PostgreSQL 数据库配置
POSTGRES_CONTAINER_NAME=sonarqube-db
POSTGRES_IMAGE_TAG=postgres:15
POSTGRES_DB=sonarqube
POSTGRES_USER=sonar
POSTGRES_PASSWORD=your password here

# 网络配置
EXTERNAL_NETWORK=gitsystem_ci-network

绝大部分配置你都不需要关心,重点看这几个:

  • HOST_BASE_PATH:你用来保存Sonarqube相关数据的文件夹,改成你的。
  • POSTGRES_PASSWORD:改成你的数据库密码,后续会用到。
  • EXTERNAL_NETWORK:改成上文你获取的gitea所在的网络,文中为gitsystem_ci-network

1.3 部署容器

最后在docker.desktop输入终端指令进入该文件夹,然后部署容器

cd D:\docker\SonarQube
docker compose up -d

终端显示以下内容就算部署成功了。

PS D:\docker\config\SonarQube> docker compose up -d
[+] Running 2/2
 ✔ Container sonarqube-db  Healthy                                                                                          11.4s 
 ✔ Container sonarqube     Started

2. Sonarqube基础配置

2.1 账号

第一次进入sonarqube,他会要你输入账号密码,第一次进入时账号密码都是admin。
在这里插入图片描述
进入之后他会要你修改密码,修改一下即可进入。

2.2 中文插件

接下来为了方便我们后续的配置,先把必要的中文插件装上吧,在管理员账号的主界面点击上方的administration,然后点击Marketplace。
在这里插入图片描述
先点击页面上的 I understand the risk,然后搜索Chinese,把chinese pack安装后重启即可。
在这里插入图片描述

3. Jenkins部署sonarqube扫描功能

我们想在jenkins配置sonarqube的话,需要以下几个东西,先列出来然后一个个说怎么配置。

  1. sonarqube安全令牌:这个东西用于授权给jenkins让他有资格访问sonarqube。
  2. jenkins的sonarqube插件:这个就不多说了,插件必须要。
  3. jenkins的sonarqube scanner:插件带来的具体的扫描器。
  4. jenkins配置文件,我们这里先写在项目中方便使用。

3.1 sonarqube安全令牌

首先把安全令牌的事解决,还是在sonarqube的管理员首页。
点击右上角的角色头像->我的账号->安全->生成一个令牌,名称随便填,类型全局分析令牌就行。然后把这个安全令牌复制下来先找个地方放即可。
在这里插入图片描述

3.2 jenkins配置

这里我们默认jenkins已经安装了中文插件,没有安装的可以先去装一下,下文描述的按钮均以中文为准。

3.2.1 插件配置

登录jenkins的管理员账号,进入系统管理界面->插件管理,把SonarQube Scanner for Jenkins下载下来,下完之后记得重启。在这里插入图片描述

3.2.2 系统环境

重启之后继续登录管理员账号,系统管理->系统配置,往下拖,会有个SonarQube Server。

  • Name随便填
  • Server URL固定填:http://sonarqube:9000
  • Server authentication Token右侧有个添加按钮,选好凭据提供者之后,类型选择Secret text,
    • secret字段中填入我们的sonar安全令牌,
    • ID空着不填
    • 描述随便写写,就是这个key对应的名称了,写个自己能记得住的。
      在这里插入图片描述

3.2.3 Sonarqube scanner

回到系统管理页面->全局工具配置,找到SonarQube Scanner这一行,新增一个安装,名称可以随便填(文中为default-sonar-scanner),不过后续要用上,版本直接选个最新的就行,然后把自动安装勾选上保存应用。
在这里插入图片描述

3.2.4 Jenkinsfile配置

最后回到Android项目根目录,新建一个文件Jenkinsfile,先把以下内容复制进去,然后我会告诉你哪些参数是需要替换的。

pipeline {
    agent any // 使用任何可用的Jenkins节点

    stages {
        stage('Checkout Code') {
            steps {
                echo '开始拉取代码...'
                // 替换为您的Gitea仓库地址和凭据ID
                git branch: 'sonarqubebranch',
                     credentialsId: '8c50609a-4cbc-454e-96fe-0ee6134d9f11',
                     url: 'http://192.168.31.39:3000/wodongx123/AqDemo.git'
            }
        }
        stage('Checkout') {
            steps {
                checkout scm
            }
        }
        stage('SonarQube Analysis') {
            environment {
                // 'default-sonar-scanner' 需要与你在全局工具配置中设置的 Scanner 名称一致
                scanner = tool 'default-sonar-scanner'
            }
            steps {
                withSonarQubeEnv('my-sonarqube') {
                    sh """
                        ${scanner}/bin/sonar-scanner \
                        -Dsonar.projectKey=testProject \
                        -Dsonar.projectName=测试项目 \
                        -Dsonar.sources=.
                    """
                }
            }
        }
    }
}
  • Check out Code:
    • git branch:这个不用多说了,你需要分析哪个分支的代码就写哪个分支。
    • credentialsId:这是jenkins的凭据,没有的话见上篇文章的第五节,生成的id填入这里。
    • url:你的git仓库地址。
  • SonarQube Analysis:
    • scanner:我们在3.2.3节中设置的sonarqube scanner的名称填入这里。
    • withSonarQubeEnv:我们在3.2.2节中设置的环境变量的Name。
    • projectKey:这个是你到时候扫描结束之后sonarqube中的项目id,可以随便取,但是不要和已经有的项目重复了。
    • projectName:key对应的名称,随便取。

文件写完之后,代码提交到git仓库上。

3.2.5 jenkins流水线配置

回到jenkins,新建一个任务,名称随便取,类型选流水线。

页面下拉找到定义这里,选择Piprline Script from SCM

  • SCM选择git
  • Repository URL把你的git仓库地址填进来(.git结尾的那个)
  • Credentials:这个时候你也应该有了,直接选择,没有的话见上篇文章的第五节
  • 分支改成想要进行sonarqube分析的分支。

保存后运行,不出意外的话应该是成功了。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐