DEV Community

Cover image for Validação de PR no Azure DevOps
Ivo Dias for M3Corp

Posted on • Updated on

Validação de PR no Azure DevOps

Para construirmos um pipeline de validação no Azure, vamos precisar inicialmente ter em mãos as credenciais necessárias, pode saber como obtê-las aqui.

Pensando no fluxo que vamos adotar, começamos com o empacotamento dos arquivos necessários para a análise, conforme o guia de empacotamento. Isso varia de acordo com a linguagem do projeto que vamos analisar.
Ao iniciar o nosso fluxo, vamos criar um pacote zipando os arquivos necessários e atribuindo um nome qualquer, sendo que em nosso exemplo vamos utilizar o número de build:

- task: ArchiveFiles@2
    inputs:
      rootFolderOrFile: "$(Agent.BuildDirectory)"
      includeRootFolder: true
      archiveType: "zip"
      archiveFile: "$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip"
      replaceExistingArchive: true
    displayName: "Criando pacote para análise"
Enter fullscreen mode Exit fullscreen mode

Nosso próximo passo é adicionar o SCA em nossa análise.
Um ponto interessante dele, é que não é preciso aguardar o build completar para utilizá-lo, como vai ser preciso no Pipeline Scan, então caso o projeto seja feito com uma linguagem compilada, pode paralelizar essa etapa com a de build.

Para implementar o SCA, vamos precisar receber a variável com a credencial e rodar o agente na pasta onde tem o arquivo com as informações dos componentes de terceiros, isso é algo que varia conforme a linguagem e pode consultar os detalhes aqui.
Em YAML, podemos fazer dessa forma:

- bash: |
      cd $(Pasta_Projeto)
      export SRCCLR_API_TOKEN=$(SRCCLR_API_TOKEN)
      curl -sSL https://download.sourceclear.com/ci.sh | bash -s – scan --update-advisor --allow-dirty
    displayName: "Veracode SCA"
Enter fullscreen mode Exit fullscreen mode

Caso queira consultar todos os parâmetros disponíveis, consulte essa documentação.

Depois da configuração do SCA, precisamos configurar o Pipeline Scan. O processo é basicamente fazer o download de um zip com ele do site da Veracode e então descompactar:

- bash: |
      apt-get install unzip
      curl -O -L https://downloads.veracode.com/securityscan/pipeline-scan-LATEST.zip && unzip pipeline-scan-LATEST.zip -d $(Build.ArtifactStagingDirectory)
    displayName: "Download Veracode Pipeline Scanner"
Enter fullscreen mode Exit fullscreen mode

Após esse download, podemos utilizá-lo. Em nosso desenho, vamos utilizar como validador uma política que criamos dentro do Portal da Veracode, então antes do scan de fato, vamos fazer o download desse arquivo e política e passar ele como um parâmetro para a análise.
As credenciais que obtemos vão ser utilizadas dentro de duas variáveis, Veracode ID e Veracode Key.
Em YAML ficará assim:

- bash: |
      export VERACODE_ID=$(VERACODE_ID)
      export VERACODE_KEY=$(VERACODE_KEY)
      echo "Downloading policy from Veracode"
      java -jar $(Build.ArtifactStagingDirectory)/pipeline-scan.jar --veracode_api_id $(VERACODE_ID) --veracode_api_key $(VERACODE_KEY) --request_policy="Veracode Recommended Very High + SCA"
      echo "Running Veracode Scan"
      java -jar $(Build.ArtifactStagingDirectory)/pipeline-scan.jar --veracode_api_id $(VERACODE_ID) --veracode_api_key $(VERACODE_KEY) --file "$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip" --issue_details true --policy_file="Veracode_Recommended_Very_High_+_SCA.json"
      echo "Save Veracode results"
      mkdir results_veracode
      mv results.json results_veracode/results.json
      mv filtered_results.json results_veracode/filtered_results.json
    displayName: "Run Veracode Pipeline Scan"
Enter fullscreen mode Exit fullscreen mode

Por fim, vamos publicar os resultados obtidos criando um artefato com eles. Assim ao final de cada execução vamos ter um relatório sendo gerado:

- task: PublishPipelineArtifact@1
    displayName: "Publicando Resultados Veracode"
    inputs:
      targetPath: '$(Build.SourcesDirectory)/results_veracode'
      artifact: 'Veracode Analysis'
      publishLocation: 'pipeline'
Enter fullscreen mode Exit fullscreen mode

Top comments (0)