Использование 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 из файла.