目的

jenkins仅需创建一个job,git推送后自动进行sonar代码检测并上传到sonarqube

jenkins插件

  • Generic Webhook Trigger
  • SonarQube Scanner

准备工作

  1. sonar生成令牌

    • 登录后右上角点击"头像 > 我的账号 > 安全"
    • 生成令牌并复制保存

  2. 将令牌添加到jenkins凭证中 “系统管理 > 管理凭证 > 添加凭证”

    • 类型选择Secret text
    • 令牌粘贴到Secret框中,ID及描述可自行设置成想要的

  3. jenkins添加SonarQube Server “系统管理 > 系统配置 > SonarQube servers”

    • 定义name及sonarqube地址,选中刚创建的凭证,点击保存(这里name我命名‘SonarQube’)

  4. jenkins添加Sonar Scanner “系统管理 > 全局工具配置 > SonarQube Scanner”

    • 定义name,勾选自动安装,版本选最新即可,点击保存

创建jenkins job

  1. 新建job,选择流水线
  2. “构建触发器”选中"Generic Webhook Trigger"

    • 复制http://JENKINS_URL/generic-we...备用,作为触发地址(JENKINS_URL需替换成自己的jenkins地址)
    • Post content parameters提取需要用的参数
    • github如下
    project_name$.repository.nameJSONPath
    ssh_url$.repository.ssh_urlJSONPath
    ref$.refJSONPath
    • gitlab如下
    project_name$.project.nameJSONPath
    ssh_url$.project.git_ssh_urlJSONPath
    ref$.refJSONPath
    • 定义Token,不同token可触发不同job(若token相同则触发多个job)
  3. 定义流水线

    pipeline {
        agent any
    
        stages {
            stage('Check Out!') {
                steps {
                    script {
                        //解析分支
                        arr = "${env.ref}".split("refs/heads/") as List
                        currentBranch = arr[1]
                    }
                    git branch: currentBranch, credentialsId: '343aa12a-92a3-4797-a9ea-a8facb4db380', url: '${ssh_url}' //credentialsId为ssh私钥,用于拉git代码
                }
            }
    
            stage('Sonar Scan!') {
                steps {
                    script {
                        sonarqubeScannerHome = tool name: 'SonarQube Scanner'    //准备工作第4步的name
                        withSonarQubeEnv('SonarQube') {    //准备工作第3步的name,只有一个时可省略
                             sh """
                                 ${sonarqubeScannerHome}/bin/sonar-scanner \
                                    -Dsonar.projectKey=${project_name} \
                                    -Dsonar.projectName=${project_name} \
                                    -Dsonar.sources=./
                             """
                        }
                    }
                }
            }
    
        }
    }

定义webhook(github为例)

  1. 打开项目"Settings > Webhooks"
  2. 写入url及创建job第二步的token(注意token在url后)

验证

  • 触发push事件后,可看到jenkins开始构建,完成后sonarqube平台也可看到相关报告
03-05 14:41