はじめに
EnterpriseプランのGitHub Organizationにメンバーとして参加している場合などで、GitHubのSettings項目がコンソールに表示されず操作できない事があります。
このような状況でOrganizationの所有者に代わってGitHub Actionsで使用するEnvironments(環境変数)の設定を行いたいシーンがありました。
この場合APIを使用する方法がありますので紹介します。
APIを利用してできる事は他にもたくさんあり、以下のリンク先からドキュメントが確認可能です。
すべての REST API ドキュメント
前提
Environmentsの環境変数名や値などの設定はAPIを利用して行えますが、入れ物となるEnvironmentの作成はAPIでは行えません。
そのため、あらかじめアカウントの所有者に必要なEnvironmentを以下の手順で作ってもらっておきます。
- SettingsのメニューからEnvironmentsを選択し、New environmentをクリック。
- Nameを入力し、Configure environmentをクリックで作成されます。
Environmentに対してAPIで設定を行う
Environment の一覧取得 (List environments)
作成済みのEnvironmentの一覧を取得するAPIです。
公式ドキュメントによる説明はこちら→List environments
エンドポイントは以下の通りです。
GET /repos/{owner}/{repo}/environments
owner
にはリポジトリが属するOrganization名、repo
にはリポジトリ名を記載します。
また、AuthorizationヘッダにはBearerトークンを指定します。
このトークンの値にはGitHubのpersonal access token
を利用します。
$ curl -L \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer {YOUR_TOKEN}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/{owner}/{repo}/environments
{
"total_count": 2,
"environments": [
{
"id": 2557874471,
"node_id": "EN_kwDOLbBsnc6YdhEn",
"name": "prd",
"url": "https://api.github.com/repos/{owner}/{repo}/environments/prd",
"html_url": "https://github.com/{owner}/{repo}/deployments/activity_log?environments_filter=prd",
"created_at": "2024-03-24T12:05:12Z",
"updated_at": "2024-03-24T12:05:12Z",
"can_admins_bypass": true,
"protection_rules": [
],
"deployment_branch_policy": null
},
{
"id": 2557873981,
"node_id": "EN_kwDOLbBsnc6Ydg89",
"name": "stg",
"url": "https://api.github.com/repos/{owner}/{repo}/environments/stg",
"html_url": "https://github.com/{owner}/{repo}/deployments/activity_log?environments_filter=stg",
"created_at": "2024-03-24T12:05:03Z",
"updated_at": "2024-03-24T12:05:03Z",
"can_admins_bypass": true,
"protection_rules": [
],
"deployment_branch_policy": null
}
]
}
作成済みのstgとprdのEnvironmentが取得できました。
Environment variablesの設定 (Create an environment variable)
続きまして、前項のEnviromentに対してvariables(環境変数の名前と値)の設定を行います。
公式ドキュメントによる説明はこちら→Create an environment variable
エンドポイントは以下の通りです。
POST /repos/{owner}/{repo}/environments/{environment_name}/variables
environment_name
にはvariablesを設定するEnvironmentの名前を記載します。
また-dオプションでvariablesの内容を指定します。
今回追加するvariablesはAWS_ACCOUNT_ID
という名前で123456789012
という値を設定します。
$ curl -L \
-X PUT \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer $YOUR_TOKEN" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/{owner}/{repo}/environments/stg/variables \
-d '{"name": "AWS_ACCOUNT_ID", "value": "123456789012"}'
{
}
variablesの設定が完了しました。
設定したEnvironment variablesの確認(Get an environment variable)
公式ドキュメントによる説明はこちら→Get an environment variable
設定したvariablesが正しく設定されているか確認します。
エンドポイントは以下の通りです。
GET /repos/{owner}/{repo}/environments/{environment_name}/variables/{variable_name}
variable_name
には設定したvariablesの名前(環境変数名)を記載します。
curl -L \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer $YOUR_TOKEN" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/{owner}/{repo}/environments/stg/variables/AWS_ACCOUNT_ID
{
"name": "AWS_ACCOUNT_ID",
"value": "123456789012",
"created_at": "2024-03-24T13:50:42Z",
"updated_at": "2024-03-24T13:50:42Z"
}
追加したvariablesの内容が確認できました。
まとめ
今回はGitHubのEnvironmentsのvariablesをAPIで設定する方法を紹介しました。
APIを利用することでコンソールからsettingsが操作できない場合にもその項目を設定することができます。
他にもAPIを利用してできる項目は多くありますので、必要に応じて活用してみてください。