导入
部署
学习并实践 GitHub API 中部署功能的使用。
概述
部署 是一个请求,用于将资源从一个环境迁移到另一个环境并使其生效。这些请求可以针对任意分支、标签或ID。部署通过在不同部署之间建立松散耦合的关系,减少了对各种应用类型实现细节的担忧。
...
外部服务可以为部署标记不同的部署状态。以下是这些状态类型:
errorfailurependingin_progressqueuedsuccess
我们可以选择性地添加 description 和 log_url 以提供更清晰的信息。部署及其状态由 GitHub 发送到第三方,第三方根据进度更新其状态,当第三方接收到部署后,会将其部署到我们的服务器。
创建部署
在合并或拉取分支之前,建议先进行部署并验证。部署可以在以下三种环境中进行:
productionstagingqa
默认环境设置为 production。
下表展示了创建部署时请求体中的一些重要参数:
创建部署的输出请求体参数
| 名称 | 类型 | 出现位置 | 描述 |
|---|---|---|---|
| ref | string | 请求体 | 需要部署的引用,可以是 SHA、分支或标签。 |
| task | string | 请求体 | 需要执行的任务,可以是 deploy 或 deploy:migrations。 |
| auto_merge | 布尔值 | 请求体 | 如果请求的引用落后于默认分支,则自动合并到默认分支。 |
| required_contexts | 字符串数组 | 请求体 | 用于验证上下文是否符合提交状态检查。可传入空数组以完全跳过检查。 |
| payload | object 或 string | 请求体 | 以 JSON 格式表示,包含关于部署的额外信息。 |
| environment | string | 请求体 | 部署环境,可以是 production、staging 或 qa。 |
| description | string 或 null | 请求体 | 部署的描述信息。 |
| transient_environment | boolean | 请求体 | 如果该环境专属于此次部署、将来会不再使用,则为 true。 |
| production_environment | boolean | 请求体 | 当环境为生产环境时为 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('发生错误。')