# 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]。_只有_ 您或者您的公司签署了 CLA,Kubernetes 项目才能接受您的贡献。 如果您在签署 CLA 时遇到任何问题,请参考 [CLA 故障排除指南]。 ### 提交和回应 Issue GitHub Issue 是追踪 bug 报告、改善请求,或者报告例如失败测试的其它问题的主要途径。它们**不**应该用来发布[用户支持请求]。对于那些问题,请查看[故障排除指南],在[Stack Overflow] 报告,或者在 [Kubernetes 论坛] 跟进。 **参考:** - [标签] - [Prow 命令][命令] #### 提交 Issue - 尽量使用 issue 模版。使用正确的模版将有助于其它贡献者回应您的 issue。 - 遵循任何在 issue 模版中描述的指示。 - 尽量详细描述您提交的 issue。 - 使用合适的[标签]。如果您不确定,[k8s-ci-robot][prow] 机器人([Kubernetes CI 机器人][prow])将会回复您的 issue 并为其添加需要的标签,让分派更高效。 - 在使用 [`/assign @`][assign] 或 [`/cc @`][cc] 时注意选择。想要您的 issue 得到高效处理,分配更多的人不如使用正确的标签。 #### 回应 Issue - 在处理 issue 时,添加评论以便让其他人知道,避免重复的工作。 - 如果之后您解决了什么问题,在关闭该 issue 前,先评论以便让其他人知道。 - 添加其它 PR 或 issue 的引用(或者任何可能的资料),例如 _「ref: #1234」_。这对于联系其它地方处理过的相关工作很有帮助。 ### 提交 Pull Request Pull requests(PR)是提交代码、文档或其它形式的工作的主要途径,这些工作都保存在 git 仓库中。 **参考:** - [标签] - [Prow 命令][命令] - [Pull request 处理] - [GitHub 工作流程] #### 创建 Pull Request - 尽量遵循 pull request 模版的指示。这样对于回应您 PR 的人会有帮助。 - 如果是[琐碎问题修复],例如失效链接、错别字或语法错误,请检查整个文档查找其它可能的错误。不要为了修复同一文档的小问题提交多个 PR。 - 关联任何与您 PR 有关的或者能被解决的 issue。 - 避免在一个提交中引入大量修改。相反地,将您的 PR 分解为多个合理的小提交。这样可以让评审您的 PR 变得更容易。 - 如果您觉得有什么需要更多解释,评论回复您的 PR。 - 有选择地使用 [`/assign @`][assign] 命令,分配过多的评审者并不能让评审过程加快。 - 如果您的 PR 是 _「正在进行中的工作」_,在标题前添加 `[WIP]` 或者使用 [`/hold`][hold] 命令。这样可以防止该 PR 在 `[WIP]` 或 hold 被撤销前被合并。 - 如果您的 PR 没有得到评审,不要关闭后用同样的修改创建新 PR。在评论中使用 `@` 通知您的评审者。 #### 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 `][kind] 分配一个 [SIG][SIGs] 来管理该 issue 或 PR - [`/area `][kind] 关联该 issue 或 PR 到某一个 [area][标签] - [`/kind `][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 替换 # 例如: # https://github.com/kubernetes/kubernetes.git # git@github.com/kubernetes/kubernetes.git git remote add upstream 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