{"id":237928,"date":"2022-04-07T12:26:11","date_gmt":"2022-04-07T11:26:11","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=qodana&#038;p=237928"},"modified":"2025-10-27T12:56:49","modified_gmt":"2025-10-27T11:56:49","slug":"qodana-for-azure-devops-pipelines","status":"publish","type":"qodana","link":"https:\/\/blog.jetbrains.com\/en\/qodana\/2022\/04\/qodana-for-azure-devops-pipelines","title":{"rendered":"Introducing Qodana for Azure DevOps Pipelines"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><strong>Update<\/strong>: <\/h2>\n\n\n\n<p>Since this post was published, we&#8217;ve made a number of improvements to Azure integration. Please learn more about <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/qodana-azure-pipelines.html\" target=\"_blank\" rel=\"noopener\">the Azure pipelines extension<\/a> here or view this <a href=\"https:\/\/blog.jetbrains.com\/qodana\/2025\/05\/qodana-2025-1-release\/\">release post<\/a> for more information on what&#8217;s new. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"2560\" height=\"1440\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/10\/image-26.png\" alt=\"Azure Qodana\" class=\"wp-image-653091\"\/><\/figure>\n\n\n\n<p>With Qodana, you can detect, analyze, and resolve code issues right in the CI\/CD system you rely on. Since Qodana was released, we\u2019ve supported <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/github-actions.html\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub Actions<\/a>, <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/qodana-github-application.html\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub App<\/a>, <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/gitlab.html\" target=\"_blank\" rel=\"noreferrer noopener\">GitLab CI\/CD<\/a>, <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/qodana-teamcity-plugin.html\" target=\"_blank\" rel=\"noreferrer noopener\">TeamCity<\/a>, and <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/jenkins.html\" target=\"_blank\" rel=\"noreferrer noopener\">Jenkins<\/a>. We continue to expand our integrated environments to make sure we bring code quality into your favorite CI\/CD. This time around, we\u2019re introducing a new extension for <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=JetBrains.qodana\" target=\"_blank\" rel=\"noreferrer noopener\">Azure Pipelines<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"2560\" height=\"1200\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/06\/featured_image.png\" alt=\"Qodanaa for Azure DevOps pipelines \" class=\"wp-image-253634\"\/><\/figure>\n\n\n\n<p align=\"center\"><a class=\"jb-download-button\" title=\"Try for free\" href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=JetBrains.qodana\" target=\"_blank\" rel=\"noopener noreferrer\" data-mce-href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=JetBrains.qodana\" data-mce-selected=\"inline-boundary\" data-mce-><i class=\"download-icon\"><\/i>Try for free<\/a><\/p>\n\n\n\n<p>Qodana linters are now integrated into your Azure DevOps repositories to allow you to make code analysis a part of your build pipeline and ensure the maintainability and reliability of your projects. You can integrate Qodana with Azure Pipelines in just 2 steps:<\/p>\n\n\n\n<ul>\n<li><a href=\"#install-qodana\">Install Qodana for Azure Pipelines<\/a><\/li>\n\n\n\n<li><a href=\"#configure-qodana\">Configure Qodana to analyze your code<\/a><\/li>\n<\/ul>\n\n\n\n<p>Now let\u2019s dive into the details.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"install-qodana\">Install Qodana for Azure Pipelines<\/h2>\n\n\n\n<p>From Visual Studio Marketplace, install the <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=JetBrains.qodana\" target=\"_blank\" rel=\"noreferrer noopener\">Qodana for Azure Pipelines<\/a> extension by clicking the <em>Get it free<\/em> button, and <em>Proceed to organization<\/em> once the installation has finished.<\/p>\n\n\n\n<p>If you do not have the required permissions to install an extension from the marketplace, a request will be sent to the account administrator to ask them to approve the installation.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"configure-qodana\">Configure Qodana to analyze your code<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Set up a pipeline that integrates with Qodana<\/h3>\n\n\n\n<p>Before analyzing your code, you will first need to set up a new build pipeline that integrates with Qodana. On the Azure DevOps panel, go to <em>Pipelines<\/em> and click <em>Create Pipeline<\/em>. If any pipelines have already been created, select <em>New pipeline<\/em>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" width=\"2146\" height=\"828\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/06\/screen1.png\" alt=\"\" class=\"wp-image-253645\" style=\"width:800px\"\/><\/figure>\n\n\n\n<p>You can configure the pipeline with either the YAML editor or the classic editor. When using the classic editor, you can take advantage of the predefined templates. The YAML editor requires you to use a YAML file. Let\u2019s choose the latter for this example.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" width=\"2146\" height=\"960\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/06\/screen2.png\" alt=\"\" class=\"wp-image-253656\" style=\"width:800px\"\/><\/figure>\n\n\n\n<p>The YAML editor will open with the template YAML file. In order to configure it correctly you will need to configure the <a href=\"https:\/\/github.com\/JetBrains\/Qodana\/blob\/2021.3\/topics\/qodana-azure-pipelines.md\" target=\"_blank\" rel=\"noreferrer noopener\"><em>Qodana Scan<\/em><\/a> task by editing your azure-pipelines.yml file:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Start with a minimal pipeline that you can customize to build and deploy your code.\n# Add steps that build, run tests, deploy, and more:\n# https:\/\/aka.ms\/yaml\n\ntrigger:\n  - main\n\npool:\n  vmImage: ubuntu-latest\n\nsteps:\n  - task: Cache@2  # Not required, but Qodana will open projects with cache faster.\n    inputs:\n      key: '\"$(Build.Repository.Name)\" | \"$(Build.SourceBranchName)\" | \"$(Build.SourceVersion)\"'\n      path: '$(Agent.TempDirectory)\/qodana\/cache'\n      restoreKeys: |\n        \"$(Build.Repository.Name)\" | \"$(Build.SourceBranchName)\"\n        \"$(Build.Repository.Name)\"\n  - task: QodanaScan@1<\/pre>\n\n\n\n<p>You can also find the <em>Qodana Scan<\/em> task in the list of tasks on the <em>Show assistant<\/em> panel.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" width=\"2146\" height=\"828\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/06\/screen3.png\" alt=\"\" class=\"wp-image-253667\" style=\"width:800px\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\u200b\u200bRun your pipeline<\/h3>\n\n\n\n<p>When you are done making the changes to the file, click <em>Save and Run<\/em>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" width=\"2146\" height=\"1216\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/06\/screen4-1.png\" alt=\"\" class=\"wp-image-253678\" style=\"width:800px\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">See the results<\/h3>\n\n\n\n<p>To display the Qodana report summary in Azure DevOps, install <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=sariftools.scans\" target=\"_blank\" rel=\"noreferrer noopener\">Microsoft DevLabs\u2019 SARIF SAST Scans Tab<\/a> extension. Once installation is done, go to the <em>Pipelines<\/em> tab, select the pipeline being run and analyzed, and look at the <em>Scans<\/em> tab for more information about the quality of your code.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" width=\"2146\" height=\"1182\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/06\/screen5.png\" alt=\"\" class=\"wp-image-253689\" style=\"width:800px\"\/><\/figure>\n\n\n\n<p>With the Qodana for Azure Pipelines extension, you will be able to easily integrate Qodana into your Azure DevOps pipeline and start seeing the analytics the first time your code is checked.<\/p>\n\n\n\n<p>If you have any questions or suggestions about <a href=\"https:\/\/www.jetbrains.com\/qodana\/features\/#ci-cd-integrations\" target=\"_blank\" rel=\"noopener\">Qodana<\/a>, post a comment here, tag us on <a href=\"https:\/\/twitter.com\/Qodana\" target=\"_blank\" rel=\"noreferrer noopener\">Twitter<\/a> or contact us at qodana-support@jetbrains.com.<\/p>\n\n\n\n<p><em>Your Qodana team<\/em><\/p>\n\n\n\n<p align=\"center\"><a class=\"jb-download-button\" title=\"Integrate Qodana with your CI\/CD\" href=\"https:\/\/www.jetbrains.com\/qodana\/features\/#ci-cd-integrations\" target=\"_blank\" rel=\"noopener noreferrer\" data-mce-href=\"https:\/\/www.jetbrains.com\/qodana\/features\/#ci-cd-integrations\" data-mce-selected=\"inline-boundary\" data-mce-><i class=\"download-icon\"><\/i>Integrate Qodana with your CI\/CD<\/a><\/p>\n","protected":false},"author":1211,"featured_media":238029,"comment_status":"closed","ping_status":"closed","template":"","categories":[8862,2347],"tags":[1700,4448,6967,4068],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/qodana\/237928"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/qodana"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/types\/qodana"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/users\/1211"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/comments?post=237928"}],"version-history":[{"count":9,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/qodana\/237928\/revisions"}],"predecessor-version":[{"id":653103,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/qodana\/237928\/revisions\/653103"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/media\/238029"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/media?parent=237928"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/categories?post=237928"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/tags?post=237928"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/cross-post-tag?post=237928"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}