TGViewer
Нарыл Нарыл @naryl_sec · 1.49K subscribers
Post #55 3.52K
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
  • 🔥 6
  • 🥰 3
  • ❤ 2
  • 👍 2
  • 😁 1
  • 😢 1
More from @naryl_sec
  1. Aug 29, 2024Gitlab pre_build_script Иногда есть необходимость дополнительно защитить Gitlab Runner. На…
  2. Aug 19, 2024OFFZONE_CYBERED_SPECIAL - промокод на скидку на воркшопы OFFZONE (не только мой)
  3. Aug 19, 2024🔧 Воркшоп «Ломаем CI/CD 2.0» На воркшопе вы изучите работу с секретами в CI/CD и научитес…
  4. Aug 19, 2024Второй год подряд буду проводить воркшоп на Offzone.
  5. May 24, 2024Запись моего выступления на PHDays: https://phdays.com/forum/broadcast/?talk=645&tag=offen…
  6. May 14, 2024Есть такая общеизвестная проблема когда делаешь non-root в k8s: контейнерам нужно биндить…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →