Использование Python + GitLab API для создания Issue
Постановка задачи
Имеется проект на GitLab. Необходимо создать в нем несколько Issue. Текст Issue содержится в текстовом файле.
Выбор инструментов.
Предполагается, что Issue очень много, поэтому ручная обработка не подходит.
Для автоматизации процесса будет использоваться язык программирования Python 2.7.9.
Для взаимодействия с GitLab API используется библиотека python-gitlab 0.21.2.
Актуальная на момент написания статьи версия GitLab – 9.5.1-ee. Все написанное ниже проверялось на этой версии.
Подготовка к работе с GitLab API
Механизм работы с GitLab API описан в документации GitLab. API реализован на основе GraphQL.
Во-первых, необходимо определить версию API. Для этого необходимо посмотреть файл api.rb. По ссылке доступна актуальная версия для сайта
gitlab.com. Если GitLab развернут на своем сервере, необходимо смотреть этот
файл в своей версии. Строка version %w(v3 v4), using: :path
говорит о том,
что данная версия GitLab поддерживает API версии v3
, v4
.
API URL, который принимает запросы выглядит так: /api/VERSION
. Например,
для версии v4
URL будет выглядеть так: /api/v4
.
Вторым шагом является получение Access Token. Это делается в настройках
пользователя (Settings -> Access Tokens).
Интерфейс окна может различаться от версии к версии. При создании необходимо
указать имя Access Token и дату, когда он истекает. Необходимо также отметить
пункт api
. После создания Token его необходимо сразу же сохранить, т.к.
он показывается только до обновления страницы.
Взаимодействие с GitLab API
Для вызова методов API используется библиотека python-gitlab.
Программа, реализующая заявленный функционал приведена ниже.
import gitlab
import csv
GITLAB_URL = 'https://gitlab.com/'
ACCESS_TOKEN = 'XXXXXXXX'
PROJECT_ID = 999999999
def list_projects():
print ("List of projects:")
projects = gl.projects.list()
for project in projects:
print (project.id, project.name)
def create_issue(project_id, title, description):
issue = gl.project_issues.create({
'title': title,
'description': description
},
project_id=project_id)
print ("Created Issue", title)
gl = gitlab.Gitlab(GITLAB_URL, ACCESS_TOKEN)
gl.auth()
list_projects()
with open('issues.csv', 'rb') as csvfile:
reader = csv.reader(csvfile, delimiter=',', quotechar='"')
for row in reader:
create_issue(PROJECT_ID, row[0], row[1])
Для использования кода в собственных нуждах необходимо отредактировать:
параметр
GITLAB_URL
, который хранит URL сервера GitLab. Необходимо изменить, если GitLab развернут на своем сервере;параметр
ACCESS_TOKEN
на полученный выше;параметр
PROJECT_ID
должен хранить ID проекта. Чтобы его узнать необходимо запустить программу с заполненными параметрамиGITLAB_URL
иACCESS_TOKEN
. Функцияlist_projects
выведет список проектов в форматеID НАЗВАНИЕ
. В списке необходимо найти нужный проект и подставить его ID в соответствующую константу.
Код необходимо сохранить в файл с именем create_issues.py
.
Необходимо создать файл issues.csv
в том же каталоге, каждая строка которого
должна содержать "TITLE","DESCRIPTION"
, где TITLE
– заголовок создаваемого
issue, DESCRIPTION
– описание.
Пример файла:
"Исправить баг с всплывающим сообщением","За подробностями следует обратиться к Кате"
"Исправить баг с всплывающим сообщением","За подробностями следует обратиться к Кате"
"Исправить баг с всплывающим сообщением","За подробностями следует обратиться к Кате"
После этого необходимо запустить на исполнение программу:
python create_issues.py
И будет создано 3 одинаковых issue.
Результат
В статье показано, как работать с GitLab API с использованием средств языка програмиирования Python. Представлен скрипт для автоматического создания issue из файла.