😊

PythonでGitLab APIを操作する

2021/10/02に公開約2,000字

PythonでGitLab APIを操作する方法について記載する。

業務においてGitLabを使うことがある。
その中で定型的な作業があり、自動化を行いたいと考えていた。
検討の結果、PythonでGitLab APIを操作するためのライブラリがあり、それを利用することになった。

python-gitlab

GitLab APIを操作するにあたって、python-gitlab を利用する。

参考サイト

python-gitlab’s documentation

https://python-gitlab.readthedocs.io/en/stable/index.html

Gitlab REST API

https://docs.gitlab.com/ee/api/api_resources.html

インストール

pip install --upgrade python-gitlab

Installation公式

アクセストークンの取得

GitLab でAPIを利用するにあたって、アクセストークンの取得が必要である。
自分のプロフィールからAccess Tokensのページを開き、アクセストークンを作成する。

python-gitlab による GitLab 操作の例

プロジェクトの取得

import gitlab

gitlab_url = "https://example.com/"
project_name = "example_project"
group_id = 1
access_token = "XXXXXXXXX" # gitlabのアクセストークン

gl = gitlab.Gitlab(
    gitlab_url,
    api_version=4,
    private_token=access_token
)
project = gl.projects.create(
    {'name': project_name, 'namespace_id': group_id}
)

※以降ではgl作成済みの前提で記載する。

プロジェクト一覧を取得

for project in gl.projects.list(all=True):
    project = gl.projects.get(project.id)
    print(project.name)

プロジェクト一覧を取得(ページング)

ページングを行う場合、page, per_page を指定する。
最初のページは page = 1 で始まる。

for project in gl.projects.list(page=1, per_page=10):
    project = gl.projects.get(project.id)
    print(project.name)

GitLab API のページングの仕様については、

https://docs.gitlab.com/ee/api/#pagination
に記載されている。

ブランチ作成

project = gl.projects.create({'name': project_name, 'namespace_id': group_id})

branch_feature_example = project.branches.create(
    {'branch': 'feature_example', 'ref': 'master'}
)

プロジェクトのサービス設定

Gitのリポジトリ部分だけではなく、プロジェクトのサービスも操作可能である。

Redmine issue trackerの設定を行う。

project = gl.projects.create(
    {'name': project_name, 'namespace_id': group_id}
)

service = project.services.get('redmine')
service.description = "Redmine issue tracker"
service.push_events = False
service.active = True
service.save()

Discussion

ログインするとコメントできます