Skip to content

magf/gitlab-variables

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gitlab-variables

Скрипт на языке Python, позволяющий работать с переменными групп/проектов GitLab

Краткая информация

Скрипт связывается с сервером GitLab по протоколу HTTPS, используя Project-level Variables API и Group-level Variables API.

Для использования доступны все функции, за исключением Show variable details за ненадобностью.

Так же не реализован дополнительный параметр filter по той же причине.

Вся конфигурационная информация и данные передаются в скрипт посредством JSON-файлов. Способы и примеры использования описаны ниже.

Для получения справки:

python3 gitlab-variables.py -h

Справка по конкретной команде:

python3 gitlab-variables.py <command> -h

Список команд

Команда Описание Обязательные параметры
list Вывести список всех переменных группы/проекта [-c|--config] <CONFIGFILE>
create Создать переменные, перечисленные в файле данных. Существующие переменные не изменяются [-c|--config] <CONFIGFILE>, [-d|--data] <DATAFILE>
update Заменить значение переменных, перечисленных в файле данных. Отсутствующие переменные пропускаются [-c|--config] <CONFIGFILE>, [-d|--data] <DATAFILE>
remove Удалить переменные, перечисленные в файле данных [-c|--config] <CONFIGFILE>, [-d|--data] <DATAFILE>

Настройка скрипта

Настройки подключения к репозиторию считываются из конфигурационного файла в формате JSON

Пример config/config.json:

[
  {
    "url": "https://my.gitlab.com",
    "id": "666",
    "token": "X9Ym1Koc-mjgvyTKFg8v",
    "resource": "projects",
    "data": "data/data.json"
  }
]

Описание формата

Ключ Описание Обязательный параметр
url URL сервера GitLab Да
id Идентификатор группы/проекта. Можно найти в секции Settings/General группы/проекта под именем Group ID/Project ID Да
token Токен для доступа к проекту. Может быть персональным - для доступа ко всему, что есть в правах пользователя; проектным - рекомендуется для доступа к конкретному проекту, не работает с группами. Да
resource Ресурс, с которым будут производиться операции. Может принимать два значения: groups - при работе с группой; projects - при работе с проектом Да
data Файл с данным в формате JSON Нет. Если отсутствует, то для всех команд кроме list должен быть определён в командной строке ключом -d или --data

Файл с настройками передаётся через командную строку с ключом -c или --config

Пример:

python3 gitlab-variables.py list -c config/config.json

Данные для скрипта

Все команды за исключением list дополнительно требуют на входе файл данных в формате JSON. (Получение файла данных смотри ниже)

Пример (файл data/data.json):

[
  {
    "environment_scope": "*",
    "key": "IMAGE_TAG_JAVA",
    "masked": false,
    "protected": false,
    "value": "8u191-jre-alpine3.9",
    "variable_type": "env_var"
  },
  {
    "environment_scope": "*",
    "key": "IMAGE_TAG_MAVEN",
    "masked": false,
    "protected": false,
    "value": "3.6.3-jdk-8",
    "variable_type": "env_var"
  }
]

Описание форматов данных различается минимально требуемыми полями для разных команд и ресурсов. В данном примере приведён наиболее полный формат, доступный для любых команд и ресурсов.

Более подробную информацию по описанию форматов для групп и для проектов можно получить на официальном сайте.

Создание файла данных

Создать файл данных можно из имеющихся переменных группы/проекта

Пример (вывод направлен в data/data.json):

python3 gitlab-variables.py list -c config/config.json -j > data/data.json

Результат:

Выполняется операция list с переменными projects 666 на сервере https://my.gitlab.com OK

Особенности создания файла данных

Ключ -j указывает на то, что вывод нужно осуществлять в многострочном читаемом формате с отступами строк. Это сделано для удобства редактирования данных. В противном случае данные будут выведены в компактном формате в одну строку, что может быть удобно для создания резервных копий и переноса данных без изменения.

Пример (вывод направлен в stdin):

