跳至主要内容
REST API 现在已版本化。 有关更多信息,请参阅“关于 API 版本控制”。

部署的 REST API 端点

使用 REST API 创建和删除部署和部署环境。

关于部署

部署是部署特定 ref(分支、SHA、标签)的请求。当创建新的部署时,GitHub 会分派一个 deployment 事件,外部服务可以侦听并对其进行操作。部署使开发人员和组织能够围绕部署构建松耦合的工具,而无需担心交付不同类型的应用程序(例如,Web、原生)的实现细节。

部署状态允许外部服务使用errorfailurependingin_progressqueuedsuccess 状态标记部署,这些状态可以被侦听 deployment_status 事件 的系统使用。

部署状态还可以包含可选的 descriptionlog_url,强烈建议使用它们,因为它们使部署状态更有用。log_url 是部署输出的完整 URL,description 是部署发生情况的高级摘要。

创建新的部署和部署状态时,GitHub 会分派 deploymentdeployment_status 事件。这些事件允许第三方集成接收和响应部署请求,并在部署取得进展时更新部署的状态。

以下是这些交互如何工作的简单顺序图。

+---------+             +--------+            +-----------+        +-------------+
| Tooling |             | GitHub |            | 3rd Party |        | Your Server |
+---------+             +--------+            +-----------+        +-------------+
     |                      |                       |                     |
     |  Create Deployment   |                       |                     |
     |--------------------->|                       |                     |
     |                      |                       |                     |
     |  Deployment Created  |                       |                     |
     |<---------------------|                       |                     |
     |                      |                       |                     |
     |                      |   Deployment Event    |                     |
     |                      |---------------------->|                     |
     |                      |                       |     SSH+Deploys     |
     |                      |                       |-------------------->|
     |                      |                       |                     |
     |                      |   Deployment Status   |                     |
     |                      |<----------------------|                     |
     |                      |                       |                     |
     |                      |                       |   Deploy Completed  |
     |                      |                       |<--------------------|
     |                      |                       |                     |
     |                      |   Deployment Status   |                     |
     |                      |<----------------------|                     |
     |                      |                       |                     |

请记住,GitHub 永远不会实际访问您的服务器。由您的第三方集成与部署事件交互。多个系统可以侦听部署事件,并且每个系统都需要自行决定它们是否负责将代码推送到您的服务器、构建本地代码等。

请注意,repo_deployment OAuth 范围 授予对部署和部署状态的目标访问权限,**而无需**授予对代码库代码的访问权限,而 public_reporepo 范围也授予对代码的权限。

非活动部署

当您将部署的状态设置为 success 时,则同一代码库中具有相同环境名称的所有先前的非瞬态、非生产环境部署都将变为 inactive。为避免这种情况,您可以在创建部署状态时将 auto_inactive 设置为 false

您可以通过将瞬态环境的 state 设置为 inactive 来传达该环境不再存在。将 state 设置为 inactive 会在 GitHub 中将部署显示为 destroyed 并删除对其的访问权限。

列出部署

可以通过查询参数进行简单的部署过滤

“列出部署”的细粒度访问令牌

此端点适用于以下细粒度令牌类型:

细粒度令牌必须具有以下权限集

  • “部署”代码库权限(读取)

如果仅请求公共资源,则无需身份验证或上述权限即可使用此端点。

“列出部署”的参数

标头
名称、类型、描述
accept 字符串

建议设置为 application/vnd.github+json

路径参数
名称、类型、描述
owner 字符串 必需

代码库的账户所有者。名称不区分大小写。

repo 字符串 必需

代码库的名称,不含 .git 扩展名。名称不区分大小写。

查询参数
名称、类型、描述
sha 字符串

创建时记录的 SHA。

默认值: none

ref 字符串

ref 的名称。这可以是分支、标签或 SHA。

默认值: none

task 字符串

部署的任务名称(例如,deploydeploy:migrations)。

