Ivo Dias
Posted on March 30, 2023
Utilizando o Wrapper, podemos fazer o download dos relatórios de falhas disponíveis na plataforma. A ideia desse artigo é demonstrar como escrever um script para entrar em todos os perfis e fazer o download de um PDF com o ultimo relatório detalhado.
Caso queira fazer isso para times específicos, utilize um usuário que tenha acesso aos times que quer fazer o backup.
Estou usando a combinação do Wrapper + Powershell rodando no Windows, mas pode facilmente se aproveitar da estrutura e converter para Shell (ou apenas instalar o Powershell for Linux).
Backup Geral
Nesse primeiro modelo, vamos fazer o backup de todos os projetos que o usuário tem acesso. No script, coloquei como parâmetro adicional a pasta onde quer salvar esse backup, mas deixando o Desktop como opção padrão.
Para utilizar ele corretamente, precisamos ter as ferramentas da Veracode configuradas no Windows.
Nosso script vai basicamente:
- Receber a lista de todos os projetos que o usuário tem acesso
- Converter todos os nomes em IDs
- Para cada um dos projetos, vai pegar o ultimo ID de Build (o ultimo scan realizado)
- Vai gerar um relatório detalhado e salvar na pasta escolhida
Traduzindo isso para código, temos:
param (
[parameter(position = 0)]
$pastaBackup = [Environment]::GetFolderPath("Desktop")
)
# Recebe a lista de todos os nomes e IDs
[xml]$listaPerfisApp = $(VeracodeAPI.exe -action GetAppList)
$nomesApps = $listaPerfisApp.applist.app.app_name
$idApps = $listaPerfisApp.applist.app.app_id
# Inicializa o índice
[int]$indice = 0
# Valida se existe algum nome com o prefixo
foreach ($nomeApp in $nomesApps) {
$appID = $idApps[$indice]
[xml]$buildINFO = $(VeracodeAPI.exe -action getbuildinfo -appid $appID)
$buildID = $buildINFO.buildinfo.build_id
# Faz o Backup
VeracodeAPI.exe -action detailedreport -buildid "$buildID" -format pdf -outputfilepath "$pastaBackup\$nomeApp-$buildID.pdf"
$indice = $indice + 1
}
Como fazer filtrando pelo nome?
Caso queira fazer para projetos específicos ou filtrar por algum conjunto de caracteres em comum nos projetos, podemos alterar ligeiramente e utilizar uma string de validação.
Nesse exemplo, recebo ela como o primeiro parâmetro, e uso para buscar em cada um dos projetos:
param (
[parameter(position=0,Mandatory=$True)]
$validadorNome,
[parameter(position=1)]
$pastaBackup = [Environment]::GetFolderPath("Desktop")
)
# Recebe a lista de todos os nomes e IDs
[xml]$listaPerfisApp = $(VeracodeAPI.exe -action GetAppList)
$nomesApps = $listaPerfisApp.applist.app.app_name
$idApps = $listaPerfisApp.applist.app.app_id
# Inicializa o índice
[int]$indice = 0
# Valida se existe algum nome com o prefixo
foreach ($nomeApp in $nomesApps) {
if ($nomeApp -like "*$validadorNome*") {
$appID = $idApps[$indice]
[xml]$buildINFO = $(VeracodeAPI.exe -action getbuildinfo -appid $appID)
$buildID = $buildINFO.buildinfo.build_id
# Faz o Backup
VeracodeAPI.exe -action detailedreport -buildid "$buildID" -format pdf -outputfilepath "$pastaBackup\$nomeApp-$buildID.pdf"
}
$indice = $indice + 1
}
Posted on March 30, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.