Как стать автором
Обновить

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

Время на прочтение3 мин
Количество просмотров6.3K

Подчерпнул эту идею из этого доклада

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

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?
31.25% Да20
9.38% Нет, и не буду6
59.38% Попробую, возможно38
Проголосовали 64 пользователя. Воздержались 6 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Считаешь ли это полезной фичей?
85.71% Да42
14.29% Нет7
Проголосовали 49 пользователей. Воздержались 9 пользователей.
Теги:
Хабы:
+8
Комментарии2

Публикации

Изменить настройки темы

Истории

Работа

DevOps инженер
45 вакансий

Ближайшие события