Я пытаюсь построить конвейер Gitlab, который состоит из 4 рабочих мест.У меня есть следующие этапы:
stages:
- compare
- build
- test
- deploy
Этап сравнения - получение дампа из API на другом сервере, сравнение его с тем же самым дампом из последнего успешного выполнения конвейера (он становится доступным как артефакт), а затемсравнивая два.Если есть какая-то разница, я бы хотел, чтобы конвейер перешел на следующую стадию, если нет никакой разницы, то я бы хотел, чтобы он вышел изящно.
У меня это работает, но вместо изящного выхода, если нет различий, он выходит из строя и конвейер помечается как отказавший, вот как это выглядит.
Вот важный код из моего .gitlab-ci.yaml (с удалением некоторой идентифицирующей информации)
Get_inventory_dump:
stage: compare
only:
- schedules
script:
- 'curl -k --output "previous-inventory.json" --header "PRIVATE-TOKEN: $user_token" "https://url/to/get/artifact/from/last/successful/run"'
- python3 auto_config_scripts/dump_device_inventory_api_to_json.py -p $pass -o /inventory.json -u https://url/for/inventory/dump -y
- /usr/bin/cmp previous-inventory.json inventory.json && echo "No Change in inventory since last successful run" && exit 1 || echo "Inventory has changed since last run, continue" && exit 0
artifacts:
when: on_success
expire_in: 4 weeks
paths:
- inventory.json
Generate_icinga_config:
stage: build
only:
- schedules
when: on_success
script:
Все ведет себя так, как я ожидал, но я чувствую, что естьлучший способ сделать это.
Есть ли способ, если сравнение такое же, просто пропустить следующие этапы конвейера, но все же завершить конвейер как "пройденный", а не "неудачный"?