目的

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-webhook-trigger/invoke备用,作为触发地址(JENKINS_URL需替换成自己的jenkins地址)
    • Post content parameters提取需要用的参数
    • github如下
    variable expression expressionType defaultValue regexpFilter
    project_name $.repository.name JSONPath
    ssh_url $.repository.ssh_url JSONPath
    ref $.ref JSONPath
    • gitlab如下
    variable expression expressionType defaultValue regexpFilter
    project_name $.project.name JSONPath
    ssh_url $.project.git_ssh_url JSONPath
    ref $.ref JSONPath
    • 定义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平台也可看到相关报告

最新文章

  1. php-into 安装时遇到的各种问题,php -m跟phpinfo()显示不一致
  2. android-23 View.java - dispatchTouchEvent源码
  3. css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
  4. 用vs2013编译lua源码方法(一)
  5. Android--Matrix图片变换处理
  6. gulp之css,js压缩合并加密替换
  7. cookie操作大全
  8. form表单target的用法,实现无刷新提交页面
  9. 用户体验 | 寻找成套的 App SDK 服务
  10. [mysql]ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value 解决方法
  11. 新的blog站地址
  12. 分布式文件系统 / MQ / 鉴权(轮廓)
  13. 浏览器关闭、刷新、关闭标签事件,兼容IE8,chrome,firefox
  14. 10、Dockerfile实战-PHP
  15. 修改linux的时间可以使用date指令
  16. struts2:多模块多配置文件开发
  17. 编写第一个微信小程序界面
  18. (转)学习linux的几本书
  19. 掉电脉冲映射串口log和dmesg到文件中的log
  20. 作业列表 of《软件测试技术》

热门文章

  1. linux(CentOS7) 之 克隆虚拟机并配置网络(固定ip)
  2. PowerShell【Do While、Do Until篇】
  3. SQL高级优化(二)之MySQL架构
  4. 5大最新云原生镜像构建工具全解析,3个来自Google,你了解几个?
  5. Texture+PBR两种工作流程
  6. leetcode 55. 跳跃游戏 及 45. 跳跃游戏 II
  7. Choregraphe 2.8.6.23动作失效
  8. 集合框架-工具类-Collections-逆序替换
  9. 集合框架-Map集合特点及常用方法
  10. kubernetes集群各模块功能描述