Integração entre Azure DevOps & Sonarcloud

Michelle Mesquita
4 min readJun 14, 2023

--

Olá pessoal 😊

Hoje, resolvi trazer mais uma integração para vocês. Já tivemos integração entre o Jenkins, Gitlab, Github e agora: Azure DevOps! Iremos usá-lo por ser uma ferramenta de nuvem muito utilizada conforme o próprio Gatner refere.

Assim, faremos nosso laboratório nele, integrando ao Sonarcloud que também é uma ferramenta muito utilizada, seja para testes de segurança SAST e principalmente, para qualidade de software.

⚠️ Vale lembrar que para utilizar essa pipeline, se for nos recursos gratuitos, tem que preencher um formulário da Microsoft, conforme mensagem abaixo:

Vamos ao nosso lab! 🚀

Crie sua conta em https://dev.azure.com/

Após isso, adicione crie um projeto e adicione ou crie um repositório. No meu caso, fiz um clone do Github.

Após isso, fiz a configuração da minha pipeline, conforme esse arquivo azure-pipelines.yml

# Python package

trigger:
- master

pool:
vmImage: ubuntu-latest
strategy:
matrix:
Python37:
python.version: '3.7'

steps:

- task: UsePythonVersion@0
inputs:
versionSpec: '$(python.version)'
displayName: 'Use Python $(python.version)'

- script: |
python -m pip install --upgrade pip
pip install -r requirements.txt
displayName: 'Install dependencies'


- script: |
pip install bandit
bandit -r app.py
bandit -r app.py -f json -o bandit-output.json

displayName: 'SAST'
continueOnError: true


- task: CopyFiles@2
displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)'
inputs:
SourceFolder: .
TargetFolder: '$(Build.ArtifactStagingDirectory)'


- task: PublishPipelineArtifact@1
inputs:
targetPath: bandit-output.json
artifactName: Test


- task: SonarCloudPrepare@1
inputs:
SonarCloud: 'michelleamesquita'
organization: 'michelleamesquita-1'
scannerMode: 'CLI'
configMode: 'manual'
cliProjectKey: 'michelleamesquita_python-simple-web-app2'
cliProjectName: 'python-simple-web-app'
cliSources: '.'

# Run Code Analysis task
- task: SonarCloudAnalyze@1

# Publish Quality Gate Result task
- task: SonarCloudPublish@1
inputs:
pollingTimeoutSec: '300'

Assim, criei um json que retorna o teste do bandit para que fosse possível analisar o artefato. Para salvar esse artefato, foi necessário copiar para uma pasta específica e publicá-lo, conforme task PublishPipelineArtifact@1

Já no Sonarcloud, tivemos alguns passos. Esses passos podem ser vistos na documentação https://www.azuredevopslabs.com/labs/vstsextend/sonarcloud/

No entanto, vale ressaltar algumas dicas:

1 -Realize a autenticação com a Azure DevOps pois será mais simples a implementação

2- Após criar a conta no Sonar, será necessário buscar o projeto. Esse projeto necessita estar público para o Sonar encontrar. No entanto, para utilizar a pipeline no modo gratuito e não mostrar o erro de console que vimos anteriormente, o projeto precisa estar no modo privado. Então, teremos que colocar o projeto como público para adicionar ao Sonar e depois, ele voltará para privado para utilizar a pipeline.

Depois, adicionaremos o sonarcloud no projeto da Azure.

Iremos criar um token para criar a comunicação entre a Azure e o Sonar

Após isso, teremos um token do projeto específico que será utilizado no Sonar. Essas informações serão usadas na pipeline.

Assim, temos nosso projeto no Sonar integrado a Azure:

Aqui podemos ver o resultado da vulnerabilidade:

Output da pipeline

Espero que tenham gostado 😊

--

--