Приветствую, в процессе решения задачи:
GitLab Как сделать автоматическую проверку кода при push или merge request с уведомлением разработчика о результате и получением от него обр. связи? сделал pipeline из 3-х шагов, который:
1. Отправляет код на проверку (результат складывается в папочку на runner-e и доступен в artifacts
2. Второй джоб берет файл отчёта и отправляет письмом пользователю
3. Третий джоб стоит в режиме manual и ждёт, когда пользователь сделает обратную связь - нажмёт в письме кнопку. В самом джобе такой цикл ожидания:
echo "Ожидание подтверждения пользователя..."
while true; do
status=$(curl -s "http://$APPROVAL_SERVICE_URL:$APPROVAL_SERVICE_PORT/check-approval/$CI_PIPELINE_ID" |
grep -o '"status":"[^"]*"' | cut -d'"' -f4)
echo "Статус: $status"
if [ -z "$status" ]; then
echo "Не удалось получить статус, повторяем..."
sleep 30
continue
fi
case "$status" in
"approved")
echo "Подтверждение получено"
break
;;
"rejected")
echo "Отклонение: пайплайн прерван"
exit 1
;;
*)
echo "Статус: $status, ждём..."
sleep 30
;;
esac
sleep 30
done
Так же реализовал отдельный небольшой сервис, который хранит выбор пользователя, какую кнопку он нажал в письме. У сервиса грубо говоря два основных эндпоинта - accept и reject, если пользователь нажмёт в письме кнопку "Принять", то вызывается accept, если "Отклонить", то reject. И теперь возник вопрос, как программно выполнить последний джоб, который стоит в режиме manual ? Вернее как его выполнить я знаю, вызвать api gitlab-a, типа:
GITLAB_URL/api/v4/projects/PROJECT_ID/jobs/JOB_ID/play Проблема в том, что я не могу выполнить джоб без токена. И вот возникает вопрос, какой токен использовать, как его передать в сервис, как это вообще правильно организовывается? Читал про переменную $CI_JOB_TOKEN, но она появляется только в запущенном джобе, а раз у меня джоб в режиме manual, то и переменной у меня такой нет, она же разная для каждого джоба, правильно? Ещё видел, что как-то можно делать через какой-то триггер, но не понял, как это работает? Объясните, как организовать выполнение джоба из внешней системы и как передавать в неё токен для выполнения?