Настройка badges в репозиториях gitlab, с помощью Gitlab API, в CI/CD

от автора

Подчерпнул эту идею из этого доклада: https://devopsconf.io/moscow/2022/abstracts/8862

Привет, коллеги!

Cегодня хочу поговорить о такой простой, возможно, бесполезной вещи как баджи.
На самом деле тема уже давно известная всем, но мало у кого доходят до них руки сделать их, либо просто в них нет необходимости и смысла.

Как это выглядит у меня

Иногда мне лень открывать Lens или писать helm list чтобы проверить версию приложения, которое сейчас стоит на каком либо окружении, а так же мне хочется при открытии репозитория увидеть полезную для себя информацию => и вот badges в Gitlab могут решить эти проблемы. Сейчас это выглядит вот так:

На самом деле это самые простые значки, которые есть практически во всех репозиториях, к этому всему можно добавить еще баджи Sonarqub-а, и вообще все, что вам захочется, пример:

Пример настройки баджей для Sonarqube тут, схоже с тем о чем я буду говорить, просто другой линк для получения инфы и картинки от сонара.


Как сделать такое?

Когда я делал это, сначала решил посмотреть на баджи «из коробки» гитлаба.
Такие вещи как, статус пайплайна и покрытие тестами, гитлаб позволяет настроить в пару кликов, по инструкции выше.

Но мне нужны свои собственные баджи, с буквами, версиями и тэгами => я посмотрел какие есть варианты создавать и обновлять их автоматически, с помощью GItlab API requests.


Вопрос с тем как добавлять решить просто, а вот удалять пришлось с помощью цикла по именам значков, выглядит это так:

base_badges="   code_lines   default_branch   JDK_VERSION   JRE_VERSION" for item in ${base_badges}   do     id=$(curl --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" "https://gitlab.ru/api/v4/projects/${CI_PROJECT_ID}/badges" | jq '.[] | select(.name == "'${item}'") | .id')     curl --request DELETE --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" "https://gitlab.ru/api/v4/projects/${CI_PROJECT_ID}/badges/"$id""   done

После удаления, соответственно идут запросы на добавление значков, по тем же именам, пример:

   curl --request POST --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \       --data "link_url=https://gitlab.ru/${CI_PROJECT_PATH}&image_url=https://img.shields.io/badge/code_lines-${code_lines}-blue1&name=code_lines" \       "https://gitlab.ru/api/v4/projects/${CI_PROJECT_ID}/badges

Как вы могли заметить, для сетапа самой картинки баджа я использую: https://shields.io
Тут вы можете поиграть с цветами и формой значков, которые вам нужны.

Целиковый степ CI файла, для импорта:

set-project-static-badges:   stage: your_stage   except:     - merge_requests   when: manual   image: registry.ru/devops-group/docker-images/base-images/ci:1.2   tags:     - your_runner   script:     - |       base_badges="       code_lines       default_branch       JDK_VERSION       JRE_VERSION"       for item in ${base_badges}       do         id=$(curl --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" "https://gitlab.ru/api/v4/projects/${CI_PROJECT_ID}/badges" | jq '.[] | select(.name == "'${item}'") | .id')         curl --request DELETE --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" "https://gitlab.ru/api/v4/projects/${CI_PROJECT_ID}/badges/"$id""       done     - |       default_branch=$(curl --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" "https://gitlab.ru/api/v4/projects/${CI_PROJECT_ID}/repository/branches" | jq '.[] | select(.default == true) | .name')       code_lines=$(printf '%d\n' "$(find . -type f -name "*.java" | xargs cat | wc -l)")     - |       echo -e "\033[33m Setup code_lines BADGE \033[0;m"        curl --request POST --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \         --data "link_url=https://gitlab.ru/${CI_PROJECT_PATH}&image_url=https://img.shields.io/badge/code_lines-${code_lines}-blue1&name=code_lines" \         "https://gitlab.ru/api/v4/projects/${CI_PROJECT_ID}/badges"     - |       echo -e "\033[33m Setup default_branch BADGE \033[0;m"        curl --request POST --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \         --data "link_url=https://gitlab.ru/${CI_PROJECT_PATH}/-/branches&image_url=https://img.shields.io/badge/default_branch-${default_branch}-blue1&name=default_branch" \         "https://gitlab.ru/api/v4/projects/${CI_PROJECT_ID}/badges"     - |       echo -e "\033[33m Setup JDK_VERSION BADGE \033[0;m"        curl --request POST --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \         --data "link_url=https://gitlab.ru/${CI_PROJECT_PATH}/-/blob/${CI_COMMIT_BRANCH}/.gitlab-ci.yml&image_url=https://img.shields.io/badge/JDK-${badge_jdk}-blue1&name=JDK_VERSION" \         "https://gitlab.ru/api/v4/projects/${CI_PROJECT_ID}/badges"     - |       echo -e "\033[33m Setup JRE_VERSION BADGE \033[0;m"        curl --request POST --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \         --data "link_url=https://gitlab.ru/${CI_PROJECT_PATH}/-/blob/${CI_COMMIT_BRANCH}/.gitlab-ci.yml&image_url=https://img.shields.io/badge/JRE-${badge_jre}-blue1&name=JRE_VERSION" \         "https://gitlab.ru/api/v4/projects/${CI_PROJECT_ID}/badges"

Подробнее:
JDK и JRE Version объявлены в переменных gitlab-ci.yml файла,
code_lines — парсит все файлы с расширением .java

Все это можно переделать под ваши нужды, я лишь показал простой способ как это сделать. Надеюсь кому-то будет это полезно 🙂

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Используешь ли ты Badges?
38.46% Да 5
0% Нет, и не буду 0
61.54% Попробую, возможно 8
Проголосовали 13 пользователей. Воздержался 1 пользователь.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Считаешь ли это полезной фичей?
100% Да 8
0% Нет 0
Проголосовали 8 пользователей. Воздержались 2 пользователя.

ссылка на оригинал статьи https://habr.com/ru/post/709418/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *