Logo
Section 1 / 2

部署

学习并实践 GitHub API 中部署功能的使用。

导入

部署

学习并实践 GitHub API 中部署功能的使用。

概述

部署 是一个请求,用于将资源从一个环境迁移到另一个环境并使其生效。这些请求可以针对任意分支、标签或ID。部署通过在不同部署之间建立松散耦合的关系,减少了对各种应用类型实现细节的担忧。

...

外部服务可以为部署标记不同的部署状态。以下是这些状态类型:

  • error
  • failure
  • pending
  • in_progress
  • queued
  • success

我们可以选择性地添加 description 和 log_url 以提供更清晰的信息。部署及其状态由 GitHub 发送到第三方,第三方根据进度更新其状态,当第三方接收到部署后,会将其部署到我们的服务器。

创建部署

在合并或拉取分支之前,建议先进行部署并验证。部署可以在以下三种环境中进行:

  1. production
  2. staging
  3. qa

默认环境设置为 production。

下表展示了创建部署时请求体中的一些重要参数:

创建部署的输出请求体参数

名称类型出现位置描述
refstring请求体需要部署的引用,可以是 SHA、分支或标签。
taskstring请求体需要执行的任务,可以是 deploy 或 deploy:migrations。
auto_merge布尔值请求体如果请求的引用落后于默认分支,则自动合并到默认分支。
required_contexts字符串数组请求体用于验证上下文是否符合提交状态检查。可传入空数组以完全跳过检查。
payloadobject 或 string请求体以 JSON 格式表示,包含关于部署的额外信息。
environmentstring请求体部署环境,可以是 production、staging 或 qa。
descriptionstring 或 null请求体部署的描述信息。
transient_environmentboolean请求体如果该环境专属于此次部署、将来会不再使用,则为 true。
production_environmentboolean请求体当环境为生产环境时为 true。
1headers = { 2 'Authorization': 'token {{ACCESS_TOKEN}}', 3 'Accept': 'application/vnd.github.v3+json' 4} 5 6data = json.dumps({ 7 'ref': '<ref>' 8}) 9 10url = 'https://api.github.com/repos/{{USERNAME}}/{{REPOSITORY}}/deployments' 11 12response = requests.post(url, headers=headers, data=data) 13print(json.dumps(response.json(), indent=4))
1headers = { 2 'Authorization': 'token {{ACCESS_TOKEN}}', 3 'Accept': 'application/vnd.github.v3+json' 4} 5 6url = 'https://api.github.com/repos/{{USERNAME}}/{{REPOSITORY}}/deployments/{{DEPLOYMENT_ID}}' 7 8response = requests.get(url, headers=headers) 9print(json.dumps(response.json(), indent=4))

列出部署

尝试列出仓库的所有部署,并确认我们创建的部署是否存在。

1headers = { 2 'Authorization': 'token {{ACCESS_TOKEN}}', 3 'Accept': 'application/vnd.github.v3+json' 4} 5 6url = 'https://api.github.com/repos/{{USERNAME}}/{{REPOSITORY}}/deployments' 7 8response = requests.get(url, headers=headers) 9print(json.dumps(response.json(), indent=4))

删除部署

调用删除部署 API 并传入部署 ID 后,系统会检查仓库中是否存在一个或多个部署。如果只有一个部署,则直接删除;如果有多个部署,则仅删除非活跃的部署。

以下代码实现了该功能:

1headers = { 2 'Authorization': 'token {{ACCESS_TOKEN}}', 3 'Accept': 'application/vnd.github.v3+json' 4} 5 6url = 'https://api.github.com/repos/{{USERNAME}}/{{REPOSITORY}}/deployments/{{DEPLOYMENT_ID}}' 7 8response = requests.delete(url, headers=headers) 9 10if response.status_code == 204: 11 print('部署已成功删除。') 12else: 13 print('发生错误。')

协作

发布