Использование Gitlab API | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Team Lead Архитектура и шаблоны проектирования Разработчик IoT C# Developer. Professional PostgreSQL Подготовка к сертификации Oracle Java Programmer (OCAJP) C# ASP.NET Core разработчик
-5%
Kotlin Backend Developer
-8%
iOS Developer. Professional
-8%
Symfony Framework Unity Game Developer. Basic JavaScript Developer. Professional Android Developer. Basic JavaScript Developer. Basic Java Developer. Professional Highload Architect Reverse-Engineering. Professional Java Developer. Basic PHP Developer. Professional Алгоритмы и структуры данных Framework Laravel Cloud Solution Architecture Vue.js разработчик Интенсив «Оптимизация в Java» Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив "Tarantool" PHP Developer. Basic
Инфраструктура
Мониторинг и логирование: Zabbix, Prometheus, ELK Дизайн сетей ЦОД Разработчик IoT PostgreSQL Экспресс-курс "Версионирование и командная работа с помощью Git"
-30%
Экспресс-курс «Введение в непрерывную поставку на базе Docker» Базы данных Reverse-Engineering. Professional Administrator Linux. Professional Network engineer Cloud Solution Architecture Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив «СУБД в высоконагруженных системах» Супер-интенсив "Tarantool" Network engineer. Basic
Корпоративные курсы
Безопасность веб-приложений IT-Recruiter Дизайн сетей ЦОД Компьютерное зрение Разработчик IoT Вебинар CERTIPORT Machine Learning. Professional
-6%
NoSQL Пентест. Практика тестирования на проникновение Java QA Engineer. Базовый курс Руководитель поддержки пользователей в IT
-8%
SRE практики и инструменты Cloud Solution Architecture Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Infrastructure as a code Супер-практикум по использованию и настройке GIT Промышленный ML на больших данных Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes» BPMN: Моделирование бизнес-процессов Основы Windows Server
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02

Использование Gitlab API

DevOps_Deep_9.11-5020-b9cd39.png

В продолжение прошлой заметки. Сохранение отчётов в пейджес и использование темплейта для merge request всё-таки не совсем удобно. Ибо нужно разработчику не забывать выбирать темплейт, и если несколько разных веток, то редактировать индексную страницу в пейджес. И тут неожиданно осенило — ведь у Gitlab есть API и там много всего интересного, например, есть редактирование merge request.

Таким образом, финальный пайплайн, который теперь будет запускаться на создание merge request, сформировался в следующую последовательность: - собираем докер образ - проверяем сныком, отчёт в артифакты - образ пушим в харбор - пушим из артифактов отчёт сныка в пэйджес - и редактируем merge request

Демонстрирую финальный стэйдж:

pages:
  stage: pages
  script:
    - mkdir public
    - REPORTS="[Snyk](${CI_PAGES_URL}/snyk_${CI_COMMIT_REF_NAME}.html)<br>[CVE](${CVE_URI})"
    - cp artifacts/snyk.html public/snyk_${CI_COMMIT_REF_NAME}.html
    - curl -X PUT "$MERGE_URI" -H "$GITOKEN" -H "$JSON_CONTENT" --data '{"description":"'$REPORTS'"}'
  tags:
    - harbor
  artifacts:
    paths:
      - public
  only:
    - merge_requests

вот обращение к API для редактирования поля desscription в merge request

curl -X PUT "$MERGE_URI" -H "$GITOKEN" -H "$JSON_CONTENT" --data '{"description":"'$REPORTS'"}'

Поясняю, что в переменных:

  JSON_CONTENT: 'Content-Type: application/json'
  GITOKEN: "PRIVATE-TOKEN:${gitlab_token}"
  MERGE_URI: "https://${CI_SERVER_HOST}/api/v4/projects/${CI_PROJECT_ID}/merge_requests/${CI_MERGE_REQUEST_IID}"

встроенные переменные: - CI_SERVER_HOST - хост вашего гитлаба - CI_PROJECT_ID - ид вашего проекта - CI_MERGE_REQUEST_IID - ид вашего мерж реквеста

переменные в секции settings/ci-cd/variables gitlab_token - предварительно заведённый в гитлабе токен для доступа к API

Отдельная боль и печаль — передача JSON в курле:

    - REPORTS="[Snyk](${CI_PAGES_URL}/snyk_${CI_COMMIT_REF_NAME}.html)<br>[CVE](${CVE_URI})"
    - curl -X PUT "$MERGE_URI" -H "$GITOKEN" -H "$JSON_CONTENT" --data '{"description":"'$REPORTS'"}'

Обратите внимание на кавычки для интеграции переменной $REPORTS в --data, т.к. то, что в --data должно быть в одинарных кавычках. И да, попытки внутри содержимого REPORTS добавить пробелы делало что-то страшное с парсингом, поэтому я заменил пробелы на \<br\>.

Итог

  • разработчик отправляет merge request
  • pipeline запускает проверки кода и образа на уязвимости
  • отчёты по проверкам прописываются ссылками в описании мерж реквеста
  • ревьювер одной кнопкой может их легко открыть и посмотреть содержимое

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
1 комментарий
0

Жуткое количество англицизмов на квадратный сантиметр.

Для комментирования необходимо авторизоваться