Quebrando pipelines Jenkins no Windows
Tags: veracode, beginners, tutorial, security
Published: 2023-03-22 02:00:43

A ideia desse artigo é explicar como fazer um pipeline Jenkins, rodando num ambiente Windows, quebrar conforme o resultado da analise do Pipeline Scan caso por padrão isso não esteja acontecendo. 

Considerando que vamos usar a opção Freestyle do Jenkins para chamar um CMD, vamos deixar configurado em uma pasta as ferramentas necessárias (para o Pipeline Scan precisamos do JAR dele) e criar um script Powershell para fazer a analise e gerar o código de erro. 

Para configurar a pasta, vamos fazer a configuração tendo como alvo a pasta "**C:/Veracode**". No Terminal do Windows, pode utilizar os comandos:
```
# Configuração
$pastaferramenta  = "C:/Veracode/" # Define uma pasta onde vamos colocar a ferramenta

# Download e configuração: Pipeline Scan
$urlDownload = "https://downloads.veracode.com/securityscan/pipeline-scan-LATEST.zip" # Define a url de download
$caminhoDownload = "$env:LOCALAPPDATA/VeracodePipeline.zip" # Define um caminho para o arquivo de download
Invoke-WebRequest -Uri "$urlDownload" -OutFile "$caminhoDownload" # Faz o download
Expand-Archive -Path "$caminhoDownload" -DestinationPath "$pastaferramenta" # Descompacta o ZIP para uma pasta
Remove-Item "$caminhoDownload" # Remove o arquivo de download
```
Assim que completar, adicione essa pasta ao PATH do sistema (ou apenas entre nela durante a execução do pipeline).

Agora vamos fazer a criação de um script para fazer nossa analise. 
Basicamente nele: 
- Vamos passar como parâmetro o caminho do arquivo que vamos analisar
- Fazemos a analise com o Pipeline Scan
- Pegamos o total dos resultados do arquivo JSON
- Passamos esse total como código de erro

Para o caso onde vamos quebrar com as opções padrões (qualquer nivel de falha):
```
param (
        [parameter(position=0,Mandatory=$True)]
        $caminhoArquivo
)

# Faz o Scan
java -jar "pipeline-scan.jar" -f $caminhoarquivo --issue_details true
# Pega o total de falhas encontradas
$retornoPS = Get-Content .\results.json | ConvertFrom-Json
$resultados = $retornoPS.findings
$totalResultados = $resultados.count
# Causa o erro com base nesse numero
exit $totalResultados
```
Caso queira fazer uma personalização no nível de falhas, vamos fazer uma pequena alteração:
```
param (
        [parameter(position=0,Mandatory=$True)]
        $caminhoArquivo
)

# Configuracoes
$filtroSeveridade = "Very High, High"

# Faz o Scan
java -jar "pipeline-scan.jar" -f $caminhoarquivo --issue_details true --fail_on_severity= "$filtroSeveridade"
# Pega o total de falhas encontradas
$retornoPS = Get-Content .\filtered_results.json | ConvertFrom-Json
$resultados = $retornoPS.findings
$totalResultados = $resultados.count
# Causa o erro com base nesse numero
exit $totalResultados
```

Salvamos ele com um nome qualquer, como PipescanM3.ps1 e na opção **Executar no comando do Windows**, utilizamos a sintaxe:
```
powershell "<caminho script>/PipescanM3.ps1" "<caminho pacote analise>"
```

Com isso, caso seja encontrado alguma falha na analise, o fluxo vai ser interrompido com o código de erro.

Para saber mais sobre a Veracode e solicitar um ambiente de testes, entre em [contato](https://www.m3corp.com.br/contato/).