{"id":31390,"date":"2022-11-12T18:05:39","date_gmt":"2022-11-12T18:05:39","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=31390"},"modified":"2022-12-23T05:45:32","modified_gmt":"2022-12-23T05:45:32","slug":"how-to-execute-sonarqube-scanner-using-jenkins-pipeline","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/how-to-execute-sonarqube-scanner-using-jenkins-pipeline\/","title":{"rendered":"How to execute sonarqube scanner using jenkins pipeline?"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">SonarScanner: Command line<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">node {\n  stage(<span class=\"hljs-string\">'SCM'<\/span>) {\n    git <span class=\"hljs-string\">'https:\/\/github.com\/foo\/bar.git'<\/span>\n  }\n  stage(<span class=\"hljs-string\">'SonarQube analysis'<\/span>) {\n    def scannerHome = tool <span class=\"hljs-string\">'SonarScanner 4.0'<\/span>;\n    withSonarQubeEnv(<span class=\"hljs-string\">'My SonarQube Server'<\/span>) { <span class=\"hljs-comment\">\/\/ If you have configured more than one global server connection, you can specify its name<\/span>\n      sh <span class=\"hljs-string\">\"${scannerHome}\/bin\/sonar-scanner\"<\/span>\n    }\n  }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">SonarScanner for Gradle:<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">node {\n  stage(<span class=\"hljs-string\">'SCM'<\/span>) {\n    git <span class=\"hljs-string\">'https:\/\/github.com\/foo\/bar.git'<\/span>\n  }\n  stage(<span class=\"hljs-string\">'SonarQube analysis'<\/span>) {\n    withSonarQubeEnv() { <span class=\"hljs-comment\">\/\/ Will pick the global server connection you have configured<\/span>\n      sh <span class=\"hljs-string\">'.\/gradlew sonarqube'<\/span>\n    }\n  }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">SonarScanner for Maven:<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">node {\n  stage(<span class=\"hljs-string\">'SCM'<\/span>) {\n    git <span class=\"hljs-string\">'https:\/\/github.com\/foo\/bar.git'<\/span>\n  }\n  stage(<span class=\"hljs-string\">'SonarQube analysis'<\/span>) {\n    withSonarQubeEnv(credentialsId: <span class=\"hljs-string\">'f225455e-ea59-40fa-8af7-08176e86507a'<\/span>, installationName: <span class=\"hljs-string\">'My SonarQube Server'<\/span>) { <span class=\"hljs-comment\">\/\/ You can override the credential to be used<\/span>\n      sh <span class=\"hljs-string\">'mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.7.0.1746:sonar'<\/span>\n    }\n  }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">SonarScanner for .NET:<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">node {\n  stage(<span class=\"hljs-string\">'SCM'<\/span>) {\n    git <span class=\"hljs-string\">'https:\/\/github.com\/foo\/bar.git'<\/span>\n  }\n  stage(<span class=\"hljs-string\">'Build + SonarQube analysis'<\/span>) {\n    def sqScannerMsBuildHome = tool <span class=\"hljs-string\">'Scanner for MSBuild 4.6'<\/span>\n    withSonarQubeEnv(<span class=\"hljs-string\">'My SonarQube Server'<\/span>) {\n      bat <span class=\"hljs-string\">\"${sqScannerMsBuildHome}\\\\SonarQube.Scanner.MSBuild.exe begin \/k:myKey\"<\/span>\n      bat <span class=\"hljs-string\">'MSBuild.exe \/t:Rebuild'<\/span>\n      bat <span class=\"hljs-string\">\"${sqScannerMsBuildHome}\\\\SonarQube.Scanner.MSBuild.exe end\"<\/span>\n    }\n  }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">pipeline {\r\n  agent any\r\n  stages {\r\n    stage(<span class=\"hljs-string\">'SonarQube analysis'<\/span>) {\r\n      steps {\r\n        script {\r\n          <span class=\"hljs-comment\">\/\/ requires SonarQube Scanner 2.8+<\/span>\r\n          scannerHome = tool <span class=\"hljs-string\">'SonarQube Scanner 2.8'<\/span>\r\n        }\r\n        withSonarQubeEnv(<span class=\"hljs-string\">'SonarQube Scanner'<\/span>) {\r\n          sh <span class=\"hljs-string\">\"${scannerHome}\/bin\/sonar-scanner\"<\/span>\r\n        }\r\n      }\r\n    }\r\n  }\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The tool name &#8220;SonarQube Scanner 2.8&#8221; needs to match the &#8220;Name&#8221; field of a SonarQube Scanner Installation on the Global Tools Configuration page. The name used in the withSonarQubeEnv step needs to match the &#8220;Name&#8221; field of a SonarQube server defined on the Configure System page.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">You<span class=\"hljs-string\">'re mixing Scripted Pipeline with Declarative Pipeline syntax.\r\n\r\nWhile the snippet you posted from SonarQube documentation would work, you will need to adapt it since you'<\/span>re using Declarative (<span class=\"hljs-keyword\">as<\/span> indicated by the <span class=\"hljs-string\">\"Not a valid stage section definition\"<\/span> error).\r\n\r\nNormally, you<span class=\"hljs-string\">'d define a tools section in your Pipeline, but it looks like the SonarQube plugin doesn'<\/span>t support Declarative, nor does it add itself to the PATH.\r\n\r\nSince you can<span class=\"hljs-string\">'t normally define variables in Declarative Pipeline, the script step has to be used to call the tool step and store the path to the installed tool. For example:\r\n\r\npipeline {\r\n  agent any\r\n  stages {\r\n    stage('<\/span>SonarQube analysis<span class=\"hljs-string\">') {\r\n      steps {\r\n        script {\r\n          \/\/ requires SonarQube Scanner 2.8+\r\n          scannerHome = tool '<\/span>SonarQube Scanner <span class=\"hljs-number\">2.8<\/span><span class=\"hljs-string\">'\r\n        }\r\n        withSonarQubeEnv('<\/span>SonarQube Scanner<span class=\"hljs-string\">') {\r\n          sh \"${scannerHome}\/bin\/sonar-scanner\"\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\nThe tool name \"SonarQube Scanner 2.8\" needs to match the \"Name\" field of a SonarQube Installation on the Global Tools Configuration page. The name used in the withSonarQubeEnv step needs to match the \"Name\" field of a SonarQube server defined on the Configure System page.\r\n\r\nIf the SonarQube plugin did support Declarative, and added itself to PATH, the Pipeline could be a wee bit simpler:\r\n\r\npipeline {\r\n  agent any\r\n  stages {\r\n    stage('<\/span>SonarQube analysis<span class=\"hljs-string\">') {\r\n      tools {\r\n        sonarQube '<\/span>SonarQube Scanner <span class=\"hljs-number\">2.8<\/span><span class=\"hljs-string\">'\r\n      }\r\n      steps {\r\n        withSonarQubeEnv('<\/span>SonarQube Scanner<span class=\"hljs-string\">') {\r\n          sh '<\/span>sonar-scanner<span class=\"hljs-string\">'\r\n        }\r\n      }\r\n    }\r\n  }\r\n}<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Example using declarative pipeline:<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">      pipeline {\r\n        agent none\r\n        stages {\r\n          stage(<span class=\"hljs-string\">\"build &amp; SonarQube analysis\"<\/span>) {\r\n            agent any\r\n            steps {\r\n              withSonarQubeEnv(<span class=\"hljs-string\">'My SonarQube Server'<\/span>) {\r\n                sh <span class=\"hljs-string\">'mvn clean package sonar:sonar'<\/span>\r\n              }\r\n            }\r\n          }\r\n          stage(<span class=\"hljs-string\">\"Quality Gate\"<\/span>) {\r\n            steps {\r\n              timeout(time: <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-attr\">unit<\/span>: <span class=\"hljs-string\">'HOURS'<\/span>) {\r\n                waitForQualityGate abortPipeline: <span class=\"hljs-literal\">true<\/span>\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Example using scripted pipeline:<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">      stage(<span class=\"hljs-string\">\"build &amp; SonarQube analysis\"<\/span>) {\r\n          node {\r\n              withSonarQubeEnv(<span class=\"hljs-string\">'My SonarQube Server'<\/span>) {\r\n                 sh <span class=\"hljs-string\">'mvn clean package sonar:sonar'<\/span>\r\n              }\r\n          }\r\n      }\r\n\r\n      stage(<span class=\"hljs-string\">\"Quality Gate\"<\/span>){\r\n          timeout(time: <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-attr\">unit<\/span>: <span class=\"hljs-string\">'HOURS'<\/span>) {\r\n              def qg = waitForQualityGate()\r\n              <span class=\"hljs-keyword\">if<\/span> (qg.status != <span class=\"hljs-string\">'OK'<\/span>) {\r\n                  error <span class=\"hljs-string\">\"Pipeline aborted due to quality gate failure: ${qg.status}\"<\/span>\r\n              }\r\n          }\r\n      }<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Please use below code to run the sonar-scanner on windows<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">node {    \n       stage(<span class=\"hljs-string\">'SonarQube analysis'<\/span>) {\n       <span class=\"hljs-comment\">\/\/ requires SonarQube Scanner 2.8+<\/span>\n       def scannerHome = tool <span class=\"hljs-string\">'SONAR_RUNNER'<\/span>;\n       withSonarQubeEnv(<span class=\"hljs-string\">'SonarQube'<\/span>) {\n            bat <span class=\"hljs-string\">\"\\\"${scannerHome}\\\\bin\\\\sonar-scanner.bat\\\"\"<\/span>\n       }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">SonarQube integration with Jenkins Pipeline<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">node(label:<span class=\"hljs-string\">'master'<\/span>) {\r\n  <span class=\"hljs-keyword\">try<\/span>{  \r\n    stage(<span class=\"hljs-string\">'Static Analysis'<\/span>) {\r\n      withSonarQubeEnv(<span class=\"hljs-string\">'SonarQube1'<\/span>) \r\n      {\r\n        bat <span class=\"hljs-string\">'mvn clean package sonar:sonar\r\n   \techo '<\/span><span class=\"hljs-keyword\">Static<\/span> Analysis Completed<span class=\"hljs-string\">' \r\n      }\r\n   \r\n    stage(\"Quality Gate\"){\r\n      timeout(time: 1, unit: '<\/span>HOURS<span class=\"hljs-string\">') \r\n      {\r\n        waitForQualityGate abortPipeline: true\r\n        def qg= waitForQualityGate()\r\n        if (qg.status!= '<\/span>OK<span class=\"hljs-string\">'){\r\n          error \"Pipeline aborted due to quality gate failure: ${qg.status}\"\r\n        }\r\n      }         \r\n      echo '<\/span>Quality Gate Passed<span class=\"hljs-string\">' \r\n    }\r\n  } \r\n}<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">SonarQube Scans in Jenkins Declarative Pipeline using SonarScanner<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">stage(<span class=\"hljs-string\">'SonarCloud'<\/span>) {\n  environment {\n    SCANNER_HOME = tool <span class=\"hljs-string\">'SonarQubeScanner'<\/span>\n    ORGANIZATION = <span class=\"hljs-string\">\"igorstojanovski-github\"<\/span>\n    PROJECT_NAME = <span class=\"hljs-string\">\"igorstojanovski_jenkins-pipeline-as-code\"<\/span>\n  }\n  steps {\n    withSonarQubeEnv(<span class=\"hljs-string\">'SonarCloudOne'<\/span>) {\n        sh <span class=\"hljs-string\">''<\/span><span class=\"hljs-string\">'$SCANNER_HOME\/bin\/sonar-scanner -Dsonar.organization=$ORGANIZATION \\\n        -Dsonar.java.binaries=build\/classes\/java\/ \\\n        -Dsonar.projectKey=$PROJECT_NAME \\\n        -Dsonar.sources=.'<\/span><span class=\"hljs-string\">''<\/span>\n    }\n  }\n}\nstage(<span class=\"hljs-string\">\"Quality Gate\"<\/span>) {\r\n  steps {\r\n    timeout(time: <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-attr\">unit<\/span>: <span class=\"hljs-string\">'MINUTES'<\/span>) {\r\n        waitForQualityGate abortPipeline: <span class=\"hljs-literal\">true<\/span>\r\n    }\r\n  }\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">stage(<span class=\"hljs-string\">'SonarQube'<\/span>) {\r\n  environment {\r\n    SCANNER_HOME = tool <span class=\"hljs-string\">'sonar scanner jenkins'<\/span>\r\n    ORGANIZATION = <span class=\"hljs-string\">\"poc.net\"<\/span>\r\n    PROJECT_NAME = <span class=\"hljs-string\">\"org.sonarqube:poc.net\"<\/span>\r\n  }\r\n  steps {\r\n    withSonarQubeEnv(<span class=\"hljs-string\">'sonarqube'<\/span>) {\r\n        bat <span class=\"hljs-string\">\"${SCANNER_HOME}\/bin\/sonar-scanner -Dsonar.organization=${ORGANIZATION} \\\r\n        -Dsonar.java.binaries=compiled \\\r\n        -Dsonar.projectKey=${PROJECT_NAME} \\\r\n        -Dsonar.sources=POCStudentCrud\"<\/span>\r\n    }\r\n  }\r\n}\r\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">stage(<span class=\"hljs-string\">'SonarCloud'<\/span>) {\r\n  environment {\r\n    SCANNER_HOME = tool <span class=\"hljs-string\">'SonarQubeScanner'<\/span>\r\n    ORGANIZATION = <span class=\"hljs-string\">\"igorstojanovski-github\"<\/span>\r\n    PROJECT_NAME = <span class=\"hljs-string\">\"igorstojanovski_jenkins-pipeline-as-code\"<\/span>\r\n  }\r\n  steps {\r\n    withSonarQubeEnv(<span class=\"hljs-string\">'SonarCloudOne'<\/span>) {\r\n        sh <span class=\"hljs-string\">''<\/span><span class=\"hljs-string\">'$SCANNER_HOME\/bin\/sonar-scanner -Dsonar.organization=$ORGANIZATION \\\r\n        -Dsonar.java.binaries=build\/classes\/java\/ \\\r\n        -Dsonar.projectKey=$PROJECT_NAME \\\r\n        -Dsonar.sources=.'<\/span><span class=\"hljs-string\">''<\/span>\r\n    }\r\n  }\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","protected":false},"excerpt":{"rendered":"<p>SonarScanner: Command line SonarScanner for Gradle: SonarScanner for Maven: SonarScanner for .NET: The tool name &#8220;SonarQube Scanner 2.8&#8221; needs to match the &#8220;Name&#8221; field of a SonarQube Scanner Installation on&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-31390","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/31390","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=31390"}],"version-history":[{"count":2,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/31390\/revisions"}],"predecessor-version":[{"id":31766,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/31390\/revisions\/31766"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=31390"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=31390"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=31390"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}