#azure-devops #azure-devops-rest-api #azure-pipelines-yaml #veracode
Вопрос:
мы пытаемся построить конвейер Azure Devops (конвейер на основе yaml), в котором сборка запускается по запросу на извлечение, но мы хотим выполнить только шаг (сканирование безопасности с помощью расширения veracode) при инкрементных изменениях, т. Е. Допустим, у меня есть базовый код с версией «X», и я вношу в него несколько изменений (изменяю пару файлов, добавляю пару файлов и т. Д.), И теперь всякий раз, когда я выполняю запрос на извлечение, я хочу, чтобы запускалась сборка, но как часть сборки шаг проверки безопасности должен выполняться только при инкрементных изменениях, а не при всей базе кода телосложение. Я не уверен, как мы можем достичь этого в рамках конвейера YAML (шаг), где автоматически применяется некоторое значение фильтра (может быть, какой-то REST API для получения дополнительных изменений в этой сборке), поэтому шаг выполняется только для этих измененных файлов.
Я попробовал команду git diff HEAD со следующим сценарием только для вывода изменений из последней сборки, но это ничего мне не возвращает
steps:
- task: AzurePowerShell@5
displayName: 'Check changed files'
inputs:
azureSubscription: 'mysubscription'
scriptType: 'InlineScript'
Inline: |
$url = "https://dev.azure.com/xxxx/KKKK/_apis/build/latest/2083?apir-version=6.0-preview.1amp;branchName=myevbrnch"
$response = (Invoke-RestMethod -Uri $url -Method GET -Headers $AzureDevOpsAuthenicationHeader)
$files = (git diff HEAD $response.sourceVersion --name-only)
$temp=$files -split ' '
$count=$temp.Length
echo "Total changed $count files"
For ($i=0; $i -lt $temp.Length; $i )
{
$name=$temp[$i]
echo "this is $name file"
if ($name -like "SecOpsTest/*")
{
Write-Host "##vso[task.setvariable variable=MicroserviceAUpdated]True"
}
}
azurePowerShellVersion: 'latestVersion'
pwsh: true
Любая помощь в том, как мы можем достичь этого с помощью трубопровода YAML?
Спасибо
Ответ №1:
Я смог получить различия между последней сборкой и текущим изменением, мне пришлось включить пометку в сборке, и с включенной функцией я ввел следующий скрипт powershell для проверки изменений между сборкой (нашел этот код сравнения тегов, написанный Шамраем Александром:
steps:
- task: AzurePowerShell@5
displayName: 'Check changed files'
inputs:
azureSubscription: 'mysubscription'
scriptType: 'InlineScript'
Inline: |
$last_tag = git describe --tags --abbrev=0 --match "[0-9]*"
$changes = git diff --name-only --relative --diff-filter AMR $last_tag HEAD .
if ($changes -is [string]){
echo "Nothing changed $changes" }
else
{
if ($changes -is [array])
{
foreach ($change in $changes){
if ($change -like '*Azure.Infra/SecOpsTest/*') {
echo "this is changed file $change"
}
}
}
}
azurePowerShellVersion: 'latestVersion'
pwsh: true