Н
Нарыл
@naryl_sec1.5K подп.
3.0Kпросмотров
9 сентября 2024 г.
Score: 3.3K
Gitlab pre_build_script. Part 2 Так что же делать чтобы after_script не выполнялся после падения pre_build_script? Можно, например, дергать из скрипта гитлабовскую апишку и канцелить джобу. Но можно поступить проще, если разобраться как раннер запускает джобы внутри (все нижеперечисленное я изучал для k8s-раннера, полагаю что верно и для docker-раннеров тоже). Тут важны два факта. Первый - для запуска любых скриптов раннер сначала находит подходящий шелл с помощью файла скрипта detect_shell_script, который находится в папке /scripts-$CI_PROJECT_ID-$CI_JOB_ID. Соответственно если его перезаписать например на exit 1, то никакие другие скрипты точно не запустятся, в том числе after_script. Но если сделать только это, то джоба в интерфейсе гитлаба зависнет. А также и контейнер в котором она запущена и все это будет убито только по таймауту. Второй факт - оказалось, что гитлаб получает информацию о статусе джобы по записям в файл /logs-$CI_PROJECT_ID-$CI_JOB_ID/output.log. Если в этот файл вписать специальные json-строки, означающие на языке гитлаба завершение выполнения скриптов, то Gitlab воспримет джобу как завершенную, отобразит падение джобы в интерфейсе и остановит контейнеры джобы. Итого, такой кусок скрипта можно использовать в pre_build_script, в случае если проверки безопасности не пройдены и джоба должна упасть. echo 'exit 1' > /script/detect echo '{"command_exit_code": 1, "script": "/scripts-$CI_PROJECT_ID-$CI_JOB_ID/step_script"}' >> /logs/output.log echo '{"command_exit_code": 1, "script": "/scripts-$CI_PROJECT_ID-$CI_JOB_ID/after_script"}' >> /logs/output.log exit 1
3.0K
просмотров
1680
символов
Нет
эмодзи
Нет
медиа

Другие посты @naryl_sec

Все посты канала →
Gitlab pre_build_script. Part 2 Так что же делать чтобы afte — @naryl_sec | PostSniper