Скрипт связывается с сервером 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> |
Пример 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 |
Пример:
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 удаление переменных пройдёт без вопросов.
Для работы со скриптом необходимо получить персональный токен и указать его в конфигурационном файле в соответствующем поле. При создании токена важно указать полный доступ.
В данном примере использоуется тестовый токен для этого проекта