HEXA BLOG
ヘキサブログ
その他
GitLab APIの紹介
こんにちは
ビッシーです
開発で GitLab を使用していますが、
GitLab には GitLab API がありHTTPリクエストを通して
GitLab のデータアクセスや操作を行うことが出来ます。
↓公式のドキュメントです↓
https://docs.gitlab.com/ee/api/README.html
GitLab API があればスクリプト等で
GitLab の操作をバッチ化することが出来ます。
当然 GitLab CI Runners で実行するスクリプトでも利用できるので、
GitLab 上のリソースを集計したり、処理を 自動化 するために役立てることが出来ます
今回はその一例として、
GitLab CI Runners のビルドスクリプト経由で、
プロジェクトの Snippets に投稿するまでの手順をご紹介したいと思います
1. プロジェクト構成
まずは .gitlab-ci.yml を設定したプロジェクトを用意します。
今回はサンプル用に、下記のような最低限の構成で作業していきます。
├ .gitlab-ci.yml
└ ci
└ test.py
.gitlab-ci.yml の中身はこちら:
stages: - test test_job: type: test script: - python ci/test.py
※ test.py の中身は後述します
これで GitLab CI の Pipelines が実行できるようになりましたが、
GitLab API をスクリプトから利用するために下準備が必要なため、
次はその準備を進めます。
2. Personal Access Tokenの発行と登録
GitLab API でProjectなどアクセス権限で保護されたリソースにアクセスする場合、
リクエストする際に 認証 が必要になります。
↓GitLab APIの認証について↓
https://gitlab.com/help/api/README.md#authentication-1
通常は、 Private Token か Personal Access Token を利用することになります。
Private Token が 各ユーザーアカウントに1個 なのに対して、
Personal Access Token は用途ごとに複数発行することが出来るため、
基本的には Personal Access Token を利用することを推奨します。
Personal Access Token の発行や無効化の管理は、
ユーザープロファイルページの Access Tokens のページから行うことが出来ます。
(作成したトークンは後から再確認することは出来ないので、一連の作業が完了するまでは忘れないようにしておいてください)
発行した Personal Access Token は、
今回CIを実行する Project の Variables に CI_PRIVATE_TOKEN という Key で登録しておきます。
この変数はスクリプトのほうから参照して GitLab API のリクエストを作成するために使います。
3. HTTPリクエスト作成スクリプト
Personal Access Token が作成できたので、 GitLab API が使える状態になりました
GitLab API はHTTPリクエストが出来れば何でもよいのですが、
今回は分かりやすいPythonのスクリプトを利用して行っていきます。
サンプルとして、CIを実行したProjectのSnippetに新しいファイルを投稿する
GitLab API のリクエストを作成していきます。
下記がサンプルコードです:
import urllib.request import json import os ci_project_id = os.environ.get("CI_PROJECT_ID") ci_private_token = os.environ.get("CI_PRIVATE_TOKEN") # URLは利用しているGitLabサーバーのものに読み替えてください url = "https://url-to-gitlab/api/v3/projects/" + str(ci_project_id) + "/snippets" data = json.dumps({ "private_token" : ci_private_token, "title" : "test", # Snippetタイトル "file_name" : "test.md", # ファイル名 "visibility_level" : 20, "code" : "hello, world" # 本文 }).encode('utf-8') req = urllib.request.Request(url, data=data, headers={'content-type' : 'application/json'}) res = urllib.request.urlopen(req) print(res.read().decode('utf8'))
↓Project SnippetsのAPIリファレンスはこちら↓
https://docs.gitlab.com/ee/api/project_snippets.html
手順はこれで完了です
GitLab CI Runner から GitLab API を利用する際の注意点は 2点 です。
その1:
先ほど作成した Personal Aceess Token をリポジトリ内に直接記述することは
セキュリティ上NGなので、必ずProjectの build variables 経由で渡すようにしましょう。
その他、CIでリポジトリ外のリソースにアクセスするような場合も、
.gitlab-ci.ymlに直接記述せず build variables を経由することを推奨します
(fork等した際にきちんと対応できるようにするため)
その2:
GitLab API からプロジェクトを操作する際に ProjectID が必要になります。
このIDは GitLab CI Variables から取得することが出来るため、
そちらを利用するようにしましょう。
↓GitLab CIで参照できる環境変数はこちらで確認できます ↓ https://gitlab.com/help/ci/variables/README.md
GitLab APIからほとんどのGitLab機能にアクセスできるため、
GitLab上で自動化したい作業が出来た場合、CI化させることが出来るようになりました
今回の紹介はこれで終了になりますが、
GitLabを使ってみたいけれどローカルに環境構築するのが面倒という方は、
GitLab.com に FreePlan があるので、ぜひ触ってみてください
それでは
CATEGORY
- about ヘキサ (166)
- 部活動 (6)
- CG (18)
- プロジェクトマネジメント (1)
- 研修 (5)
- 美学 (1)
- いいモノづくり道 (230)
- 採用 -お役立ち情報も- (149)
- プログラム (188)
- デザイン (99)
- ゲーム (274)
- 日記 (1,104)
- 書籍紹介 (113)
- その他 (875)
- 就活アドバイス (20)
- ラーメン (3)
- ライフハック (25)
- イベント紹介 (10)
- 料理 (23)
- TIPS (7)
- 怖い話 (3)
- サウンド (5)
- 子育て (1)
- 筋トレ (1)
- 商品紹介 (21)
- アプリ紹介 (31)
- ソフトウェア紹介 (33)
- ガジェット紹介 (12)
- サイト紹介 (10)
- 研究・開発 (34)
- 回路図 (4)
- アナログゲーム (40)
- 交流会 (21)
- 報告会 (3)
- インフラ (25)
- グリとブラン (6)
- カメラ (9)
- クラフト (27)
- 部活 (14)
- 画伯 (15)
- カレー (6)
- 音楽(洋楽) (6)
- 映画・舞台鑑賞 (43)
- 飼育 (5)
- いぬ (8)
- ねこ (19)
ARCHIVE
- 2024年
- 2023年
- 2022年
- 2021年
- 2020年
- 2019年
- 2018年
- 2017年
- 2016年
- 2015年
- 2014年
- 2013年
- 2012年
- 2011年
- 2010年
- 2009年
- 2008年
- 2007年