Azure Pipelines: git diff-tree показывает пустую строку
Я пытаюсь получить все зафиксированные файлы в конвейере сборки Azure. Это скрипт yaml, который я использую:
trigger:
branches:
include:
- swagger_dev
paths:
include:
- swagger_dev/swaggers/*.yaml
variables:
CLIENT_CREDENTIALS: $(ClientCredentials)
steps:
- powershell: |
echo "$(Build.SourceVersion)"
echo "$(git diff-tree --no-commit-id --diff-filter=d --name-only -r $(Build.SourceVersion))"
Когда я фиксирую один или несколько файлов, конвейер правильно отображает Build.SourceVersion, но затем выводит пустой вывод для команды git:журнал конвейера
Как это возможно? В настоящее время я нахожусь в ветке с именем swagger_dev, а зафиксированные файлы находятся в каталоге swagger_dev/swaggers. Может быть, мне следует добавить эту информацию в команду diff-tree?
2 ответа
Команде git diff-tree требуется как минимум глубина 2, чтобы получить измененные файлы.
Причина проблемы может быть связана с глубиной выборки репозитория Pipeline.
По умолчанию неглубокая выборка конвейерного репозитория по умолчанию равна 1.
Вы можете попробовать установить для fetchDepth значение 0 или >2 в конвейере YAML.
Например:
steps:
- checkout: self
fetchDepth: 0
Или вы можете перейти к YAML Pipeline -> ... -> Triggers -> YAML -> Get sources -> Shallow fetch . Вы можете отменить выбор опции.
Задача bash, которую я использую, — проверить имя файла tfvars.
- bash: |
PATH_FILTER="folder1/**/*"
CHANGED_FILES=$(git diff HEAD HEAD~ --name-only -- `find . -name "*.auto.tfvars"`)
MATCH_COUNT=0
MATCH_FILE=""
FILE_PATH=""
FILE_NAME=""
echo "Checking for file changes..."
for FILE in $CHANGED_FILES
do
if [[ $FILE == *$PATH_FILTER* ]]; then
MATCH_FILE=${FILE}
MATCH_PATH="$(dirname ${FILE})"
FILE_NAME="$(basename ${FILE})"
echo "MATCH: ${FILE} changed"
MATCH_COUNT=$(($MATCH_COUNT+1))
else
echo "IGNORE: ${FILE} changed"
fi
done