Integração entre Azure DevOps & Sonarcloud
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 😊