默认值: none

environment 字符串或 null

已部署到的环境的名称(例如,stagingproduction)。

默认值: none

per_page 整数

每页的结果数(最大 100)。有关更多信息,请参阅“在 REST API 中使用分页”。

默认值: 30

page 整数

要提取的结果的页码。有关更多信息,请参阅“在 REST API 中使用分页”。

默认值: 1

“列出部署”的 HTTP 响应状态代码

状态代码描述
200

OK

“列出部署”的代码示例

请求示例

get/repos/{owner}/{repo}/deployments
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/deployments

响应

状态:200
[ { "url": "https://api.github.com/repos/octocat/example/deployments/1", "id": 1, "node_id": "MDEwOkRlcGxveW1lbnQx", "sha": "a84d88e7554fc1fa21bcbc4efae3c782a70d2b9d", "ref": "topic-branch", "task": "deploy", "payload": {}, "original_environment": "staging", "environment": "production", "description": "Deploy request from hubot", "creator": { "login": "octocat", "id": 1, "node_id": "MDQ6VXNlcjE=", "avatar_url": "https://github.com/images/error/octocat_happy.gif", "gravatar_id": "", "url": "https://api.github.com/users/octocat", "html_url": "https://github.com/octocat", "followers_url": "https://api.github.com/users/octocat/followers", "following_url": "https://api.github.com/users/octocat/following{/other_user}", "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", "organizations_url": "https://api.github.com/users/octocat/orgs", "repos_url": "https://api.github.com/users/octocat/repos", "events_url": "https://api.github.com/users/octocat/events{/privacy}", "received_events_url": "https://api.github.com/users/octocat/received_events", "type": "User", "site_admin": false }, "created_at": "2012-07-20T01:19:13Z", "updated_at": "2012-07-20T01:19:13Z", "statuses_url": "https://api.github.com/repos/octocat/example/deployments/1/statuses", "repository_url": "https://api.github.com/repos/octocat/example", "transient_environment": false, "production_environment": true } ]

创建部署

部署提供了一些可配置的参数,并带有一些默认值。

ref 参数可以是任何命名分支、标签或 SHA。在 GitHub 上,我们通常会部署分支并在合并拉取请求之前对其进行验证。

environment 参数允许将部署发布到不同的运行时环境。团队通常有多个环境来验证其应用程序,例如 productionstagingqa。此参数使跟踪哪些环境请求了部署变得更容易。默认环境为 production

auto_merge 参数用于确保请求的 ref 不落后于存储库的默认分支。如果 ref 确实落后于存储库的默认分支,我们将尝试为您合并它。如果合并成功,API 将返回一个成功的合并提交。如果合并冲突阻止合并成功,API 将返回失败响应。

默认情况下,每个提交上下文的 提交状态 必须处于 success 状态。required_contexts 参数允许您指定必须为 success 的上下文子集,或指定尚未提交的上下文。您不需要使用提交状态来部署。如果您不需要任何上下文或创建任何提交状态,则部署将始终成功。

payload 参数可用于部署系统可能需要的任何额外信息。它是一个 JSON 文本字段,将在分派部署事件时传递。

task 参数由部署系统用于允许不同的执行路径。在 Web 世界中,这可能是 deploy:migrations 以在系统上运行模式更改。在编译的世界中,这可能是启用调试功能编译应用程序的标志。

合并分支响应

当 GitHub 自动将基分支合并到主题分支而不是创建部署时,您将看到此响应。此自动合并发生在

  • 存储库中启用了自动合并选项
  • 主题分支不包含基分支上的最新更改,在响应示例中为 master
  • 没有合并冲突

如果基分支中没有新的提交,则创建部署的新请求应该会给出成功的响应。

合并冲突响应

当启用 auto_merge 选项并且由于合并冲突无法将默认分支(在本例中为 master)合并到正在部署的分支(在本例中为 topic-branch)时,会发生此错误。

提交状态检查失败

required_contexts 参数指示一个或多个上下文需要具有 success 状态才能部署提交,但一个或多个必需的上下文的状态不为 success 时,会发生此错误。

OAuth 应用程序令牌和个人访问令牌(经典)需要 reporepo_deployment 范围才能使用此端点。

用于“创建部署”的细粒度访问令牌

此端点适用于以下细粒度令牌类型:

细粒度令牌必须具有以下权限集

  • “部署”存储库权限(写入)

“创建部署”的参数

标头
名称、类型、描述
accept 字符串

建议设置为 application/vnd.github+json

路径参数
名称、类型、描述
owner 字符串 必需

代码库的账户所有者。名称不区分大小写。

repo 字符串 必需

代码库的名称,不含 .git 扩展名。名称不区分大小写。

主体参数
名称、类型、描述
ref 字符串 必需

要部署的 ref。这可以是分支、标签或 SHA。

task 字符串

指定要执行的任务(例如,deploydeploy:migrations)。

默认值: deploy

auto_merge 布尔值

如果请求的 ref 落后于默认分支,则尝试自动将默认分支合并到请求的 ref 中。

默认值: true

required_contexts 字符串数组

要针对提交状态检查验证的 状态 上下文。如果您省略此参数,GitHub 会在创建部署之前验证所有唯一上下文。要完全绕过检查,请传递一个空数组。默认为所有唯一上下文。

payload 对象或字符串

包含有关部署的额外信息的 JSON 有效负载。

environment 字符串

目标部署环境的名称(例如,productionstagingqa)。

默认值: production

description 字符串或 null

部署的简短描述。

默认值: ""

transient_environment 布尔值

指定给定环境是否特定于部署,并且将来某个时刻将不再存在。默认值:false

默认值: false

production_environment 布尔值

指定给定环境是否为最终用户直接交互的环境。默认值:当 environmentproduction 时为 true,否则为 false

“创建部署”的 HTTP 响应状态代码

状态代码描述
201

已创建

202

合并分支响应

409

当存在合并冲突或提交的状态检查失败时发生冲突

422

验证失败,或端点已被垃圾邮件发送。

“创建部署”的代码示例

请求示例

post/repos/{owner}/{repo}/deployments
curl -L \ -X POST \ -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/deployments \ -d '{"ref":"topic-branch","payload":"{ \"deploy\": \"migrate\" }","description":"Deploy request from hubot"}'

简单示例

状态:201
{ "url": "https://api.github.com/repos/octocat/example/deployments/1", "id": 1, "node_id": "MDEwOkRlcGxveW1lbnQx", "sha": "a84d88e7554fc1fa21bcbc4efae3c782a70d2b9d", "ref": "topic-branch", "task": "deploy", "payload": {}, "original_environment": "staging", "environment": "production", "description": "Deploy request from hubot", "creator": { "login": "octocat", "id": 1, "node_id": "MDQ6VXNlcjE=", "avatar_url": "https://github.com/images/error/octocat_happy.gif", "gravatar_id": "", "url": "https://api.github.com/users/octocat", "html_url": "https://github.com/octocat", "followers_url": "https://api.github.com/users/octocat/followers", "following_url": "https://api.github.com/users/octocat/following{/other_user}", "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", "organizations_url": "https://api.github.com/users/octocat/orgs", "repos_url": "https://api.github.com/users/octocat/repos", "events_url": "https://api.github.com/users/octocat/events{/privacy}", "received_events_url": "https://api.github.com/users/octocat/received_events", "type": "User", "site_admin": false }, "created_at": "2012-07-20T01:19:13Z", "updated_at": "2012-07-20T01:19:13Z", "statuses_url": "https://api.github.com/repos/octocat/example/deployments/1/statuses", "repository_url": "https://api.github.com/repos/octocat/example", "transient_environment": false, "production_environment": true }

获取部署

用于“获取部署”的细粒度访问令牌

此端点适用于以下细粒度令牌类型:

细粒度令牌必须具有以下权限集

  • “部署”代码库权限(读取)

如果仅请求公共资源,则无需身份验证或上述权限即可使用此端点。

“获取部署”的参数

标头
名称、类型、描述
accept 字符串

建议设置为 application/vnd.github+json

路径参数
名称、类型、描述
owner 字符串 必需

代码库的账户所有者。名称不区分大小写。

repo 字符串 必需

代码库的名称,不含 .git 扩展名。名称不区分大小写。

deployment_id 整数 必需

deployment_id 参数

“获取部署”的 HTTP 响应状态代码

状态代码描述
200

OK

404

资源未找到

“获取部署”的代码示例

请求示例

get/repos/{owner}/{repo}/deployments/{deployment_id}
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/deployments/DEPLOYMENT_ID

响应

状态:200
{ "url": "https://api.github.com/repos/octocat/example/deployments/1", "id": 1, "node_id": "MDEwOkRlcGxveW1lbnQx", "sha": "a84d88e7554fc1fa21bcbc4efae3c782a70d2b9d", "ref": "topic-branch", "task": "deploy", "payload": {}, "original_environment": "staging", "environment": "production", "description": "Deploy request from hubot", "creator": { "login": "octocat", "id": 1, "node_id": "MDQ6VXNlcjE=", "avatar_url": "https://github.com/images/error/octocat_happy.gif", "gravatar_id": "", "url": "https://api.github.com/users/octocat", "html_url": "https://github.com/octocat", "followers_url": "https://api.github.com/users/octocat/followers", "following_url": "https://api.github.com/users/octocat/following{/other_user}", "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", "organizations_url": "https://api.github.com/users/octocat/orgs", "repos_url": "https://api.github.com/users/octocat/repos", "events_url": "https://api.github.com/users/octocat/events{/privacy}", "received_events_url": "https://api.github.com/users/octocat/received_events", "type": "User", "site_admin": false }, "created_at": "2012-07-20T01:19:13Z", "updated_at": "2012-07-20T01:19:13Z", "statuses_url": "https://api.github.com/repos/octocat/example/deployments/1/statuses", "repository_url": "https://api.github.com/repos/octocat/example", "transient_environment": false, "production_environment": true }

删除部署

如果存储库只有一个部署,则无论其状态如何,您都可以删除该部署。如果存储库有多个部署,则您只能删除非活动部署。这确保了具有多个部署的存储库将始终具有活动部署。

要将部署设置为非活动状态,您必须

  • 创建一个新的活动部署,以便系统记录当前状态,然后删除先前活动的部署。
  • 通过添加任何非成功的部署状态将活动部署标记为非活动状态。

有关更多信息,请参阅“创建部署”和“创建部署状态”。

OAuth 应用程序令牌和个人访问令牌(经典)需要 reporepo_deployment 范围才能使用此端点。

用于“删除部署”的细粒度访问令牌

此端点适用于以下细粒度令牌类型:

细粒度令牌必须具有以下权限集

  • “部署”存储库权限(写入)

“删除部署”的参数

标头
名称、类型、描述
accept 字符串

建议设置为 application/vnd.github+json

路径参数
名称、类型、描述
owner 字符串 必需

代码库的账户所有者。名称不区分大小写。

repo 字符串 必需

代码库的名称,不含 .git 扩展名。名称不区分大小写。

deployment_id 整数 必需

deployment_id 参数

“删除部署”的 HTTP 响应状态代码

状态代码描述
204

无内容

404

资源未找到

422

验证失败,或端点已被垃圾邮件发送。

“删除部署”的代码示例

请求示例

delete/repos/{owner}/{repo}/deployments/{deployment_id}
curl -L \ -X DELETE \ -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/deployments/DEPLOYMENT_ID

响应

状态:204