Dieser Kurs lebt von Übungen. Wer DevOps betreibt, lernt es nicht nur aus dem Text, sondern indem er Repositories, Pipelines, Berechtigungen und Messungen anlegt, ansieht, ändert und wieder löscht. Das kostet Geld und Nerven, wenn man es nachlässig macht, und fast nichts, wenn man ein paar Gewohnheiten hat. Diese Lektion legt sie fest, bevor das erste Objekt entsteht: welche Konten Sie nehmen, was darin kostenlos ist, was nach Zeit kostet und wie jede Übung endet.
Als Beispiel dient durchgehend die erfundene Nordlicht Reisen GmbH mit ihrem ausgedachten Buchungsportal. Es liegt in diesem Kurs an zwei Orten: als Repository bei GitHub und als Projekt bei Azure DevOps. Die Prüfung AZ-400 verlangt beide Werkzeugwelten, deshalb brauchen die Übungen beide.
Vorwissen: Das Testkonto von Azure, seine Grenzen und das Aufräumen mit Ressourcengruppen kennen Sie aus AZ-104, Lektion 0.1. Wie Kosten in Azure entstehen und wie ein Budget als Skript aussieht, lehrt K3, Lektion 3.1.2. Wie man in Azure DevOps das kostenlose Kontingent für private Projekte freischaltet, hat K3, Lektion 3.7.2, schon gezeigt. Diese Lektion fasst das für die Übungen dieses Kurses zusammen, ergänzt die Seite von GitHub und legt das Aufräumen für alle drei Welten fest.
Hinweis zu den Quellen und zu Zahlen: Alle Angaben dieser Lektion wurden in der Dokumentation von Microsoft Learn und von GitHub gelesen; die Seiten stehen unter „Weiterlesen“. Beträge nennt dieser Kurs nicht. Wo Microsoft oder GitHub eine Menge nennen (Minuten, Nutzer, Tage), steht sie hier mit ihrer Quelle; wo die Quelle nur einen Geldbetrag oder gar nichts nennt, steht das auch hier. Diese Angaben ändern sich. Prüfen Sie sie vor jeder Übungsreihe auf den verlinkten Seiten nach.
Drei Konten, drei Abrechnungen
Die Übungen brauchen drei Dinge, die nichts miteinander zu tun haben, außer dass Sie sie verbinden werden:
| Konto | Wofür | Wer rechnet ab? |
|---|---|---|
| GitHub-Konto | Repositories, Issues, Projects, Actions, Packages | GitHub, nach dem Tarif des Kontos |
| Azure-DevOps-Organisation mit einem Projekt | Boards, Repos, Pipelines, Artifacts, Wiki | Azure DevOps, über ein verknüpftes Azure-Abonnement |
| Azure-Abonnement | Ressourcen, in die Pipelines ausliefern; Abrechnung der Organisation | Azure, nach Verbrauch |
Wer bei der Arbeit ein Produktivkonto hat, nimmt für den Kurs nie das echte. Legen Sie eine eigene Organisation und ein eigenes Projekt an, ein eigenes GitHub-Konto oder wenigstens eine eigene GitHub-Organisation und ein Azure-Abonnement, in dem niemand produktiv arbeitet. Diese Regel schützt in beide Richtungen: Ihre Übung kann nichts Echtes zerstören, und Echtes taucht nicht in Ihrer Übung auf.
GitHub: Konto, kostenlose Stufe, Grenzen
Ein persönliches GitHub-Konto im Tarif GitHub Free reicht für den Kurs. Nach GitHubs Seite zu den Tarifen enthält GitHub Free für persönliche Konten unbegrenzt viele öffentliche Repositories mit vollem Funktionsumfang und unbegrenzt viele private Repositories mit einem eingeschränkten Funktionsumfang. Welche Funktionen in privaten Repositories fehlen, entscheiden GitHub und der Tarif; der Kurs kennzeichnet bei jeder Übung, wenn sie ein Produkt braucht, das nur bezahlt oder nur für öffentliche Repositories zur Verfügung steht.
Für GitHub Actions gilt nach der Abrechnungsseite von GitHub:
- Standard-Runner von GitHub (die von GitHub gehosteten Maschinen, auf denen Workflows laufen) sind in öffentlichen Repositories kostenlos. Diese Nutzung verbraucht das enthaltene Kontingent nicht.
- Selbst gehostete Runner sind ebenfalls kostenlos und verbrauchen das enthaltene Kontingent nicht. Dass sie dafür Ihre Maschine und Ihre Pflege brauchen, steht in Lektion 4.2.
- In privaten Repositories zehren die Standard-Runner von einem enthaltenen Kontingent des Tarifs. Dieses Kontingent ist laut GitHub ein Geldbetrag, keine feste Minutenzahl. Die Höhe je Tarif steht auf der Seite „GitHub Actions billing“ in der Dokumentation. Der Kurs nennt sie nicht, weil Beträge hier nicht stehen dürfen und weil sie sich ändern. Auch Speicher für Artefakte (gemeinsam mit Packages) und Zwischenspeicher je Repository haben eigene Grenzen, die dort stehen.
- Ist das enthaltene Kontingent verbraucht und hinterlegt kein gültiges Zahlungsmittel, wird die Nutzung laut GitHub gesperrt. Ist ein Zahlungsmittel hinterlegt, wird darüber hinaus nach den Standardsätzen abgerechnet. Größere Runner verlangen immer ein gültiges Zahlungsmittel.
- Ein Standardwert für ein Ausgabenlimit steht auf dieser Seite nicht; GitHub verweist auf Budgets in der Abrechnung des Kontos. Prüfen Sie dort, welche Budgets bei Ihnen gelten, bevor Sie ein Zahlungsmittel hinterlegen.
Aus diesen Angaben folgt für den Kurs eine einfache Regel: Übungen mit Actions laufen in öffentlichen Repositories, wenn nichts dagegen spricht (kein Geheimnis, keine Kundendaten, nur Beispielcode), und in privaten Repositories nur, wenn die Übung es sagt. Dann zählt das enthaltene Kontingent, und Sie hinterlegen kein Zahlungsmittel, wenn Sie nicht müssen.
Was GitHub-seitig nach Zeit oder Platz kosten kann, sagt jede Übung davor: private Repositories mit Actions, GitHub Advanced Security für private Repositories (Lizenz je aktiven Committer, Lektion 5.4), größere Runner.
Das GitHub-Werkzeug auf Ihrer Maschine
Die Übungen nutzen neben dem Browser die GitHub CLI (gh). Anmelden:
gh auth login --web
gh auth status
gh auth login meldet Sie bei GitHub an (--web öffnet dafür einen Browser); den Standardhost github.com können Sie mit --hostname ändern. Das Token legt gh im Anmeldespeicher des Systems ab, und nur wenn es keinen gibt oder er nicht nutzbar ist, in einer Textdatei. gh auth status zeigt, wo das Token liegt. Prüfen Sie das einmal, bevor Sie dieses Konto für Übungen nutzen. Mit --scopes bitten Sie um weitere Berechtigungen; das brauchen Sie beim Aufräumen (unten).
Ein Übungs-Repository legen Sie so an:
gh repo create nordlicht-buchungsportal --private --description "Übung AZ-400"
gh repo create nimmt den Namen im Format besitzer/name; ohne Besitzer nimmt der Befehl das angemeldete Konto. --private macht das Repository privat, --public öffentlich.
Azure DevOps: Organisation, Projekt und kostenlose Pipelines
Organisation und Projekt
Eine Organisation ist der Rahmen: Mitglieder, Abrechnung, Agent-Pools und die parallelen Aufträge gehören ihr. Ein Projekt in der Organisation enthält Boards, Repos, Pipelines, Artifacts und das Wiki. Beides legen Sie im Browser an: Microsoft nennt, dass alle Organisationen manuell über das Webportal angelegt werden müssen; eine automatische Anlage wird nicht unterstützt. Das Anlegen von Projekten dagegen geht auch per Befehl.
Das ändert sich gegenüber älteren Anleitungen: Nach der Seite „Create an organization“ brauchen Sie ein aktives Azure-Abonnement, um eine neue Organisation anzulegen. Beim Anlegen geben Sie den Namen, die Region für die Daten und das Abonnement für die Abrechnung an. Die Regeln für den Namen: nur Buchstaben des englischen Alphabets, Ziffern und Bindestriche, Anfang und Ende mit Buchstabe oder Ziffer, unter 50 Zeichen. Bei einem unzulässigen Zeichen meldet das Portal den Fehler VS850015.
Die neue Organisation enthält laut Microsoft diese kostenlose Stufe:
| Dienst | Was kostenlos ist (laut der Seite „Create an organization“) |
|---|---|
| Benutzer | die ersten fünf Benutzer mit Basic-Lizenz |
| Azure Pipelines | ein von Microsoft gehosteter Auftrag zur selben Zeit, bis zu 30 Stunden im Monat; ein selbst gehosteter Auftrag zur selben Zeit |
| Azure Boards | Nachverfolgung von Arbeitselementen und Boards |
| Azure Repos | unbegrenzt viele private Git-Repositories |
| Azure Artifacts | zwei GiB je Organisation |
Wer mehr verbraucht, zahlt den Mehrverbrauch über das verknüpfte Azure-Abonnement. Die Seite zu Azure Boards ergänzt: Der Einstieg ist kostenlos für bis zu fünf Nutzer, Stakeholder (Nutzer mit eingeschränktem Zugriff) sind unbegrenzt.
Die kostenlose Ausführung von Pipelines für private Projekte
Ein Pipeline-Lauf braucht einen parallelen Auftrag (parallel job): das Recht, einen Auftrag zur selben Zeit mit anderen laufen zu lassen. Azure DevOps unterscheidet die von Microsoft gehosteten und die selbst gehosteten parallelen Aufträge. Beide haben eine kostenlose Stufe; die selbst gehostete wird automatisch gewährt, die von Microsoft gehostete müssen Sie freischalten. Das lesen Sie auf der Seite „Configure and pay for parallel jobs“:
| Microsoft-gehostet (private Projekte) | Selbst gehostet (private Projekte) | |
|---|---|---|
| Kostenlos | ein Auftrag zur selben Zeit | ein Auftrag zur selben Zeit, dazu einer je aktivem Visual-Studio-Enterprise-Abonnenten der Organisation |
| Zeit je Auftrag | höchstens 60 Minuten je Lauf | keine Zeitgrenze |
| Zeit im Monat | höchstens 1.800 Minuten (30 Stunden) | keine Zeitgrenze |
| Bezahlte Stufe | 360 Minuten je Auftrag, keine Monatsgrenze | keine Zeitgrenze |
| Freischalten | die Organisation mit einem gültigen Azure-Abonnement verknüpfen (Billing einrichten) | nicht nötig |
Der entscheidende Satz der Seite lautet: Um die kostenlosen parallelen Aufträge zu erhalten, verknüpfen Sie Ihre Organisation mit einem gültigen Azure-Abonnement; sobald die Abrechnung eingerichtet ist, gilt die kostenlose Stufe automatisch für private Projekte der Organisation. Die ältere Praxis, die Freigabe bei Microsoft zu beantragen, nennt diese Seite nicht mehr. Sollte Ihre erste Pipeline trotzdem mit der Meldung hängen, dass kein paralleler Auftrag zur Verfügung stehe, prüfen Sie unter Organization settings, Pipelines, Parallel jobs, was Ihre Organisation hat; die Seite nennt diesen Ort. Dort sehen Sie auch die laufenden Aufträge.
Weitere Regeln dieser Seite, die für die Übungen zählen:
- Ein Lauf verbraucht einen parallelen Auftrag nur, solange er aktiv auf einem Agent läuft. Ein Lauf, der auf eine Genehmigung wartet, verbraucht keinen.
- Eine Aufteilung der Kapazität auf Projekte oder Pools gibt es nicht: Sie hängt an der Organisation und gilt für alle Projekte.
- Wer bezahlt, kauft zunächst nur die Zeitgrenze des ersten Auftrags weg: Der erste gekaufte Microsoft-gehostete Auftrag lässt die Zahl der Aufträge bei einem. Für zwei gleichzeitige Aufträge sind zwei nötig.
- Für neue Organisationen nennt die Seite eine Obergrenze von 25 parallelen Aufträgen auf von Microsoft gehosteten Agents.
- Kosten und Preis je Auftrag stehen auf der Preisseite von Azure DevOps. Der Kurs nennt sie nicht.
Öffentliche Projekte: Microsoft hat sie ausgemustert. Neue lassen sich nicht mehr anlegen, und bestehende werden später privat; die gleiche kostenlose Zuteilung wie für private gilt dann auch für sie. Wer für Open Source arbeitet, nimmt laut Microsofts Hinweis GitHub. Für diesen Kurs ändert das nichts: Ihr Projekt ist privat.
Was das für den Kurs heißt: Ihre Pipelines laufen im Mittel kurz. Mit einem Auftrag zur selben Zeit und 30 Stunden im Monat kommen Sie durch alle Übungen, wenn Sie sie nicht in Dauerschleife laufen lassen. Planen Sie nur ein: Mehrere Läufe teilen sich den einen Auftrag und stehen in der Schlange. Wer drei Pipelines gleichzeitig startet, wartet nicht aus Versehen, sondern nach der Regel oben.
Das Werkzeug für Azure DevOps auf Ihrer Maschine
Für az devops brauchen Sie die Erweiterung der Azure CLI:
az extension add --name azure-devops
az login
az devops configure --defaults organization=https://dev.azure.com/<organisation> project=<projekt>
Die Anleitung von Microsoft nennt az extension add --name azure-devops, az login und az devops configure mit --defaults für Organisation und Projekt; ohne Standardwerte geben Sie --org und --project in jedem Befehl an. Die Azure CLI unterstützt bei az login nur die interaktive Anmeldung mit Benutzername und Kennwort; für die Anmeldung mit einem persönlichen Zugriffstoken (PAT) beschreibt Microsoft einen eigenen Weg. Microsoft rät, Microsoft-Entra-Token den PATs vorzuziehen, die als langlebige Geheimnisse das höchste Risiko tragen. Auch deshalb legt dieser Kurs keine PATs an, wo es einen anderen Weg gibt.
Ein Projekt legen Sie so an:
az devops project create --name nordlicht-az400 --visibility private
--name ist erforderlich; --visibility kennt private (Standard) und public, --process den Prozess (Standard ist Agile), --source-control git (Standard) oder tfvc. Projektnamen dürfen keine Sonderzeichen wie / : \ ~ & % ; @ ' " ? < > | # $ * } { , + = [ ] enthalten, nicht mit einem Unterstrich beginnen, nicht mit einem Punkt beginnen oder enden und höchstens 64 Zeichen lang sein.
Azure: das Testkonto und die Ressourcengruppe je Übung
Für die Auslieferung nach Azure und für die Abrechnung der Organisation brauchen Sie ein Abonnement. Das Azure-Testkonto (Azure free account) aus AZ-104, Lektion 0.1, taugt dafür. Nach Microsofts Seite „Avoid charges with your Azure free account“ bekommen berechtigte neue Nutzer ein Guthaben in der Abrechnungswährung für die ersten 30 Tage und eine begrenzte Menge freier Dienste für zwölf Monate. Solange Sie unverbrauchtes Guthaben haben oder nur freie Dienste innerhalb der Grenzen nutzen, wird nichts berechnet. Weiter nennt die Seite:
- Sind das Guthaben aufgebraucht oder die 30 Tage um, werden Abonnement und Dienste deaktiviert. Um sie weiter zu nutzen, müssen Sie das Konto upgraden; danach zahlen Sie nach Verbrauch nur, was die freien Mengen übersteigt.
- Die freie Menge verfällt am Monatsende und wird nicht in den nächsten Monat übertragen.
- Nur bestimmte Stufen eines Dienstes sind kostenlos. Was kostenlos ist, steht in den häufigen Fragen zum Testkonto.
- Die Nutzung der freien Dienste prüfen Sie im Portal; die Seite „Check usage of free services“ erklärt, wie.
- Wer keinen Dienst nutzen will, kann das Abonnement kündigen.
Hinweis: Das Guthaben selbst ist ein Betrag; der Kurs nennt ihn nicht, Sie lesen ihn bei der Anmeldung. Wer kein Testkonto bekommt, nimmt ein eigenes leeres Abonnement mit Budget (K3, Lektion 3.1.2; AZ-104, Lektion 1.6).
Was nach Zeit kostet und was nicht
| Kostet nach Zeit oder Platz, solange es existiert | Kostet leer kaum etwas oder nichts |
|---|---|
| virtuelle Maschinen, auch angehaltene mit zugewiesenem Host (Lektion 4.2, 4.5) | Ressourcengruppen, Tags, Policy-Zuweisungen |
| Scale Sets für Agents (Lektion 4.2) | Boards, Wiki, Issues, Projects (innerhalb der kostenlosen Stufe) |
| Azure Load Testing (Lektion 4.6) | Repositories, Branches, Pull Requests |
| Container Registry, Container Apps, App Service (Lektionen 4.8 bis 4.11) | Dienstverbindungen und Variablengruppen |
| Log-Analytics-Daten (Lektion 6.1, 6.2), Defender für Cloud (Lektion 5.4) | |
| GitHub Advanced Security in privaten Repositories (Lektion 5.4) | |
| Azure Artifacts über die kostenlose Menge hinaus (Lektion 3.1) |
Jede Übung sagt vor dem ersten Schritt, was darin nach Zeit kostet. Beträge nennt dieser Kurs nicht; die Preisseiten der Dienste und der Preisrechner von Azure zeigen sie. Halten Sie die Regel aus K3, Lektion 3.1.2, ein: schätzen, mit Datum festhalten, und einen Wert, den Sie nicht geprüft haben, nicht als Tatsache behandeln.
Die Ressourcengruppe je Übung
Jede Übung, die Azure berührt, beginnt mit einer eigenen Ressourcengruppe rg-az400-<übung>, zum Beispiel rg-az400-konten. Der Vorteil: Alles, was die Übung anlegt, liegt dort, und az group delete entfernt es mit einem Befehl.
az group create --name rg-az400-konten --location germanywestcentral
az group delete --name rg-az400-konten --yes --no-wait
az group exists --name rg-az400-konten
Die Regionen und Kontingente prüfen Sie wie in AZ-104, Lektion 0.1. Nach dem Löschen antwortet az group exists nach einigen Minuten mit false; das ist die Probe, dass nichts mehr läuft. Was die Gruppe nicht enthält, steht im nächsten Abschnitt.
Aufräumen: was mit der Gruppe nicht verschwindet
Eine Ressourcengruppe räumt nur Azure auf. Alles, was Sie bei GitHub und Azure DevOps angelegt haben, bleibt, und einiges davon hat Zugriff auf Ihr Konto. Deshalb ist das Aufräumen in diesem Kurs ein ausdrücklicher Schritt jeder Übung.
GitHub
| Objekt | Entfernen | Hinweis |
|---|---|---|
| Repository | Im Repository Settings, im Abschnitt Danger Zone Delete this repository, Name eintippen; per gh repo delete besitzer/name --yes |
Nötig sind Besitzer- oder Administratorrechte. Manche gelöschten Repositories lassen sich laut GitHub innerhalb von 90 Tagen wiederherstellen, nicht alle. |
| Repository nur stilllegen | Archive this repository (schreibgeschützt für alle); rückgängig mit Unarchive this repository | Ein archiviertes Repository ist kein Aufräumen, wenn es noch Zugriff oder Geheimnisse hat. |
| Persönliches Zugriffstoken | Settings, Developer settings, Personal access tokens, Fine-grained tokens oder Tokens (classic), Delete | GitHub entfernt Token, die ein Jahr nicht benutzt wurden, von selbst. Ein gelöschtes Token löscht auch einen damit angelegten Deploy Key. |
| Self-hosted Runner | Im Repository Settings, Actions, Runners, den Runner wählen, Remove; ist die Maschine nicht erreichbar, Force remove this runner | Danach den Dienst auf der Maschine selbst entfernen (Lektion 4.2). |
| GitHub Project | Im Projekt das Menü ⋯, Settings, im Abschnitt Danger zone Delete this project; reversibel ist nur Close this project | Das Löschen entfernt das Projekt endgültig. |
gh repo delete verlangt die Berechtigung delete_repo, die gh auth login nicht von selbst mitbringt. Fordern Sie sie vor dem Löschen an:
gh auth refresh -s delete_repo
gh repo delete <besitzer>/nordlicht-buchungsportal --yes
--yes überspringt die Rückfrage. Die Dokumentation von gh nennt dazu: Ohne Repository-Namen wird die Option ignoriert und die Rückfrage erscheint trotzdem, deshalb nennen Sie den Namen ausdrücklich. Wer lieber nicht per Befehl löscht, nimmt den Weg über Settings.
Azure DevOps
| Objekt | Entfernen | Hinweis |
|---|---|---|
| Projekt | Organization settings, Projects, Projekt ankreuzen, Delete, Namen eintippen; oder az devops project delete --id <projekt-id> --yes |
Gelöschte Projekte lassen sich 28 Tage wiederherstellen (Organization settings, Overview, „Recently deleted projects“); danach sind sie endgültig weg. In seltenen Fällen kann das Löschen laut Microsoft bis zu 70 Tage dauern. |
| Organisation | Organization settings, Overview, Delete, Namen eintippen | Vorher die Abrechnung entfernen (Verknüpfung mit dem Azure-Abonnement lösen). Bezahlte Benutzer und Dienste laufen bis zum Ende des Abrechnungszeitraums weiter. 28 Tage lang lässt sich die Organisation wiederherstellen. |
| Dienstverbindung | Project settings, Service connections, die Verbindung, im Menü More options Delete; mit Disable sperren Sie sie nur | Azure Pipelines kann eine Verbindung nach 100 Tagen ohne Nutzung selbst deaktivieren. Löschen Sie bei Azure-Verbindungen danach das zugehörige Dienstprinzipal in den App-Registrierungen von Microsoft Entra von Hand, falls das Löschen meldet, es habe ihn nicht entfernen können. |
| Persönliches Zugriffstoken | In den Benutzereinstellungen Personal access tokens, das Token wählen, Revoke | Microsoft rät, ein Token zu widerrufen, sobald es nicht mehr gebraucht wird. Erzeugen Sie nur auf eine Organisation begrenzte Token. |
| Agent in einem Pool | Siehe Lektion 4.2; die Übungen von D0 bis D1 brauchen keinen | Ein PAT zum Registrieren braucht den Bereich „Agent Pools (Read & manage)“. |
| Wiki, Boards, Repos | verschwinden mit dem Projekt | Kopieren Sie vorher, was Sie behalten wollen: Microsoft beschreibt „Download as Zip“ und das Klonen des Repositorys. |
Beim Löschen einer Organisation gilt zusätzlich: Die Organisation ist sofort für alle gesperrt, ihr Name wird nach dem Löschen frei (das kann bis zu einer Stunde dauern), und der Zugang der Nutzer zu ihren Azure-Konten bleibt unberührt.
Auch hier gilt die Probe: az devops project list zeigt das Projekt nicht mehr, nachdem es gelöscht wurde. Die Liste der „Recently deleted projects“ zeigt, dass es in der 28-Tage-Frist ist; das ist kein Zeichen für einen Fehler, sondern der beabsichtigte Zustand.
Ein Hinweis zu den Zugriffstoken der Plattformen
Bei den Zugriffstoken beider Seiten stehen derzeit Ausmusterungen an. Azure DevOps stellt globale PATs (die für alle Organisationen gelten) ein; die Seite zu PATs nennt dafür an zwei Stellen unterschiedliche Termine. Lesen Sie auf der Seite nach, was gilt, und erzeugen Sie nur auf eine Organisation begrenzte PATs, mit den kleinsten Bereichen und der kürzesten Laufzeit. Der Azure-DevOps-Aussteller für Workload-Identitätsverbund in Dienstverbindungen ist laut Microsoft ebenfalls veraltet; neue Verbindungen nehmen den Aussteller von Microsoft Entra. Beides behandelt Lektion 5.1.
Entscheidungen
| Wenn … | dann … | weil … |
|---|---|---|
| die Übung nur Beispielcode und kein Geheimnis braucht | ein öffentliches GitHub-Repository mit Standard-Runnern | sie in öffentlichen Repositories laut GitHub kostenlos laufen und das Kontingent nicht verbrauchen |
| die Übung ein privates Repository braucht | ein privates Repository, kein Zahlungsmittel hinterlegen, solange das enthaltene Kontingent reicht | ohne Zahlungsmittel sperrt GitHub nach dem Verbrauch, statt abzurechnen |
| die erste Pipeline in Azure DevOps nicht startet | prüfen, ob die Organisation mit einem Azure-Abonnement verknüpft ist | die kostenlose Stufe für Microsoft-gehostete Aufträge gilt erst, wenn die Abrechnung eingerichtet ist |
| mehrere Läufe gleichzeitig starten sollen | sie nacheinander planen | die kostenlose Stufe hat einen parallelen Auftrag; weitere Läufe stehen in der Schlange |
| eine Übung eine Maschine oder einen Dienst mit Zeitpreis braucht | die Gruppe rg-az400-<übung> anlegen und am Ende löschen |
eine Gruppe löscht alle Ressourcen darin mit einem Befehl |
| ein Token nicht mehr gebraucht wird | sofort löschen oder widerrufen | ein Token ist ein langlebiges Geheimnis und hängt an Ihrem Konto |
Kosten und Aufräumen
- Kein Geldbetrag in diesem Kurs. Wo ein Dienst nach Zeit kostet, steht davor in der Übung, was es ist und wo Sie den Preis lesen.
- Die Dinge dieser Lektion kosten nichts, wenn Sie sie wieder entfernen: ein Azure-DevOps-Projekt innerhalb der kostenlosen Stufe, ein Repository bei GitHub, eine leere Ressourcengruppe.
- Das Azure-Testkonto läuft nach 30 Tagen aus (Guthaben) beziehungsweise ist nach zwölf Monaten ohne die freien Mengen. Stellen Sie sich vor dem Start eine Erinnerung, damit nichts unbemerkt weiter berechnet wird.
- Die Organisation in Azure DevOps hängt am Abonnement. Wer die Organisation löscht, entfernt vorher die Abrechnung.
- Das Aufräumen steht am Ende jeder Übung und endet immer mit einer Probe, nicht mit der Annahme, es sei gelungen.
Übung 1: Konten anlegen und die Grenzen festhalten
Hinweis zu allen Befehlen und Menüpfaden dieses Kurses: Sie wurden nicht ausgeführt; sie stammen aus der Referenz von Microsoft und GitHub. Menüs ändern sich. Wenn ein Schritt anders aussieht als beschrieben, gilt die aktuelle Seite unter „Weiterlesen“, und Sie halten die Abweichung für sich fest.
Sie richten die Konten ein und halten fest, was sie kosten dürfen.
- Legen Sie ein GitHub-Konto an (oder nehmen Sie ein eigenes für Übungen), melden Sie sich mit
gh auth login --weban und lesen Sie mitgh auth status, wo das Token liegt. - Legen Sie ein Azure-Abonnement bereit (Testkonto aus AZ-104, Lektion 0.1, oder ein eigenes leeres Abonnement mit Budget) und melden Sie sich mit
az loginan. - Legen Sie im Browser eine eigene Azure-DevOps-Organisation an und verknüpfen Sie sie bei der Anlage mit dem Abonnement. Legen Sie mit
az devops project createdas Projektnordlicht-az400an, privat. - Öffnen Sie Organization settings, Pipelines, Parallel jobs und lesen Sie, wie viele parallele Aufträge Ihre Organisation hat.
- Legen Sie mit
az group createdie Grupperg-az400-kontenan. - Schreiben Sie in eine Datei
docs/kosten.mdIhrer Übungsumgebung, mit Lesedatum, wo Sie diese vier Angaben gelesen haben: das enthaltene Kontingent von GitHub Actions für Ihren Tarif, die Grenzen der kostenlosen Pipelines in Azure DevOps, die Laufzeit des Azure-Guthabens und wann es endet.
So prüfen Sie es: az devops project list nennt nordlicht-az400; az group exists --name rg-az400-konten antwortet true; gh auth status nennt Ihr Konto; und docs/kosten.md nennt zu jeder der vier Angaben eine Quelle und ein Lesedatum.
Lösung 1
gh auth login --web
gh auth status
az login
az extension add --name azure-devops
az devops configure --defaults organization=https://dev.azure.com/<organisation> project=nordlicht-az400
az devops project create --name nordlicht-az400 --visibility private
az devops project list
az group create --name rg-az400-konten --location germanywestcentral
az group exists --name rg-az400-konten
Die Organisation legen Sie im Browser an; vor dem Befehl az devops configure kennen Sie ihren Namen. Beachten Sie die Reihenfolge der Standardwerte: az devops configure --defaults project=nordlicht-az400 kann erst nach dem Anlegen des Projekts sinnvoll sein, bis dahin geben Sie --org an.
Die Datei docs/kosten.md kann so aussehen (die Quellen bleiben, die Werte tragen Sie selbst ein):
# Kosten und Grenzen der Übungen (gelesen am <Datum>)
- GitHub Actions, private Repositories: enthaltenes Kontingent laut Seite "GitHub Actions billing": <Wert aus der Seite>.
- Azure DevOps, Microsoft-gehostete Aufträge: ein Auftrag, 60 Minuten je Lauf, 1.800 Minuten im Monat (Seite "Configure and pay for parallel jobs").
- Azure-Testkonto: Guthaben 30 Tage, freie Dienste zwölf Monate (Seite "Avoid charges with your Azure free account").
- Ende des Guthabens: <Datum der Anmeldung plus 30 Tage>.
Übung 2: Aufräumen und die Probe
Sie legen drei Dinge an und entfernen sie wieder, so wie jede spätere Übung endet.
- Legen Sie mit
gh repo createein privates Repositorynordlicht-aufraeumenan und mitaz group createdie Grupperg-az400-aufraeumen. - Legen Sie im Azure-DevOps-Projekt eine Pipeline-Variable oder ein persönliches Zugriffstoken mit kleinstem Bereich und kürzester Laufzeit an (zum Beispiel nur zum Lesen von Arbeitselementen). Notieren Sie nirgends den Wert.
- Löschen Sie das Repository (zuerst
gh auth refresh -s delete_repo), widerrufen Sie das Token in den Benutzereinstellungen von Azure DevOps und löschen Sie die Gruppe. - Prüfen Sie jedes einzelne Objekt, nicht nur eines.
So prüfen Sie es: gh repo view <besitzer>/nordlicht-aufraeumen meldet einen Fehler, weil es das Repository nicht mehr gibt; az group exists --name rg-az400-aufraeumen antwortet false; in Personal access tokens steht das Token nicht mehr oder hat den Zustand widerrufen.
Lösung 2
gh repo create nordlicht-aufraeumen --private
az group create --name rg-az400-aufraeumen --location germanywestcentral
gh auth refresh -s delete_repo
gh repo delete <besitzer>/nordlicht-aufraeumen --yes
az group delete --name rg-az400-aufraeumen --yes --no-wait
gh repo view <besitzer>/nordlicht-aufraeumen
az group exists --name rg-az400-aufraeumen
Das Zugriffstoken legen und widerrufen Sie im Browser unter dem Benutzermenü, Personal access tokens, mit + New Token und Revoke. Microsoft nennt beim Anlegen: den Namen, genau eine Organisation, ein Ablaufdatum und nur die nötigen Bereiche. Kopieren Sie den Wert nicht in Dateien, er wird nur einmal angezeigt.
Das Löschen der Gruppe läuft im Hintergrund; az group exists antwortet erst nach einigen Minuten mit false. Wer nach dem ersten Aufruf noch true sieht, wartet und fragt erneut. Die Kontrollfrage nach dem Repository liefert einen Fehler; das ist die gewünschte Probe. Welchen Wortlaut die Fehlermeldung von gh repo view hat, hat dieser Kurs nicht von einem Konto abgelesen.
Typische Fehler
- Die erste Pipeline startet nicht, weil kein paralleler Auftrag da ist. Die Organisation ist nicht mit einem Azure-Abonnement verknüpft; die kostenlose Stufe für Microsoft-gehostete Aufträge gilt erst, wenn die Abrechnung eingerichtet ist. Prüfen Sie Organization settings, Pipelines, Parallel jobs.
- Der Name der Organisation wird abgelehnt. Microsoft nennt die Meldung
VS850015: The specified name is not allowed to be used: {Organization name}. Verwenden Sie nur englische Buchstaben, Ziffern und Bindestriche, beginnen und enden Sie mit Buchstabe oder Ziffer, unter 50 Zeichen. - Die Organisation lässt sich nicht löschen. Ist sie mit einem Azure-Abonnement für die Abrechnung verknüpft, müssen Sie die Abrechnung vorher entfernen. Bezahlte Benutzer und Dienste des laufenden Zeitraums werden noch berechnet.
- Das Löschen einer Azure-Dienstverbindung meldet „Failed to remove Azure permission“ oder „Failed to remove the service principal from Microsoft Entra ID“. Nach Microsoft verschwindet die Verbindung in Azure DevOps trotzdem; schlägt das Löschen ganz fehl, nennt Microsoft die REST-Schnittstelle mit
deep=false. Entfernen Sie danach das Dienstprinzipal in den App-Registrierungen von Hand. gh repo deletefragt trotz--yesnach. Ohne Repository-Namen wird die Option nach der Dokumentation vonghignoriert. Nennen Sie den Namen im Formatbesitzer/name.- Das Testkonto steht nach 30 Tagen still. Guthaben aufgebraucht oder abgelaufen: Abonnement und Dienste sind deaktiviert, bis Sie das Konto upgraden. Das ist kein Fehler, sondern das beschriebene Verhalten.
Was Sie jetzt können
Sie wählen die drei Konten der Übungen und nennen die Grenzen ihrer kostenlosen Stufen mit Quelle: GitHub Free mit seinem Geldbetrag für private Repositories, Azure DevOps mit einem Auftrag zur selben Zeit, 60 Minuten je Lauf und 1.800 Minuten im Monat nach Verknüpfung mit einem Azure-Abonnement, und das Azure-Testkonto mit seinem Guthaben für 30 Tage. Sie legen Organisation, Projekt und Ressourcengruppe an und beginnen jede Übung in einer Gruppe rg-az400-<übung>. Sie wissen, was nach Zeit kostet. Und Sie räumen alle drei Welten auf: Azure mit az group delete, GitHub mit dem Löschen von Repositories, Token und Runnern, Azure DevOps mit dem Löschen von Projekt und Organisation, dem Widerrufen von Token und dem Entfernen von Dienstverbindungen, jedes Mal mit einer Probe.
Weiterlesen
- GitHub Actions billing:
https://docs.github.com/en/billing/concepts/product-billing/github-actions - GitHub's plans:
https://docs.github.com/en/get-started/learning-about-github/githubs-plans - Deleting a repository:
https://docs.github.com/en/repositories/creating-and-managing-repositories/deleting-a-repository - Archiving repositories:
https://docs.github.com/en/repositories/archiving-a-github-repository/archiving-repositories - Managing your personal access tokens:
https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens - Removing self-hosted runners:
https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/removing-self-hosted-runners - gh repo create:
https://cli.github.com/manual/gh_repo_create - gh repo delete:
https://cli.github.com/manual/gh_repo_delete - Create an organization:
https://learn.microsoft.com/azure/devops/organizations/accounts/create-organization - Configure and pay for parallel jobs:
https://learn.microsoft.com/azure/devops/pipelines/licensing/concurrent-jobs - Create a project in Azure DevOps:
https://learn.microsoft.com/azure/devops/organizations/projects/create-project - Delete a project:
https://learn.microsoft.com/azure/devops/organizations/projects/delete-project - Delete an organization:
https://learn.microsoft.com/azure/devops/organizations/accounts/delete-your-organization - Use personal access tokens:
https://learn.microsoft.com/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate - Manage service connections:
https://learn.microsoft.com/azure/devops/pipelines/library/service-endpoints - Get started with Azure DevOps CLI:
https://learn.microsoft.com/azure/devops/cli/ - Avoid charges with your Azure free account:
https://learn.microsoft.com/azure/cost-management-billing/manage/avoid-charges-free-account