GitLabしたい
リモートリポジトリのホスティグサービスのひとつにGitLab
があります。
GitLab.comでホスティングされていて、無料で使うことができます。
GitHubと比べて、チーム開発に必要なツールが揃っていて、ドキュメントも充実しています。
GitLab Pagesしたい
(あとで整理するので、とりあえずメモ)
.gitlab-ci.yml
https://docs.gitlab.com/ee/ci/jobs/job_control.html#common-if-clauses-for-rules
https://docs.gitlab.com/ee/ci/yaml/index.html
Personal Access Tokenしたい(PAT
)
[設定]
->[Access Token]
[新しいトークンを追加]
トークン名
: わかりやすい名前を入力有効期限
: 適切に設定 (空欄にするとたぶん無期限)スコープを選択
:api
を選択
[パーソナルアクセストークンを作成]
[あなたの新しいパーソナルアクセストークン]
必要なファイルにコピペ
Personal Access Token
(PAT)は、
APIを使った操作やアプリを利用する場合に、
サービスごとに発行する認証用のトークンです。
トークンごとにスコープ(=権限)を設定できます。
HTTPリクエストを使ったAPI操作をする場合は、
api
を選択する必要がありました。
注釈
最初は write_repository
のみ、
次に read_api
とwrite_repository
を試したのですが、API操作できずでした。
PATを管理したい
1# .env
2# GitLab PAT
3# expires: 2024-10-27
4# scope: api
5GITLAB_TOKEN=トークン
1import os
2token = os.environ["GITLAB_TOKEN"]
PATは認証用トークンなので、ソースコードにベタ書きしてはいけません。
プロジェクトごとの.env
などに保存し、
環境変数として呼べるようにします。
PATを再発行したい
トークンの値をあとから確認することはできません。 コピペをミスってしまった場合などでも、再発行する必要があります。
ヒント
サービスのパスワード変更と異なり、 気軽に削除・再発行できるところがトークンの利便性のひとつだと思います。 万が一、トークンが漏洩してしまった場合も、即削除して無効にしてしまえばOKです。
REST APIしたい
REST APIを使って、GitLabを操作できます。
エンドポイント
REST APIのURLの基本形は
https://gitlab.com/api/v4/{エンドポイント}
です。
現在はv4
のAPIのみ利用可能です。
以下に、リモートリポジトリに対してよく使う操作とエンドポイントを整理しました。
リソース |
エンドポイント |
---|---|
ブランチ |
|
コミット |
|
イシュー |
|
マージリクエスト |
|
認証
1import os
2import requests
3token = os.environ["GITLAB_TOKEN"]
4
5# アクセストークン
6headers = {"PRIVATE-TOKEN": token}
7
8# OAuth準拠のヘッダ
9headers = {"Authorization": "Bearer " + token}
10
11# リクエスト時にヘッダーを設定(必須)
12response = requests.get(..., headers=headers, ...)
PATを使ってAPI認証するときのヘッダー情報です。
PRIVATE-TOKEN
ヘッダー、もしくは
OAuth準拠のAuthorization
ヘッダーを使用します。
プロジェクト情報を取得したい(GET
)
1url = f"https://gitlab.com/api/v4/projects/{project_id}"
2requests.get(url, headers=...)
ファイル操作したい
1url = f"https://gitlab.com/api/v4/projects/{project_id}/repository/files/{file_path}"
1# ファイルを取得
2headers = {"PRIVATE-TOKEN": token}
3requests.get(url, headers=...)
GET
メソッドで、リポジトリにあるファイルを取得できます。
1# ファイルを追加
2headers = {"PRIVATE-TOKEN": token}
3data = {
4 "branch": "main",
5 "content": "ファイルの内容",
6 "commit_message": "コミットメッセージ",
7 "encoding": "base64"
8}
9# ファイルを追加
10requests.post(url, headers=headers, data=data)
11
12# ファイルを更新
13requests.put(url, headers=headers, data=data)
POST
とPUT
メソッドで、リポジトリにファイル(file_path
)を追加できます。
data
の設定が必要です。
1# ファイルを削除したい
2headers = {"PRIVATE-TOKEN": token}
3data = {
4 branch: "main",
5 commit_message: "コミットメッセージ(削除した理由)",
6}
7requests.delete(url, headers=headers, data=data)
ブランチ操作したい
1url = f"https://gitlab.com/api/v4/projects/{project_id}/repository/branches"
2
3headers = {"PRIVATE-TOKEN": token}
4data = {
5 "branch": 新しいブランチ名,
6 "ref": ベースとなるブランチ名
7}
8request.put(url, headers=headers, data=data)
ブランチを作成したい
コミットしたい
1url = f"https://gitlab.com/api/v4/projects/{project_id}/repository/commits
2
3data = {
4 "branch": "コミットするブランチ名",
5 "commit_message": "コミットメッセージ",
6 "actions": [
7 {
8 "action": "create",
9 "file_path": "ファイルのフルパス”,
10 "content": "ファイルの内容",
11 },
12 {
13 "action": "update",
14 "file_path": "...",
15 "content": "ファイルの内容",
16 },
17 {
18 "action": "delete",
19 "file_path": ...,
20 }
21 }
22
23requests.post(url, headers=headers, data=data)
マージリクエストしたい
1url = f"https://gitlab.com/api/v4/projects/{project_id}/merge_requests`
2
3headers = {"PRIVATE-TOKEN": token}
4data = {
5 # マージ元のブランチ名
6 source_branch: "feature-branch",
7 # マージ先のブランチ名
8 target_branch: "main",
9 title: "MRのタイトル",
10 description: "MRの説明。MRの説明。MRの説明。MRの説明。",
11 // MRに成功したらソースブランチを削除
12 remove_source_branch: true;
13}