Подчерпнул эту идею из этого доклада
Привет, коллеги!
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
Все это можно переделать под ваши нужды, я лишь показал простой способ как это сделать. Надеюсь кому-то будет это полезно :)
refringerator
Возможно, ссылка на источник вдохновения не должна быть опубликована в открытом доступе
IvanRezv Автор
Возможно)
Изменил на линк - на программу.
За ссылкой на доклад стучитесь в сообщения!