community/contributors/guide/contributor-cheatsheet/README-zh.md

328 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Kubernetes 贡献者备忘单
这是一份参与 Kubernetes 协作时的常用资源清单,包含 Kubernetes 项目中常用的提示、技巧和最佳实践。这个「长话短说」或快速参考包含一些有用的信息,能让您有更好的 GitHub 贡献体验。
**目录**
- [有用的资源](#%E6%9C%89%E7%94%A8%E7%9A%84%E8%B5%84%E6%BA%90)
- [入门](#%E5%85%A5%E9%97%A8)
- [SIG 以及其它小组](#sig-%E4%BB%A5%E5%8F%8A%E5%85%B6%E5%AE%83%E5%B0%8F%E7%BB%84)
- [社区](#%E7%A4%BE%E5%8C%BA)
- [工作流程](#%E5%B7%A5%E4%BD%9C%E6%B5%81%E7%A8%8B)
- [测试](#%E6%B5%8B%E8%AF%95)
- [重要的 Email 地址](#%E9%87%8D%E8%A6%81%E7%9A%84-email-%E5%9C%B0%E5%9D%80)
- [其它有用的链接](#%E5%85%B6%E5%AE%83%E6%9C%89%E7%94%A8%E7%9A%84%E9%93%BE%E6%8E%A5)
- [在 GitHub 上有效沟通](#%E5%9C%A8-github-%E4%B8%8A%E6%9C%89%E6%95%88%E6%B2%9F%E9%80%9A)
- [如何友好对待彼此](#%E5%A6%82%E4%BD%95%E5%8F%8B%E5%A5%BD%E5%AF%B9%E5%BE%85%E5%BD%BC%E6%AD%A4)
- [良好和不良沟通的例子](#%E8%89%AF%E5%A5%BD%E5%92%8C%E4%B8%8D%E8%89%AF%E6%B2%9F%E9%80%9A%E7%9A%84%E4%BE%8B%E5%AD%90)
- [提交贡献](#%E6%8F%90%E4%BA%A4%E8%B4%A1%E7%8C%AE)
- [签署 CLA](#%E7%AD%BE%E7%BD%B2-cla)
- [提交和回应 Issue](#%E6%8F%90%E4%BA%A4%E5%92%8C%E5%9B%9E%E5%BA%94-issue)
- [提交 Issue](#%E6%8F%90%E4%BA%A4-issue)
- [回应 Issue](#%E5%9B%9E%E5%BA%94-issue)
- [提交 Pull Request](#%E6%8F%90%E4%BA%A4-pull-request)
- [创建 Pull Request](#%E5%88%9B%E5%BB%BA-pull-request)
- [PR 描述示例](#pr-%E6%8F%8F%E8%BF%B0%E7%A4%BA%E4%BE%8B)
- [PR 故障排除](#pr-%E6%95%85%E9%9A%9C%E6%8E%92%E9%99%A4)
- [标签](#%E6%A0%87%E7%AD%BE)
- [在本地工作](#%E5%9C%A8%E6%9C%AC%E5%9C%B0%E5%B7%A5%E4%BD%9C)
- [分支策略](#%E5%88%86%E6%94%AF%E7%AD%96%E7%95%A5)
- [添加上游](#%E6%B7%BB%E5%8A%A0%E4%B8%8A%E6%B8%B8)
- [让您的工作保持同步](#%E8%AE%A9%E6%82%A8%E7%9A%84%E5%B7%A5%E4%BD%9C%E4%BF%9D%E6%8C%81%E5%90%8C%E6%AD%A5)
- [压缩提交](#%E5%8E%8B%E7%BC%A9%E6%8F%90%E4%BA%A4)
---
## 有用的资源
### 入门
- [贡献者指南] - 如何开始参与 Kubernetes 协作的指南
- [开发者指南] - 直接向 Kubernetes 项目贡献代码的指南
- [安全和披露信息] - 报告漏洞的指南和安全发布过程
### SIG 以及其它小组
- [主要小组列表][sigs]
### 社区
- [日历] - 查看所有的 Kubernetes 社区事件SIG 或 WG 会议、活动等)
- [kubernetes-dev] - Kubernetes 开发邮件列表
- [Kubernetes 论坛] - Kubernetes 官方论坛
- [Slack 频道] - Kubernetes 官方 Slack
- [Stack Overflow] - Kubernetes 用户提问的地方
- [YouTube 频道] - Kubernetes 社区的官方频道
### 工作流程
- [Gubernator 仪表盘] - 收到和发出的 PR您需要关注它们
- [Prow] - Kubernetes CI/CD 系统
- [Tide] - 管理合并和测试的 Prow 插件 [Tide 仪表盘]
- [Bot 命令] - 用来和 Kubernetes 机器人互动的命令(例如 `/cc`、`/lgtm` 和 `/retest`
- [GitHub 标签] - Kubernetes 整个项目中使用的标签列表
- [Kubernetes 代码搜索], 由 [@dims] 维护
### 测试
- [Prow] - Kubernetes CI/CD 系统
- [Test Grid] - 查看过往的测试以及相关信息
- [Triage 仪表盘] - 把相似的失败聚合在一起以便排除故障
### 重要的 Email 地址
- community@kubernetes.io - 关于社区的问题,给社区小组(贡献者体验 SIG的某人写邮件
- conduct@kubernetes.io - 联系行为守则委员会,私密邮件列表
- steering@kubernetes.io - 给指导委员会写邮件,地址公开,存档公开
- steering-private@kubernetes.io - 如果有敏感问题,给指导委员会的私密地址写邮件
- social@cncf.io - 联系 CNCF 的社交团队;博客、推特以及其它社交平台
### 其它有用的链接
- [开发者统计] - 查看所有 CNCF 项目的开发者统计
---
## 在 GitHub 上有效沟通
### 如何友好对待彼此
第一步,您需要熟悉[行为守则]。
#### 良好和不良沟通的例子
当提交 issue 或寻求帮助时,请礼貌地提出您的请求:
🙂 「当我做 Y 事时X 编译不通过,你们有什么建议吗?」
😞 「X 不起作用!请修好它!」
关闭 PR 时,请清楚和友好地解释为什么它不符合合并的要求:
🙂 「这个功能不能支持 X 使用场景,所以我将关闭这个 PR。在它提议的形式下用工具 Y 实现会比较好。感谢您的工作。」
😞 「为什么这不符合 API 惯例?这应该在其他地方完成!」
---
## 提交贡献
### 签署 CLA
在您提交贡献之前,您必须[签署贡献者许可证协议CLA][cla]。_只有_ 您或者您的公司签署了 CLAKubernetes 项目才能接受您的贡献。
如果您在签署 CLA 时遇到任何问题,请参考 [CLA 故障排除指南]。
### 提交和回应 Issue
GitHub Issue 是追踪 bug 报告、改善请求,或者报告例如失败测试的其它问题的主要途径。它们**不**应该用来发布[用户支持请求]。对于那些问题,请查看[故障排除指南],在[Stack Overflow] 报告,或者在 [Kubernetes 论坛] 跟进。
**参考:**
- [标签]
- [Prow 命令][命令]
#### 提交 Issue
- 尽量使用 issue 模版。使用正确的模版将有助于其它贡献者回应您的 issue。
- 遵循任何在 issue 模版中描述的指示。
- 尽量详细描述您提交的 issue。
- 使用合适的[标签]。如果您不确定,[k8s-ci-robot][prow] 机器人([Kubernetes CI 机器人][prow])将会回复您的 issue 并为其添加需要的标签,让分派更高效。
- 在使用 [`/assign @<username>`][assign] 或 [`/cc @<username>`][cc] 时注意选择。想要您的 issue 得到高效处理,分配更多的人不如使用正确的标签。
#### 回应 Issue
- 在处理 issue 时,添加评论以便让其他人知道,避免重复的工作。
- 如果之后您解决了什么问题,在关闭该 issue 前,先评论以便让其他人知道。
- 添加其它 PR 或 issue 的引用(或者任何可能的资料),例如 _「ref: #1234」_。这对于联系其它地方处理过的相关工作很有帮助。
### 提交 Pull Request
Pull requestsPR是提交代码、文档或其它形式的工作的主要途径这些工作都保存在 git 仓库中。
**参考:**
- [标签]
- [Prow 命令][命令]
- [Pull request 处理]
- [GitHub 工作流程]
#### 创建 Pull Request
- 尽量遵循 pull request 模版的指示。这样对于回应您 PR 的人会有帮助。
- 如果是[琐碎问题修复],例如失效链接、错别字或语法错误,请检查整个文档查找其它可能的错误。不要为了修复同一文档的小问题提交多个 PR。
- 关联任何与您 PR 有关的或者能被解决的 issue。
- 避免在一个提交中引入大量修改。相反地,将您的 PR 分解为多个合理的小提交。这样可以让评审您的 PR 变得更容易。
- 如果您觉得有什么需要更多解释,评论回复您的 PR。
- 有选择地使用 [`/assign @<username>`][assign] 命令,分配过多的评审者并不能让评审过程加快。
- 如果您的 PR 是 _「正在进行中的工作」_,在标题前添加 `[WIP]` 或者使用 [`/hold`][hold] 命令。这样可以防止该 PR 在 `[WIP]` 或 hold 被撤销前被合并。
- 如果您的 PR 没有得到评审,不要关闭后用同样的修改创建新 PR。在评论中使用 `@<github username>` 通知您的评审者。
#### PR 描述示例
```
Ref. #3064 #3097
All files owned by SIG testing were moved from `/devel` to the new folder `/devel/sig-testing`.
/sig contributor-experience
/cc @stakeholder1 @stakeholder2
/kind cleanup
/area developer-guide
/assign @approver1 @approver2 @approver3
```
这个 PR 里包含了:
- **第 1 行** - 提及其它有关的 issue 或 PR#3064 #3097)。
- **第 2 行** - 对该 PR 做了什么事情的一个简短的描述。
- **第 4 行** - 使用 `/sig contributor-experience` [命令]分配 [SIG][sigs]。
- **第 5 行** - 使用 [`/cc`][cc] 命令指定可能对该 issue 或 PR 感兴趣的评审者。
- **第 6 行** - [`/kind cleanup`][kind] 命令将该 issue 或 PR 添加了一个[标签]将它归类为清理代码、流程或者技术债务。
- **第 7 行** - [`/area developer-guide`][kind] 命令将该 issue 或 PR 归类为与开发者指南有关。
- **第 8 行** - [`/assign`][assign] 命令为该 PR 分配了一名批准者。[k8s-ci-robot][prow] 会从 [OWNERS] 文件中的所有者列表中选择,推荐一名批准者。在评审结束后,他(她)将会使用 [`/approve`][approve] 为该 PR 添加标签。
#### PR 故障排除
在您的 PR 提交后,一系列测试将由 Kubernetes CI 平台 [Prow] 运行。如果任何测试失败,[k8s-ci-robot][prow] 将会回复该 PR附上失败测试及其 log 的链接。
向您的 PR push 新的提交将会自动触发测试重新运行。
Kubernetes CI 平台偶尔会出现问题。即便您的贡献通过了所有本地测试,也会因为其它各种原因发生问题。您可以使用 `/retest` 命令触发重新运行测试。
关于特定测试的故障排除,请查看[测试指南]。
### 标签
Kubernetes 使用[标签]来分类和分派 issue 和 Pull Request。使用正确的标签将会帮助您的 issue 或 PR 得到更高效的分派。
**参考:**
- [标签]
- [Prow 命令][命令]
常用标签:
- [`/sig <sig name>`][kind] 分配一个 [SIG][SIGs] 来管理该 issue 或 PR
- [`/area <area name>`][kind] 关联该 issue 或 PR 到某一个 [area][标签]
- [`/kind <category>`][kind] 给该 issue 或 PR [分类][标签]
---
## 在本地工作
在提交 pull request 之前,您将需要在本地完成一些工作。如果您是 git 新手,可以从 [Atlassian git 教程]开始学习。或者,您也可以选择斯坦福包含多语言的 [Git 魔法]教程。
**参考:**
- [Atlassian git 教程]
- [Git 魔法]
- [GitHub 工作流程]
- [本地测试]
- [开发者指南]
### 分支策略
Kubernetes 项目使用 GitHub 标准的 _「Fork 然后 Pull」_ 的工作流程。在 git 术语中,您个人的 fork 被称为 _「`origin`」_,实际的项目 git 仓库被称为 _「`upstream`」_。为了保证您的个人分支(`origin`)与项目(`upstream`)保持更新,必须要在您的本地工作副本中进行设置。
#### 添加上游
添加一个远程分支 `upstream`,并将它设置中的 push 选项关闭。
```
# 用上游仓库的 URL 替换 <upstream git repo>
# 例如:
# https://github.com/kubernetes/kubernetes.git
# git@github.com/kubernetes/kubernetes.git
git remote add upstream <upstream git repo>
git remote set-url --push upstream no_push
```
您可以运行 `git remote -v` 列出设置过的远程分支来验证这一点。
#### 让您的工作保持同步
获取 `upstream` 的所有变更,然后将您本地的 `master` 分支在它基础上 _「rebase」_。这样您本地的仓库与 `upstream` 项目就能保持同步了。
```
git fetch upstream
git checkout master
git rebase upstream/master
```
至少做完这些,您就可以创建一个新分支,来添加功能或修复问题了。
```
git checkout -b myfeature
```
#### 压缩提交
[压缩提交] 的主要目的是创建一个清晰好读的 git 历史或者过往修改的 log。通常这会在 PR 修订的最后阶段进行。如果您不确定是否应该压缩提交,不妨先保留更多,然后交给其他贡献者来评审和批准您的 PR。
[贡献者指南]: /contributors/guide/README.md
[开发者指南]: /contributors/devel/README.md
[gubernator 仪表盘]: https://gubernator.k8s.io/pr
[prow]: https://prow.k8s.io
[tide]: http://git.k8s.io/test-infra/prow/cmd/tide/pr-authors.md
[tide 仪表盘]: https://prow.k8s.io/tide
[Bot 命令]: https://go.k8s.io/bot-commands
[GitHub 标签]: https://go.k8s.io/github-labels
[Kubernetes 代码搜索]: https://cs.k8s.io/
[@dims]: https://github.com/dims
[日历]: https://calendar.google.com/calendar/embed?src=calendar%40kubernetes.io
[kubernetes-dev]: https://groups.google.com/forum/#!forum/kubernetes-dev
[Slack 频道]: http://slack.k8s.io/
[Stack Overflow]: https://stackoverflow.com/questions/tagged/kubernetes
[YouTube 频道]: https://www.youtube.com/c/KubernetesCommunity/
[triage 仪表盘]: https://go.k8s.io/triage
[test grid]: https://testgrid.k8s.io
[开发者统计]: https://k8s.devstats.cncf.io
[行为守则]: /code-of-conduct.md
[用户支持请求]: /contributors/guide/issue-triage.md#determine-if-its-a-support-request
[故障排除指南]: https://kubernetes.io/docs/tasks/debug-application-cluster/troubleshooting/
[Kubernetes 论坛]: https://discuss.kubernetes.io/
[Pull request 处理]: /contributors/guide/pull-requests.md
[GitHub 工作流程]: /contributors/guide/github-workflow.md
[prow]: https://git.k8s.io/test-infra/prow#prow
[cla]: /CLA.md#how-do-i-sign
[cla 故障排除指南]: /CLA.md#troubleshooting
[命令]: https://prow.k8s.io/command-help
[kind]: https://prow.k8s.io/command-help#kind
[cc]: https://prow.k8s.io/command-help#cc
[hold]: https://prow.k8s.io/command-help#hold
[assign]: https://prow.k8s.io/command-help#assign
[SIGs]: /sig-list.md
[测试指南]: /contributors/devel/sig-testing/testing.md
[标签]: https://git.k8s.io/test-infra/label_sync/labels.md
[琐碎问题修复]: /contributors/guide/pull-requests.md#10-trivial-edits
[GitHub 工作流程]: /contributors/guide/github-workflow.md#3-branch
[压缩提交]: /contributors/guide/pull-requests.md#6-squashing-and-commit-titles
[owners]: /contributors/guide/owners.md
[本地测试]: /contributors/guide/README.md#testing
[Atlassian git 教程]: https://www.atlassian.com/git/tutorials
[git 魔法]: http://www-cs-students.stanford.edu/~blynn/gitmagic/
[安全和披露信息]: https://kubernetes.io/docs/reference/issues-security/security/
[approve]: https://prow.k8s.io/command-help#approve