成本中心通过将 GitHub 成本映射到公司财务结构,帮助您跟踪和控制 GitHub 成本。
本教程将指导您使用用户界面和 REST API 规划、创建和管理成本中心,帮助您判断哪种方式最适合您的组织需求。
1. 制定成本中心策略
成本中心允许您对 GitHub 资源(用户、组织和仓库)进行分组,以实现独立的成本跟踪和报告。每个成本中心应代表公司中您希望单独报告或控制成本的一个业务部门或团队。
如果您使用 Azure 计费,可以为每个成本中心分配单独的计费标识。
确定所需的成本中心
最佳策略取决于您财务报告结构和 GitHub 设置的复杂程度。先从最简方案入手——以后随时可以添加更多成本中心。
请按以下步骤规划成本中心
-
映射至财务实体:为每个您希望内部追踪的财务实体(如部门、业务单元或项目团队)创建一个成本中心。
-
识别用户:列出属于每个财务实体的用户。将用户直接分配到成本中心可确保其许可证和产品使用量被正确归属。
-
识别组织:列出属于每个财务实体的组织。将组织分配到成本中心可确保其对 Actions、Codespaces、软件包等产品的使用被正确分配。
-
识别混合所有权:如果一个组织包含归属不同财务实体的仓库,请计划将这些仓库单独分配到相应的成本中心,而保持组织本身未分配。
提示
如果用户直接分配到成本中心 A,但因所在组织而间接属于成本中心 B,则其所有已授权产品的费用将计入成本中心 A。有关更多细节和示例,请参阅 不同产品的成本中心分配。
2. 在 UI 中创建成本中心
现在请使用用户界面(UI)创建您的第一个成本中心,以熟悉成本中心的工作方式。请选择您已识别的成本中心之一作为示例——最好从一个小的财务实体开始。
- 转到您的企业。例如,在 GitHub.com 上的 企业 页面。
- 在页面顶部,点击 计费和许可证。
- 点击 成本中心。
- 在右上角点击 新建成本中心。
- 在 “名称” 文本框中,输入您想要追踪成本的财务实体名称。
- 如果该财务实体拥有单独的 Azure 订阅,可将 Azure 订阅添加到成本中心,以直接向其计费。系统会对凭据进行 Azure 验证,确保关联的 Azure ID 可用。
- 在 资源 下,选择要归入此成本中心的用户、组织和仓库。
- 点击 创建成本中心。
您的新成本中心已激活,使用情况会立即归属该成本中心。后续计费报告将包含此成本中心,并在 cost_center_name 列中显示对应条目。您也可以按此成本中心筛选使用情况图表。
3. 设置预算以控制成本
创建成本中心后即可对不同财务实体的费用进行单独追踪。若要真正控制成本,需要为成本中心设置预算。
了解预算
预算让您能够控制支出。每个预算
- 适用于单一组织、仓库、成本中心或整个企业
- 控制单个付费产品、SKU 或 SKU 组合的月度使用量
- 可配置为在达到预算上限后停止使用,或仅在达到上限时发送警报
- 在预算接近上限时,可向账户所有者、计费管理员以及指定用户发送警报
计算成本中心预算
如果您的内部财务计划为该成本中心分配了单月 GitHub 预算,则需要在团队使用的各产品之间进行分配。
- 计算固定许可证费用:统计团队已使用的 GitHub Enterprise、GitHub Copilot、GitHub Secret Protection 和 GitHub Code Security 等许可证费用。
- 计算可变预算:用内部预算减去许可证费用,剩余金额即为除计划内包含的使用之外的基于使用量的产品预算。
为成本中心创建预算
为每个您想控制费用的产品、SKU 或 SKU 组合创建一个预算。
-
在 “计费和许可证” 选项卡,点击 预算和警报 以查看已有预算。
-
点击 新建预算 打开 “新建月度预算” 页面。
-
在 “预算类型” 中选择 产品级预算、SKU 级预算 或 打包高级请求预算。
- 若要在产品层面限制支出,在 “产品级预算” 中从下拉列表选择产品(例如 Codespaces)。
- 若要在 SKU 层面限制支出,在 “SKU 级预算” 中选择产品并指定 SKU(例如 Copilot 与 Copilot Premium Request)。
- 若要限制所有高级请求的支出,使用 “打包高级请求预算”。
-
点击 下一步:配置预算,在 “预算范围” 中将支出范围设置为您之前创建的成本中心。
-
在 “预算” 栏填写预算金额。若希望在达到预算上限后立即停止使用并阻止进一步支出,请勾选 达到预算上限时停止使用(许可证类产品不支持此选项)。
-
若要在使用量达到预算目标的 75%、90% 和 100% 时收到提醒,请在 “警报” 下勾选 接收预算阈值警报。账户所有者、计费管理员以及您指定的收件人将通过电子邮件收到提醒,您可以随时取消订阅。
在 “警报收件人” 中可选择额外的收件人。
-
点击 创建预算。
检查现有预算是否冲突
创建成本中心预算后,请检查企业范围内的已有预算,确保它们不会与您的新成本中心预算冲突或被覆盖。
前往 “预算和警报” 页面。您会看到两组预算列表
- 企业预算:适用于整个企业账户的限制
- 其他预算:针对特定仓库、组织或成本中心的限制
检查企业预算
审查是否有企业预算同样适用于您新成本中心预算所覆盖的产品或 SKU。如果企业预算额度过低,可能在成本中心预算未用完前就阻止使用。考虑删除或调整冲突的企业预算。
查看成本中心预算
在 “其他预算” 列表中筛选范围为 成本中心。您应能看到新成本中心以及您创建的每个预算对应的一行。起初使用量几乎为零,但几天后随着用户和仓库超出计划配额使用产品,费用会开始累积。
4. 使用 REST API 创建成本中心
在熟悉了 UI 创建成本中心的流程后,您可以通过 REST API 了解如何以编程方式创建成本中心。掌握 API 能帮助您评估自动化是否对组织有价值。
本节演示使用 GitHub CLI 管理成本中心的关键 REST API 端点。有关安装 GitHub CLI 与身份验证以访问这些端点的详细信息,请参阅 GitHub REST API 入门指南。
注意
下面的示例使用 GitHub CLI,您也可以将这些命令改写为使用 curl 或任何支持 REST API 调用的 HTTP 客户端。
列出所有现有成本中心
首先检索企业中所有成本中心,以确认已有的资源并确保您已正确认证,可管理企业计费。
在终端运行以下命令,将 ENTERPRISE 替换为您企业的 slug。
gh api \ -H "Accept: application/vnd.github+json" \ -H "X-GitHub-Api-Version: 2022-11-28" \ /enterprises/ENTERPRISE/settings/billing/cost-centers
gh api \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/enterprises/ENTERPRISE/settings/billing/cost-centers
响应中会包含企业中创建的所有成本中心,包括本教程前面创建的成本中心。示例中,企业拥有一个名为 “Octocenter” 的成本中心,其中分配了一个组织和两名用户。
{
"costCenters": [
{
"id": "33635e2c-edc0-40b8-abea-261839ff73c1",
"name": "Octocenter",
"state": "active",
"resources": [
{
"type": "User",
"name": "monalisa"
},
{
"type": "Org",
"name": "doctocat-org"
},
{
"type": "User",
"name": "doctocat"
}
]
}
]
}
创建新成本中心
通过提供名称来创建新成本中心。系统会返回唯一标识符,以供后续管理该成本中心使用。
在终端运行以下命令,将 ENTERPRISE 与 NAME 替换为相应的值。
gh api \ --method POST \ -H "Accept: application/vnd.github+json" \ -H "X-GitHub-Api-Version: 2022-11-28" \ /enterprises/ENTERPRISE/settings/billing/cost-centers \ -f 'name=NAME'
gh api \
--method POST \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/enterprises/ENTERPRISE/settings/billing/cost-centers \
-f 'name=NAME'
响应中包含新成本中心的标识符。以后对该成本中心的所有操作都需要使用此 id。
{
"id": "3312fdf2-5950-4f64-913d-e734124059c9",
"name": "NAME",
"state": "active",
"resources": []
}
向成本中心添加资源
为成本中心分配用户、组织和仓库。示例展示了如何一次性添加多个用户和一个组织。
在终端运行以下命令,将 COST_CENTER_ID 替换为上一步返回的标识符,同时将 ENTERPRISE、NAME、ORG 替换为相应的值。
gh api \
--method POST \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/enterprises/ENTERPRISE/settings/billing/cost-centers/COST_CENTER_ID/resource \
--input - <<< '{
"users": [
"NAME-1",
"NAME-2"
],
"organizations": [
"ORG-1"
]
}'
gh api \
--method POST \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/enterprises/ENTERPRISE/settings/billing/cost-centers/COST_CENTER_ID/resource \
--input - <<< '{
"users": [
"NAME-1",
"NAME-2"
],
"organizations": [
"ORG-1"
]
}'
响应确认资源已成功添加。如果某些资源之前已分配给其他成本中心,它们会出现在 reassigned_resources 数组中。
{
"message": "Resources successfully added to the cost center.",
"reassigned_resources": [
{
"resource_type": "User",
"name": "monalisa",
"previous_cost_center": "Octocenter"
}
]
}
如果接口返回 Problems parsing JSON,请使用 JSON 校验工具检查 --input 选项中的数据是否有效。
5. 使用 REST API 设置预算
您可以以编程方式创建预算,为已创建的成本中心施加支出控制。这在大规模管理基于使用量的费用(如高级请求)时尤为有用。
为高级请求创建预算
本示例演示如何为 Copilot 高级请求创建 SKU 级预算,并将其关联到新成本中心,从而仅对该成本中心的资源的高级请求使用设置支出上限。
在终端运行以下命令,将 ENTERPRISE、COST_CENTER_ID、USERNAME 与 1000.0 替换为实际值。
gh api \
--method POST \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/enterprises/ENTERPRISE/settings/billing/budgets \
-f budget_type='SkuPricing' \
-f budget_product_sku='copilot_premium_request' \
-f budget_scope='cost_center' \
-f budget_entity_name='COST_CENTER_ID' \
-F budget_amount=1000.0 \
-F prevent_further_usage=true \
-f budget_alerting='{"will_alert":true,"alert_recipients":["USERNAME"]}'
gh api \
--method POST \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/enterprises/ENTERPRISE/settings/billing/budgets \
-f budget_type='SkuPricing' \
-f budget_product_sku='copilot_premium_request' \
-f budget_scope='cost_center' \
-f budget_entity_name='COST_CENTER_ID' \
-F budget_amount=1000.0 \
-F prevent_further_usage=true \
-f budget_alerting='{"will_alert":true,"alert_recipients":["USERNAME"]}'
响应确认预算已经创建并返回其配置。请注意,该预算同时将 prevent_further_usage 与 will_alert 均设为 true。当预算达到 1000 美元时,octocat@github.com 将收到警报,且成本中心资源的使用将被阻止。
{
"id": "budget-uuid-here",
"budget_type": "SkuPricing",
"budget_product_sku": "copilot_premium_request",
"budget_scope": "cost_center",
"budget_entity_name": "3312fdf2-5950-4f64-913d-e734124059c9",
"budget_amount": 1000.0,
"prevent_further_usage": true,
"budget_alerting": {
"will_alert": true,
"alert_recipients": [
"octocat"
]
}
}
提示
您可以为同一成本中心创建多个预算,以独立控制不同产品或 SKU 的支出。例如,可为 Copilot 高级请求、GitHub Actions 计算以及 Codespaces 使用分别设定预算。参阅 GitHub 产品和 SKU 名称。
6. 决定是否自动化
本教程展示了两种创建成本中心的方式:使用用户界面进行手动管理,或使用 REST API 进行编程管理。了解两者有助于您决定哪种方式最适合您的组织。
用户界面 适用于以下场景:
- 设置首批成本中心
- 对已有成本中心进行偶尔更新
- 希望看到可视化的变更确认
- 需要管理的成本中心数量有限
REST API 适用于以下场景:
- 需要定期创建或更新大量成本中心
- 需要将成本中心管理与现有财务系统集成,或从外部数据源生成配置
- 需要使成本中心与组织结构(如团队成员或部门层级)保持一致
- 需要在用户角色或团队变动时自动维护成本中心分配
自动化选项
如果您决定自动化对组织有帮助,本教程中的 REST API 示例为构建自定义脚本提供了基础。有关其他端点的详细信息,请参阅 计费相关的 REST API 端点。
若希望基于团队成员关系自动化成本中心,或构建两层模型以控制高级请求费用,可参考 GitHub 成本中心自动化,其中提供了使用 GitHub Actions 工作流的完整实现,您可以根据需要进行调整。
后续步骤
想了解可用于自动化使用量和成本报告的端点,请查看 使用 REST API 自动化使用量报告。
如果您希望阻止对某些付费产品的所有访问,可通过企业策略禁用该功能。请参阅 企业策略。