# JS, TS, Go, Python, PHP, etc. project with Azure Pipelines

The setup is different depending on whether you use YAML or the Azure Classic interface.

{% hint style="info" %}

* The use of the Classic editor is not always possible (e.g. if your code is stored on GitHub).
* If you use YAML, SonarSource can provide you with YAML templates or code examples.
  {% endhint %}

## Before you start

Before you begin, read [integration-overview](https://docs.sonarsource.com/sonarqube-server/analyzing-source-code/ci-integration/azure-pipelines/integration-overview "mention").

The prerequisites are:

* The Azure DevOps Extension is installed in your Azure DevOps organization: see [sonarqube-extension-for-azure-devops](https://docs.sonarsource.com/sonarqube-server/analyzing-source-code/scanners/sonarqube-extension-for-azure-devops "mention").
* Your project is created in SonarQube Server (see [import-repos](https://docs.sonarsource.com/sonarqube-server/project-administration/creating-project/azure-devops/import-repos "mention")) and configured for Azure Pipelines (see [setting-up-project-integration](https://docs.sonarsource.com/sonarqube-server/project-administration/creating-project/azure-devops/setting-up-project-integration "mention")).
* The pull request and branch analysis are enabled in your pipeline.

If you need to use a specific scanner version, see [various-features](https://docs.sonarsource.com/sonarqube-server/analyzing-source-code/ci-integration/azure-pipelines/various-features "mention").

## Using YAML <a href="#yaml-pipeline" id="yaml-pipeline"></a>

Add the following SonarQube tasks to your YAML pipeline:

1. Before your build task, add a Prepare Analysis Configuration task.
2. After your build task, add a Run Code Analysis task.
3. After the Run Code Analysis task, add a Publish Quality Gate Result task.

See the YAML file example below. See also our [YAML pipeline templates](https://github.com/SonarSource/sonar-scanner-azdo/tree/master/its/fixtures). For information about the SonarQube task inputs, see [sonarqube-tasks](https://docs.sonarsource.com/sonarqube-server/analyzing-source-code/ci-integration/azure-pipelines/sonarqube-tasks "mention").

{% hint style="info" %}
Make sure the SonarQube task version used in your YAML file is the correct one.\
For example, in `SonarQubePrepare@7`, `7` should correspond to the version of the [sonarqube-extension-for-azure-devops](https://docs.sonarsource.com/sonarqube-server/analyzing-source-code/scanners/sonarqube-extension-for-azure-devops "mention") you’re using.
{% endhint %}

<details>

<summary>YAML file example</summary>

```yaml
trigger:
- main # or another name representing your main branch
- feature/*

steps:
 # Checkout the repository
 - checkout: self
 
 # Disable shallow fetch
   fetchDepth: 0

# Prepare Analysis Configuration task
- task: SonarQubePrepare@8
  inputs:
    SonarQube: '<YourSonarqubeServerEndpoint>'
    scannerMode: 'cli'
    configMode: 'manual'
    cliProjectKey: '<YourProjectKey>'

# Add your build task(s) here

# Run Code Analysis task
- task: SonarQubeAnalyze@8
  inputs:
    jdkversion: 'JAVA_HOME_17_X64'

# Publish Quality Gate Result task
- task: SonarQubePublish@8
  inputs:
    pollingTimeoutSec: '300'
```

</details>

## Using the Classic editor <a href="#classic-pipeline" id="classic-pipeline"></a>

In the procedure below, the manual configuration mode is used to define analysis parameters at the pipeline level. You may use the `sonar-project.properties` file instead (or another specified configuration file). For more information, see the [various-features](https://docs.sonarsource.com/sonarqube-server/analyzing-source-code/ci-integration/azure-pipelines/various-features "mention") page.

Proceed as follows:

1. In the Azure DevOps’ Classic editor, create or edit your build pipeline.
2. Add a **Prepare Analysis Configuration** task before your build task:
   * In **SonarQube Server Service Endpoint**, select the SonarQube service connection you created during setup. See the [setting-up-project-integration](https://docs.sonarsource.com/sonarqube-server/project-administration/creating-project/azure-devops/setting-up-project-integration "mention") page for more information about adding a connection.
   * Under **Choose a way to run the analysis**, select **Use Standalone SonarScanner CLI**.
   * Select the **Manually provide configuration** mode.
   * In the **Project key** field, enter your project key.
3. Add a new **Run Code Analysis** task after your build task.
4. Add a new **Publish quality gate Result** on your build pipeline summary.
5. Ensure that the pipeline runs automatically for all the branches you want:
   * Under the **Triggers** tab of your pipeline, select **Enable continuous integration** and select all the branches for which you want SonarQube Server analysis to run automatically.
6. Save your pipeline.

## Related pages <a href="#related-pages" id="related-pages"></a>

* [gradle-or-maven-project](https://docs.sonarsource.com/sonarqube-server/analyzing-source-code/ci-integration/azure-pipelines/gradle-or-maven-project "mention")
* [dotnet-project](https://docs.sonarsource.com/sonarqube-server/analyzing-source-code/ci-integration/azure-pipelines/dotnet-project "mention")
* [c-family-project](https://docs.sonarsource.com/sonarqube-server/analyzing-source-code/ci-integration/azure-pipelines/c-family-project "mention")
* [various-features](https://docs.sonarsource.com/sonarqube-server/analyzing-source-code/ci-integration/azure-pipelines/various-features "mention")
* [sonarqube-tasks](https://docs.sonarsource.com/sonarqube-server/analyzing-source-code/ci-integration/azure-pipelines/sonarqube-tasks "mention")
