部署是对部署特定引用(分支、SHA、标签)的请求。GitHub 调度外部服务可以监听并采取行动的 deployment
事件,当创建新部署时。部署使开发人员和组织能够围绕部署构建松散耦合的工具,而无需担心交付不同类型应用程序(例如,Web、本机)的实现细节。
部署状态允许外部服务使用 error
、failure
、pending
、in_progress
、queued
或 success
状态标记部署,监听 deployment_status
事件 的系统可以消耗这些状态。
部署状态还可以包括可选的 description
和 log_url
,强烈建议使用它们,因为它们使部署状态更有用。log_url
是部署输出的完整 URL,description
是部署发生情况的高度概括。
当创建新的部署和部署状态时,GitHub 会派发 deployment
和 deployment_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_repo
和 repo
范围也授予对代码的访问权限。
当您将部署的状态设置为 success
时,同一存储库中具有相同环境名称的所有先前非瞬态、非生产环境部署将变为 inactive
。为避免这种情况,您可以在创建部署状态时将 auto_inactive
设置为 false
。
您可以通过将瞬态环境的 state
设置为 inactive
来传达该环境已不存在。将 state
设置为 inactive
会在 GitHub 中显示部署为 destroyed
,并取消对它的访问。