16 KiB
Cheat-Sheet für Kubernetes-Beitragende
Eine Liste von oft-genutzten Ressourcen zum Beitragen zu Kubernetes; Tipps, Tricks und allgemeine Best-Practices innerhalb des Kubernetes-Projekts. Es ist als "TL;DR" (too long, didn't read - zu lang, nicht gelesen) oder Schnellreferenz nützlicher Informationen gedacht, um deine Beitragserfahrung auf GitHub besser zu machen.
Inhaltsverzeichnis
Hilfreiche Ressourcen
Wie man anfängt
- Contributor Guide - Anleitung zum Beginn des Beitragens zum Kubernetes-Projekt.
- Developer Guide - Anleitung zum Beitragen von Code direkt zum Kubernetes-Projekt.
- Security and Disclosure Information - Anleitung zum Melden von Schwachstellen und zur Sicherheit des Release-Prozesses.
SIGs und andere Gruppen
Community
- Kalender - Alle Kubernetes-Community-Events (SIG/WG Treffen, Events, usw.).
- kubernetes-dev - Kubernetesentwicklung-Mailingliste.
- Kubernetes Forum - Offizielles Kubernetes-Forum.
- Slack Channels - Offizieller Kubernetes-Slackchannel.
- Stack-Overflow - Zum Stellen von Kubernetes-Nutzerfragen.
- YouTube Channel - Offizieller Kubernetes-Youtubechannel.
Ablauf
- Prow - Kubernetes CI/CD-System.
- Tide - Prow-Plugin das Merges und Tests verwaltet. Tide Dashboard
- Bot-Befehle - Befehle zur Interaktion mit Kubernetes-Bots (zum Beispiel:
/cc
,/lgtm
, und/retest
) - GitHub Labels - Liste an Labels des ganzen Kubernetes-Projekts.
- Kubernetes Code Search, von @dims maintained.
Tests
- Prow - Kubernetes CI/CD-System.
- Test Grid - Ansicht historischer Tests und den zugehörigen Informationen.
- Triage Dashboard - Aggregiert ähnliche Fehler zur besseren Fehlerbehandlung.
Wichtige Email-Adressen
- community@kubernetes.io - Maile jemandem im Community-Team (SIG Contributor Experience) über ein Problem in der Community.
- conduct@kubernetes.io - Kontaktiere das Code-of-Conduct-Board, private Mailingliste.
- github@kubernetes.io - Maile dem GitHub Administration Team privat, für heikle Themen.
- steering@kubernetes.io - Maile der Leitungsgruppe. Öffentliche Adresse mit öffentlichem Archiv.
- steering-private@kubernetes.io - Maile der Leitungsgruppe private, für heikle Themen.
- social@cncf.io - Kontaktiere das CNCF Socal Media Team; Blog, Twitteraccount, und andere soziale Bereiche.
Andere nützliche Links
- Developer Statistiken - Entwicklerstatistiken für alle von CNCF gemanagten Projekte.
Effektive Kommunikation auf GitHub
Seid exzellent zueinander
Als ersten Schritt sollte man sich mit dem Code of Conduct bekannt machen.
Beispiele für gute/schlechte Kommunikation
Wenn man ein Problem anspricht, oder Hilfe sucht, sollte man die Anfrage höflich formulieren:
🙂 “X kompiliert nicht, wenn ich Y mache, habt ihr Vorschläge dazu?
😞 “X geht nicht, fixt das!"
Beim Schließen eines PRs ist es sinnvoll eine freundliche und erklärende Nachricht hinzuzufügen weshalb dieser nicht die Mergeanforderungen erfüllt.
🙂 “Ich schließe diesen PR, da dieses Feature nicht den Use-Case X unterstützt. In der forgeschlagenen Form wäre es besser dies mit Y umzusetzen. Danke für deine Mitarbeit daran."
😞 “Warum folgt das nicht den API-Konventionen? Das sollte woanders gemacht werden!"
Einen Beitrag einreichen
Das CLA unterzeichnen
Bevor man einen Beitrag einreichen kann, muss das Contributor License Agreement (CLA) unterzeichnet werden. Das Kubernetes-Projekt kann nur einen Beitrag annehmen, wenn du oder deine Firma das CLA unterzeichnet haben.
Solltest du Probleme beim Unterzeichnen des CLAs haben, folge den CLA Troubleshooting Guidelines.
Erstellen von und Antworten auf Issues
GitHub Issues sind der meistgenutzte Weg um Dinge wie Bugreports und Enhancementrequests zu verfolgen, oder andere Probleme wie fehlschlagende Tests zu melden. Sie sind nicht als Anfragen für Usersupport gedacht. Für diese gibt es den Troubleshooting Guide, Stack-Overflow oder das Kubernetes-Forum.
Referenzen:
Erstellen eines Issues
- Nutze ein Issue-Template, wenn eines zur Verfügung steht. Das korrekte Template
hilft anderen Beitragenden auf deinen Issue zu antworten.
- Folge allen Anweisungen im Template selbst.
- Beschreibe den Issue detailliert.
- Füge sinnvolle Labels hinzu. Wenn du dir nicht sicher bist, hilft der K8s-ci-robot Bot (Kubernetes CI bot) mit Antworten auf Issues, damit diese effektive verwaltet werden.
- Sei selektiv beim Zuweisen von Issues zu Nutzern mit
/assign @<username>
oder/cc @<username>
. Der Issue wird effektiver verwaltet, wenn sinnvolle Labels zugewiesen werden und weniger Menschen.
Antworten auf Issues
- Wenn du an einem Issue arbeitest, hinterlasse einen Kommentar damit andere wissen, dass du daran arbeitest und doppelte Arbeit vermieden wird.
- Falls du selbst eine Lösung findest, kommentiere den Issue mit einer Erklärung bevor du ihn schließt.
- Referenzen auf andere PRs und Issues (oder andere Materialen) mit zum Beispiel: "ref: #1234" sind sinnvoll. Diese helfen Bezüge darauf zu finden, die an anderer Stelle bearbeitet wurden.
Öffnen eines Pull-Requests
Pull-Requests (PR) sind die meistgenutzte Variante um Code, Dokumentation oder andere Arten von Arbeit beizutragen, die in einem Git-Repository gespeichert werden können.
Referenzen:
Erstellen eines Pull-Requests
- Folge den Anweisungen des Pull-Request-Templates, falls eines zur Verfügung steht. Es wird denen helfen, die auf den PR antworten.
- Für triviale Fixes wie kaputte Links, Schreib- oder Grammatikfehler durchsuche das gesamte Dokument für andere potentielle Fehler. Mehrere PRs für kleine Fixes im gleichen Dokument sind unnötig.
- Füge Referenzen auf verwandte Issues oder Issues die der PR lösen könnte hinzu.
- Vermeide unnötig große Änderungen in einem einzelnen Commit. Zerteile stattdessen den PR in mehrere kleine, logische Commits. Das erleichter Reviews.
- Kommentiere deinen eigenen PR wenn du meinst weitere Erklärungen sind nötig.
- Sei selektiv beim Erstellen des PRs mit
/assign @<username>
. Zu viele Reviewer garantieren keinen schnelleren PR-Review. - Wenn der PR als "Work in progress" angesehen wird, füge ein
[WIP]
am Anfang des Titels hinzu oder nutze den/hold
Befehl. Das stellt sicher, dass der PR nicht gemerged wird bis das[WIP]
oder hold aufgehoben worden sind. - Falls dein PR noch nicht reviewed wurde, bitte schließe ihn nicht und öffne einen Neuen
mit den gleichen Änderungen. Pinge deine Reviewer stattdessen in einem Kommentar mit
@<github username>
an.
Beispiel PR-Beschreibung
Ref. #3064 #3097
Alle Dateien im Besitz von SIG testing wurden von `/devel` zum neuen Ordner `/devel/sig-testing`
verschoben.
/sig contributor-experience
/cc @stakeholder1 @stakeholder2
/kind cleanup
/area developer-guide
/assign @approver1 @approver2 @approver3
Was steht in diesem PR:
- Zeile 1 - Referenzen auf andere Issues oder PRs (#3064 #3097).
- Zeile 2 - Eine kurze Beschreibung was in diesem PR getan wird.
- Zeile 4 - SIG Zuweisung mit dem Befehl
/sig contributor-experience
.. - Zeile 5 - Reviewer die Interesse an diesem spezifischen Issue oder PR
haben könnten, werden mit
/cc
markiert. - Zeile 6 - Der
/kind cleanup
Befehl fügt ein Label hinzu, das Issues oder PRs als Aufräumen von Code, Prozessen oder technologischer Schuld kategorisiert. - Zeile 7 - Der
/area developer-guide
Befehl kategorisiert Issues oder PRs im Bezug zum Developerguide. - Zeile 9 - Der Befehl
/assign
fügt einen Approver zum PR hinzu. Ein Approver wird vom k8s-ci-robot vorgeschlagen und wird von der Liste der Eingentümer in der OWNERS Datei ausgewählt. file. Der Approver fügt das/approve
Label zum PR hinzu nachdem dieser reviewed wurde.
Troubleshooting eines Pull-Requests
Nachdem ein PR vorgeschlagen wurde, wird eine Reihe an Test von der Kubernetes CL-Plattform Prow ausgeführt. Fall einer der Tests fehlschlägt, antwortet der K8s-ci-robot auf den PR mit Links zu den fehlgeschlagenen Tests und verfügbaren Logs.
Neue Commits zu diesem PR sorgen dafür dass diese Tests erneut ausgeführt werden.
Gelegentlich gibt es Probleme mit der Kubernetes CI-Plattform. Diese können aus
verschiedenen Gründen auftreten, selbst wenn der Beitrag alle lokalen Tests besteht.
Man kann einen neuen Testdurchlauf mit dem /retest
Befehl auslösen.
Für mehr Informationen zum Troubleshooting von spezifischen Test, siehe den Testing Guide.
Labels
Kubernetes nutzt Labels zum sichten und kategorisieren von Issues und Pull Requests. Die richtigen Labels helfen dabei den Issue oder PR sinnvoller einzusortieren.
Referenzen:
Oft genutzte Labels:
/sig <sig name>
Fügt eine SIG als Eigentümer des Issues oder PRs hinzu./area <area name>
Verknüpft den Issue oder PR mit einem bestimmten Bereich./kind <category>
Kategorisiert den Issue oder PR.
Lokal arbeiten
Bevor man einen Pull-Request vorschlagen kann, muss man lokal etwas Arbeit leisten. Für Neueinsteiger zu git ist das Atlassian Git-Tutorial ein guter Einstiegspunkt. Alternativ ist das Git Magic Tutorical der Standford Uni eine gute multi-linguale Option.
Referenzen:
Branch-Strategie
Das Kubernetes-Projekt nutzt den Standardworkflow von GitHub, der sich "Fork and Pull"
(auf Deutsch "abzweigen und ziehen") nennt.
In Begriffen aus der Git-Welt wird dein persönlicher Fork als "origin
"
(auf Deutsch "Ursprung") und das eigentliche Projekt-Gitrepository als "upstream
"
(wörtlich "flussaufwärts") bezeichnet.
Um deinen persönlichen Branch (origin
) mit dem Projekt (upstream
) aktuell zu halten,
muss das innerhalb der lokalen Kopie konfiguriert werden.
Upstream hinzufügen
Füge upstream
als sogenanntes remote hinzu und konfiguriere es so, dass man nicht dorthin
pushen kann.
# Ersetze <upstream git repo> mit der Upstreamrepo-URL
# Beispiel:
# 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
Das kann via git remote -v
verifiziert werden, indem alle konfigurierten Remote-Repos
aufgelistet werden.
Synchron halten von Forks
Hole alle Änderungen von upstream
ab und "rebase" diese auf deinem lokalen
Master
Branch. Das wird dein lokales Repo mit dem upstream
Projekt synchronisieren.
git fetch upstream
git checkout master
git rebase upstream/master
Das sollte minimal bevor der Erstellung eines neuen Branches für ein Feature oder einen Fix passieren.
git checkout -b myfeature
Commits squashen
Der Hauptzweck von Commits squashen("Commits zerquetschen") ist die Erstellung einer sauberen, lesbaren Githistorie oder eines Logs der Änderungen die gemacht wurden. Normal wird das in der letzten Phase einer PR Revision getan. Wenn du dir unsicher bist, ob du deine Commits squashen solltest, ist es besser mehrere zu lassen und es dem Urteil anderer Beitragenden zu überlassen, die als Reviewer und Approver für den PR zugeteilt wurden.