python3 gitlab-variables.py list -c config/config.json

Результат:

Выполняется операция list с переменными projects 666 на сервере https://my.gitlab.com [{'variable_type': 'env_var', 'key': 'IMAGE_TAG_JAVA', 'value': '8u191-jre-alpine3.9', 'protected': False, 'masked': False, 'environment_scope': ''}, {'variable_type': 'env_var', 'key': 'IMAGE_TAG_MAVEN', 'value': '3.6.3-jdk-8', 'protected': False, 'masked': False, 'environment_scope': ''}] OK

Использование файла данных

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

Файл данных указывается в конфигурационном файле по ключу data (смотри выше) или передаётся через командную строку с ключом -d или --data. Если файл данных определён в конфигурационном файле и дополнительно указан с помощью ключа -d, то значение ключа из командной строки переопределит значение ключа из файла.

Создание переменных

Попробуем пересоздать имеющиеся переменные Пример:

python3 gitlab-variables.py create -c config/config.json -d data/data.json

В результате получим ошибку:

Выполняется операция create с переменными projects 666 на сервере https://my.gitlab.com Creating IMAGE_TAG_JAVA... (IMAGE_TAG_JAVA) has already been taken Creating IMAGE_TAG_MAVEN... (IMAGE_TAG_MAVEN) has already been taken

Обновление переменных

Тогда попробуем обновить:

 python3 gitlab-variables.py update -c config/config.json -d data/data.json

Увидим, что всё работает:

Выполняется операция update с переменными projects 666 на сервере https://my.gitlab.com Creating IMAGE_TAG_JAVA... OK Creating IMAGE_TAG_MAVEN... OK

Удаление переменных

Так же заслуживает внимания команда remove, которая удаляет переменные из групп/проектов. Для удалением каждой переменной выдаётся запрос на подтверждение, ответ по умолчанию - "No".

Пример:

python3 gitlab-variables.py remove -c config/config.json -d data/data.json

Результат:

Выполняется операция remove с переменными projects 666 на сервере https://my.gitlab.com Remove IMAGE_TAG_JAVA [y/N]: Remove IMAGE_TAG_MAVEN [y/N]: y Removing IMAGE_TAG_MAVEN... OK

Запросы на удаление можно обойти, используя опцию -y или --yes - ответ на все вопросы - YES. Если после этого выполнить ту же команду с ключом -y или --yes, то будет удалена оставшаяся переменная, которая была проигнорирована на прошлом шаге. Удаление несуществующей переменной выдаст ошибку.

Пример:

python3 gitlab-variables.py remove -c config/config.json -d data/data -y

Результат:

Выполняется операция remove с переменными projects 666 на сервере https://my.gitlab.com Removing IMAGE_TAG_JAVA... OK Removing IMAGE_TAG_MAVEN... 404 Variable Not Found

Повторение операций создания/обновления

Теперь посмотрим, что будет, если попробовать обновить несуществующие переменные:

python3 gitlab-variables.py update -c config/config.json -d data/data.json

Результат:

Выполняется операция update с переменными projects 666 на сервере https://my.gitlab.com Creating IMAGE_TAG_JAVA... 404 Variable Not Found Creating IMAGE_TAG_MAVEN... 404 Variable Not Found

Убедились, что все описанные в файле данных переменные удалены. Теперь попробуем их создать заново. Пример:

 python3 gitlab-variables.py create -c config/config.json -d data/data.json

Результат:

Выполняется операция create с переменными projects 666 на сервере https://my.gitlab.com Creating IMAGE_TAG_JAVA... OK Creating IMAGE_TAG_MAVEN... OK

ВНИМАНИЕ!!!

При использовании опции YES удаление переменных пройдёт без вопросов.

ВАЖНО!!!

Для работы со скриптом необходимо получить персональный токен и указать его в конфигурационном файле в соответствующем поле. При создании токена важно указать полный доступ.

В данном примере использоуется тестовый токен для этого проекта

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages