导入
部署
学习并实践 GitHub API 中部署功能的使用。
概述
部署 是将资源从一个开发环境部署到另一个环境以使其生效的请求。这些请求可以针对任意分支、标签或提交 ID。部署通过在不同部署之间建立松散耦合的关系,减少了对各种应用类型实现细节的担忧。
...
外部服务(如 GitLab、Redmine 等)可以为部署标记不同的状态。以下是支持的状态类型:
- `error`
- `failure`
- `pending`
- `in_progress`
- `queued`
- `success`
可选地,我们可以为部署状态添加 description 和 log_url 以增强清晰度。部署及其状态由 GitHub 发送到第三方系统,第三方根据进度更新其状态,当接收到通知后,部署将被推送到我们的服务器。
创建部署
在合并或拉取分支之前,推荐先进行部署并验证。部署可以在以下三种环境中执行:
productionstagingqa
默认环境为 production。
下表列出了创建部署时的重要请求参数:
请求参数
| 参数 | 类型 | 描述 |
|---|---|---|
| ref | 字符串 | 需要部署的引用,可以是 SHA、分支名或标签名。 |
| task | 字符串 | 需要执行的任务,可以是 deploy 或 deploy:migrations。 |
| auto_merge | 布尔值 | 如果请求的引用落后于默认分支,则自动合并到默认分支。 |
| required_contexts | 字符串数组 | 用于验证提交状态检查的上下文。传入空数组可跳过检查。 |
| payload | 对象或字符串 | 以 JSON 格式包含关于部署的额外信息。 |
| environment | 字符串 | 部署的目标环境,可以是 production、staging 或 qa。 |
| description | 字符串或 Null | 部署的描述信息。 |
| transient_environment | 布尔值 | 如果该部署未来不再使用,则设为 true。 |
| production_environment | 布尔值 | 当环境为生产环境时设为 true。 |
1const endpointUrl = 'https://api.github.com/repos/{{USERNAME}}/{{REPOSITORY}}/deployments'; 2 3const headers = { 4 Authorization: 'token {{ACCESS_TOKEN}}', 5 Accept: 'application/vnd.github.v3+json', 6}; 7 8const body = JSON.stringify({ 9 ref: '<ref>', 10}); 11 12const options = { 13 method: 'POST', 14 headers, 15 body, 16}; 17 18async function CreateDeployment() { 19 try { 20 const response = await fetch(endpointUrl, options); 21 printResponse(response); 22 } catch (error) { 23 printErrors(error); 24 } 25}; 26 27CreateDeployment();
上述代码成功执行后,将返回响应码 201。
简要说明上述代码:
- 第 1 行: 定义了 API 端点的 URL。
- 第 8–10 行: 定义了请求体中必需的参数。
- 第 18–25 行: 定义了一个异步函数来调用指定的端点。
- 第 21 行: 请求成功时,通过调用
printResponse函数输出 API 响应。 - 第 23 行: 请求失败时,通过调用
printErrors函数输出错误信息。
- 第 21 行: 请求成功时,通过调用
- 第 27 行: 调用异步函数。
请求参数
| 参数 | 类型 | 描述 |
|---|---|---|
| owner | 字符串 | 仓库所有者的用户名 |
| repo | 字符串 | 仓库名称 |
| deployment_id | 整数 | 用于从仓库中获取特定部署记录的 ID |
1const endpointUrl = 'https://api.github.com/repos/{{USERNAME}}/{{REPOSITORY}}/deployments/{{DEPLOYMENT_ID}}'; 2 3const headers = { 4 Authorization: 'token {{ACCESS_TOKEN}}', 5 Accept: 'application/vnd.github.v3+json', 6}; 7 8const options = { 9 method: 'GET', 10 headers, 11}; 12 13async function GetDeployment() { 14 try { 15 const response = await fetch(endpointUrl, options); 16 printResponse(response); 17 } catch (error) { 18 printErrors(error); 19 } 20}; 21 22GetDeployment();
上述代码成功执行后,将返回响应码 200。
简要说明上述代码:
- 第 1 行: 定义了端点的 URL。
- 第 13–20 行: 定义了一个异步函数来调用指定的端点。
- 第 16 行: 请求成功时,通过调用
printResponse函数输出响应。 - 第 18 行: 请求失败时,通过调用
printErrors函数输出错误。
- 第 16 行: 请求成功时,通过调用
- 第 22 行: 调用异步函数。
列出部署
尝试列出仓库中的所有部署,并确认我们创建的部署是否存在于其中。
请求参数
| 参数 | 类型 | 描述 |
|---|---|---|
| owner | 字符串 | 仓库所有者的用户名 |
| repo | 字符串 | 仓库名称 |
1const endpointUrl = 'https://api.github.com/repos/{{USERNAME}}/{{REPOSITORY}}/deployments'; 2 3const headers = { 4 Authorization: 'token {{ACCESS_TOKEN}}', 5 Accept: 'application/vnd.github.v3+json', 6}; 7 8const options = { 9 method: 'GET', 10 headers, 11}; 12 13async function ListDeployments() { 14 try { 15 const response = await fetch(endpointUrl, options); 16 printResponse(response); 17 } catch (error) { 18 printErrors(error); 19 } 20}; 21 22ListDeployments();
上述代码成功执行后,将返回响应码 200。
简要说明上述代码:
- 第 1 行: 定义了端点的 URL。
- 第 13–20 行: 定义了一个异步函数来调用指定的端点。
- 第 16 行: 请求成功时,通过调用
printResponse函数输出响应。 - 第 18 行: 请求失败时,通过调用
printErrors函数输出错误。
- 第 16 行: 请求成功时,通过调用
- 第 22 行: 调用异步函数。
删除部署
调用删除部署端点时,系统会检查仓库中是否存在一个或多个部署。如果只有一个部署,则直接删除;如果有多个部署,则只能删除非活动状态的部署。
请求参数
| 参数 | 类型 | 描述 |
|---|---|---|
| owner | 字符串 | 仓库所有者的用户名 |
| repo | 字符串 | 仓库名称 |
| deployment_id | 整数 | 用于从仓库中获取特定部署记录的 ID |
以下代码实现了该功能:
1const endpointUrl = 'https://api.github.com/repos/{{USERNAME}}/{{REPOSITORY}}/deployments/{{DEPLOYMENT_ID}}'; 2 3const headers = { 4 Authorization: 'token {{ACCESS_TOKEN}}', 5 Accept: 'application/vnd.github.v3+json', 6}; 7 8const options = { 9 method: 'DELETE', 10 headers, 11}; 12 13async function DeletetDeployment() { 14 try { 15 const response = await fetch(endpointUrl, options); 16 printResponse(response); 17 } catch (error) { 18 printErrors(error); 19 } 20}; 21 22DeletetDeployment();
上述代码成功执行后,将返回响应码 204。
简要说明上述代码:
- 第 1 行: 定义了端点的 URL。
- 第 13–20 行: 定义了一个异步函数来调用指定的端点。
- 第 16 行: 请求成功时,通过调用
printResponse函数输出响应。 - 第 18 行: 请求失败时,通过调用
printErrors函数输出错误。
- 第 16 行: 请求成功时,通过调用
- 第 22 行: 调用异步函数。