目的
jenkins仅需创建一个job,git推送后自动进行sonar代码检测并上传到sonarqube
jenkins插件
- Generic Webhook Trigger
- SonarQube Scanner
准备工作
sonar生成令牌
- 登录后右上角点击"头像 > 我的账号 > 安全"
生成令牌并复制保存
将令牌添加到jenkins凭证中 “系统管理 > 管理凭证 > 添加凭证”
- 类型选择Secret text
令牌粘贴到Secret框中,ID及描述可自行设置成想要的
jenkins添加SonarQube Server “系统管理 > 系统配置 > SonarQube servers”
定义name及sonarqube地址,选中刚创建的凭证,点击保存(这里name我命名‘SonarQube’)
jenkins添加Sonar Scanner “系统管理 > 全局工具配置 > SonarQube Scanner”
定义name,勾选自动安装,版本选最新即可,点击保存
创建jenkins job
- 新建job,选择流水线
“构建触发器”选中"Generic Webhook Trigger"
- 复制http://JENKINS_URL/generic-we...备用,作为触发地址(JENKINS_URL需替换成自己的jenkins地址)
- Post content parameters提取需要用的参数
- github如下
project_name $.repository.name JSONPath ssh_url $.repository.ssh_url JSONPath ref $.ref JSONPath - gitlab如下
project_name $.project.name JSONPath ssh_url $.project.git_ssh_url JSONPath ref $.ref JSONPath - 定义Token,不同token可触发不同job(若token相同则触发多个job)
定义流水线
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为例)
- 打开项目"Settings > Webhooks"
写入url及创建job第二步的token(注意token在url后)
验证
- 触发push事件后,可看到jenkins开始构建,完成后sonarqube平台也可看到相关报告