M365Con 2027 – die kostenlose Online-Konferenz · 11–22 Jan 2027 · 120 sessions→ m365con.net
Startseite / Deutsch / 2026-10-30
M365.FM · Deutsch

Power Platform ALM mit GitHub Actions

Quelle, Build, Test und Bereitstellung ohne Rätselraten

Power Platform & Dynamics 365Azure & Entwicklungalmgithub actionsdevopsservice principalenvironment variables

Update ausliefern, Atem anhalten und hoffen, dass es in Entwicklung, Test und Produktion funktioniert? Diese Folge zeigt, warum sich Power Platform ALM wie ein Labyrinth anfühlt und wie Sie mit GitHub Actions jede Phase steuern und nachvollziehen – inklusive der Details, die die meisten Anleitungen auslassen.

▶ Power Platform ALM mit GitHub Actions: Quelle, Build, Test und Bereitstellung ohne Rätselraten (KI-Synchronfassung)

Das erfahren Sie:

  1. Warum Lösungs-ZIP-Dateien Connector-Verweise und Umgebungsvariablen nicht sauber mitnehmen – die häufigste Ursache gescheiterter Bereitstellungen
  2. Die vier ALM-Säulen Quelle, Build, Test und Bereitstellung in der Power-Platform-Welt, inklusive Validierung mit der Power Platform CLI
  3. Trigger und getrennte Jobs pro Umgebung in GitHub Actions statt eines einzigen Workflows für alles
  4. Geheimnisse mit Umgebungsschutzregeln abgrenzen, damit keine Produktions-Verbindungszeichenfolge in der Entwicklung landet
  5. Dienstprinzipale statt persönlicher Konten und bewusst zugeordnete Connector-Verweise für prüfbare Bereitstellungen

Diese Folge ist eine KI-synchronisierte deutsche Fassung des animierten Erklärvideos aus der M365 Show von Microsoft MVP Mirko Peters.

Viele Teams kennen das Gefühl: Ein Update der Power Platform wird ausgeliefert, und dann bleibt nur die Hoffnung, dass es in Entwicklung, Test und Produktion gleichermaßen funktioniert. Das Problem ist selten die einzelne Datei. Es ist die fehlende Transparenz darüber, was beim Verschieben einer Lösung wirklich passiert.

Power Platform ALM mit GitHub Actions
  1. 1QuelleLösungs-ZIP nach jeder relevanten Änderung exportieren und in Git versionieren, damit der Verlauf lückenlos bleibt.
  2. 2BuildMit der Power Platform CLI entpacken, validieren und neu verpacken; Verweise und Abhängigkeiten prüfen.
  3. 3TestFehlende Konnektoren erkennen, wichtige Abläufe validieren und Anmeldeinformationen in der Testumgebung prüfen.
  4. 4Variablen und SecretsJe Umgebung ein eigener Tresor: Secrets begrenzen, Umgebungsvariablen und Connector-Verweise gezielt austauschen.
  5. 5BereitstellungImport per Dienstprinzipal in die Zielumgebung, mit getrennten Workflows und Jobs je Umgebung.
M365.FM · Mirko Peters

Dieser Artikel zeigt, wie Sie Application Lifecycle Management (ALM) für die Power Platform mit GitHub Actions nachvollziehbar machen. Es geht um die vier Säulen Quelle, Build, Test und Bereitstellung, um Trigger und Jobs, um Secrets, Dienstprinzipale und Konnektoren. Und es geht um die Gründe, warum die meisten Anleitungen an genau diesen Stellen zu kurz greifen.

Warum sich Power Platform ALM wie ein Labyrinth anfühlt

Bei einer klassischen Web-App liegt der Code in der Quellcode-Verwaltung, eine Pipeline baut ihn, und er landet mit vorhersehbarem Verhalten in der Produktion. Die Power Platform funktioniert anders. Ein großer Teil der Logik steckt in Drag-and-Drop-Oberflächen, Connector-Bildschirmen und Formeln, die in keinem Git-Repository auftauchen. Selbst wer jeden Schritt eines allgemeinen Administrator-Handbuchs befolgt, stößt deshalb auf schwer zu diagnostizierende Fehler, sobald geschäftskritische Apps die Entwicklungsumgebung verlassen.

Die meisten Anleitungen beschreiben nur das Wie: Lösungs-ZIP exportieren, anderswo importieren. Das Warum bleibt offen. Logik, Verbindungen und Konfigurationen werden in Power Apps nicht wie klassischer Code abgelegt. Abhängigkeiten zu Outlook, SharePoint oder benutzerdefinierten APIs wandern nicht immer sauber in die ZIP-Datei.

Ein typisches Szenario: Eine neue App läuft in der Entwicklung. Die Lösung wird exportiert und im Test importiert, und plötzlich funktioniert der Flow nicht mehr. Meist liegt das nicht an der Datei. Verbindungen zeigen auf den falschen Ort, Berechtigungen passen nicht, oder Datenrichtlinien blockieren Verbindungen, die kurz zuvor noch in Ordnung waren. Mit drei Umgebungen, die jeweils eigene Verbindungen, Datenschutzrichtlinien, Genehmiger und Administratoren haben, hilft Kopieren und Einfügen nicht weiter.

Die häufigsten Ursachen fehlgeschlagener Bereitstellungen sind fehlende Connector-Verweise und schlecht verwaltete Umgebungsvariablen. Die Komplexität hat einen Grund: Die Plattform soll Fachanwendern ermöglichen, leistungsfähige Apps ohne Code zu bauen. Wer die Automatisierung einrichtet, muss dafür selbst nachverfolgen, was im Hintergrund verborgen liegt.

Die vier ALM-Säulen: Quelle, Build, Test, Bereitstellung

Die vier klassischen Säulen helfen auch hier, Struktur zu schaffen. Jede hat in der Power Platform allerdings ihre Eigenheiten.

Quelle: Lösungsdateien statt Code

Die Quelle ist die Lösungs-ZIP-Datei. Darin finden Sie XML- und JSON-Beschreibungsdateien, aber keine Logik wie in TypeScript oder C#. Änderungen, etwa an einer Formel auf einem Bildschirm oder an der Logik eines Flows, werden erst sichtbar, wenn Sie die Lösung erneut exportieren. Sie können die Dateien zwar in Git versionieren. Wer aber nicht nach jeder relevanten Änderung exportiert, hat im Verlauf deutliche Lücken.

Hinzu kommt die Konfiguration: Die Power Platform bündelt umgebungsspezifische Daten mit der Geschäftslogik, also Umgebungsvariablen, Connector-Verweise, dynamische Endpunkte, Rollen und Berechtigungen. Werden sie vor dem Export nicht angepasst, zeigen die Verweise auf die falsche Stelle. So kann es passieren, dass die Hälfte einer App nach der Bereitstellung noch mit dem Entwicklungs-Dataverse statt mit der Produktion spricht.

Build: Prüfen statt Kompilieren

Ein Build bedeutet hier vor allem: Pakete ablegen, das Schema prüfen und Abhängigkeiten verifizieren. In einer GitHub-Actions-Pipeline holt ein Build-Job die committete Lösungsdatei und nutzt die Power Platform CLI von Microsoft, um die Lösung zu entpacken, zu validieren und neu zu verpacken. Die Validierung kann fehlerhafte Verweise oder nicht unterstützte Aktionen abfangen.

Basiert ein Flow jedoch auf einem benutzerdefinierten Connector, der nie in die Quellcode-Verwaltung gelangt ist, verpackt der Build stillschweigend etwas Unvollständiges. Dann ist der Build technisch erfolgreich, aber in UAT oder Produktion fehlen Funktionen. Lösungsdateien machen ALM nur dann portabel, wenn Konnektoren korrekt zugeordnet und Rollen in allen Umgebungen eingerichtet sind.

Test: Was zählt als Test?

In der Power Platform ist das nicht eindeutig. Manchmal ist es die Validierung der Lösung, manchmal werden Testabläufe ausgeführt oder es wird geprüft, ob Konnektoren in einer Testumgebung antworten. Oft passiert das Testen manuell, weil die Validierung der Geschäftslogik einer Canvas-App noch nicht in automatisierte Pipelines eingebunden ist. Automatisieren lassen sich dennoch Prüfungen auf fehlende Konnektoren, die Validierung wichtiger Abläufe und der Nachweis, dass Anmeldeinformationen in der Testumgebung funktionieren.

Bereitstellung: Mehr als ein Import

Bei einer Standard-App genügt es, ein Artefakt nach Azure zu pushen. In der Power Platform müssen Sie Verbindungen zuordnen, Berechtigungen zuweisen, Secrets aktualisieren, Umgebungsvariablen austauschen und den Import mit einem Dienstprinzipal auslösen, nicht mit einem regulären Konto. GitHub Actions kann all das zusammenführen, aber nur, wenn jeder Job weiß, welche Zielumgebung und welche Secrets er verwenden soll.

GitHub Actions: Trigger, Branches und getrennte Jobs

GitHub Actions startet nicht einfach ein Skript, sondern arbeitet mit einer Kette aus Triggern, Jobs und Übergaben zwischen Umgebungen. Diese Struktur verhindert, dass Bereitstellungen zu einem Wirrwarr aus fehlgeschlagenen Schritten werden.

Trigger je Umgebung

Viele Einsteiger lösen den Workflow bei jedem Push oder Pull-Request im Hauptbranch aus. Damit läuft aber alles über einen einzigen Track. Dann schleichen sich Funktionen, die für die Entwicklung gedacht waren, in die Produktion ein, oder Testbereitstellungen überschreiben Produktionseinstellungen. Besser sind eigene Workflows für Entwicklung, Test und Produktion mit jeweils eigenen Triggern. Ein Workflow läuft nur bei Pushes in den Entwicklungsbranch, ein anderer erst bei einem Merge in die Produktionsversion. Das schafft eine klare Grenze zwischen laufender Arbeit und Live-Änderungen. Überprüfen Sie Ihre Trigger außerdem regelmäßig, statt sie nur einmal anzulegen.

Jobs nach Zuständigkeit

Jeder Job sollte einen klar umrissenen Teil des Prozesses übernehmen:

  • Export der Lösung aus der Quellumgebung
  • Validierung, Entpacken, Scan der Lösungsmetadaten, Prüfung der Abhängigkeiten und der vorhandenen Connector-Verweise
  • Vorbereitung der umgebungsspezifischen Variablen und Anpassung der Lösung an die Zielumgebung
  • Import in die richtige Umgebung per Dienstprinzipal

Code, der Lösungen exportiert und validiert, sollte nicht wissen, wie Secrets bereitgestellt werden. So lassen sich Fehler leichter eingrenzen, Änderungen zurückrollen und Abläufe prüfen. Ein Pipeline-Fehler verweist direkt auf das Teil, das behoben werden muss.

Benutzerkonto vs. Dienstprinzipal

Persönliches Benutzerkonto

  • Schneller Einstieg, aber Berechtigungsgrenzen ohne eindeutige Fehlermeldung
  • Abhängig von Kennwort-Zurücksetzungen
  • Unklare Spur in den Überwachungsprotokollen
  • Pipeline blockiert, wenn der Benutzer das Unternehmen verlässt
  • Risiko bei Compliance-Audits

Dienstprinzipal

  • App-Identität, gebunden an eine App-Registrierung in Azure AD
  • Erhält nur die minimal nötigen Berechtigungen
  • Alle Änderungen werden unter diesem Konto protokolliert
  • Sauberer Prüfpfad: Wer hat was geändert
  • Unabhängig von einzelnen Personen
M365.FM · Mirko Peters

Secrets und Umgebungsvariablen: ein Tresor pro Umgebung

Umgebungsvariablen und Secrets sind keine bloßen Platzhalter, sondern der Klebstoff der Pipeline. Verbindungszeichenfolgen, API-Schlüssel und gemeinsam genutzte Passwörter müssen zwischen Jobs verfügbar sein, dürfen aber nie über Umgebungsgrenzen hinweg verloren gehen. Hartcodierte Secrets oder wiederverwendete Variablen machen die Pipeline fehleranfällig und riskant.

Ein hilfreiches Modell: Jede Umgebung ist ein eigener digitaler Tresor, ein verschlossener Kasten, den nur die richtigen Jobs öffnen können. GitHub erlaubt es, Secrets auf Umgebungen zu beschränken. Ein Job in der Entwicklung kann dann nicht auf Produktionsanmeldeinformationen zugreifen und umgekehrt. Umgebungsschutzregeln und ein strikt begrenzter Secret-Bereich stoppen umgebungsübergreifende Datenlecks, bevor sie entstehen. Beide Dokumentationen, die von Microsoft wie die von GitHub, betonen diesen Punkt.

Ein Beispiel aus der Praxis: Ein Team führte den gesamten ALM-Prozess über einen einzigen Workflow aus. Es merkte erst spät, dass eine Verbindungszeichenfolge der Produktionsdatenbank in der Entwicklungsumgebung auftauchte, weil Secrets zwischen Jobs geteilt wurden. Es gab keinen Absturz und keine Fehlermeldung, die Daten flossen still und leise.

Umgebungsvariablen helfen auch bei den Zielwerten. Sie trennen, was sich pro Umgebung ändert und was gleich bleibt. Endpunkte oder API-Schlüssel lassen sich bei jeder Bereitstellung austauschen, ohne App oder Flow umzuschreiben. Ein Flow, der in der Entwicklung mit einer Dev-Dataverse-Tabelle arbeitet, nutzt nach dem Import die Produktionstabelle, wenn die Variable im Bereitstellungsprozess geändert wird.

Dienstprinzipale und Konnektoren richtig behandeln

Warum Dienstprinzipale statt Benutzerkonten

Viele Teams exportieren und importieren Lösungen zunächst mit persönlichen Benutzerkonten, weil der Einstieg so schneller geht. In der Automatisierung rächt sich das: Es drohen Berechtigungsgrenzen, teils ohne eindeutige Fehlermeldung, und Compliance-Audits, weil wichtige Bereitstellungen unter einem persönlichen Konto laufen. Die Pipeline hängt zudem von Kennwort-Zurücksetzungen ab, hinterlässt eine unklare Spur in den Überwachungsprotokollen und blockiert, sobald der ursprüngliche Benutzer das Unternehmen verlässt oder den Zugriff verliert.

Ein Dienstprinzipal ist dagegen eine App-Identität, gebunden an eine App-Registrierung in Azure AD und nicht an eine reale Person. Er erhält nur die minimalen Berechtigungen, die für die Bereitstellung nötig sind. Alle Änderungen werden unter diesem Konto protokolliert, sodass Sie einen sauberen Prüfpfad haben und wissen, wer was geändert hat. Auch ein einziger Satz Anmeldeinformationen für Entwicklung und Produktion führt zu Chaos, Datenlecks und Berechtigungsfehlern.

Connector-Verweise als Lesezeichen

Ein Connector ist in der Power Platform keine statische Information, die in der App mitreist. Er ist dynamisch und oft pro Umgebung eindeutig. Connector-Verweise verhalten sich wie Lesezeichen: Sie zeigen auf Verbindungsobjekte, die nur in der Umgebung existieren, in der sie erstellt wurden. Wird die Lösung importiert, ist beispielsweise die HTTP-Connector-Instanz für einen Drittanbieterdienst nicht vorhanden. Der Verweis zeigt dann auf ein fehlendes Objekt, und die Abläufe brechen stillschweigend, bis jemand die Verbindungen manuell neu anlegt und zuordnet.

Besonders heikel wird es, wenn Umgebungen auseinanderdriften. Ein in der Entwicklung genehmigter benutzerdefinierter Connector, der auf eine Sandbox-API zugreift, kann in der Produktion fehlen oder durch die Datenrichtlinien (DLP) der Organisation gar nicht erlaubt sein. In einem Fall bei einem Gesundheitskonzern verwies die Connector-Referenz weiterhin auf eine alte Testdatenbank. Echte Daten flossen durch die falschen Leitungen, und es kam beinahe zu einem Compliance-Vorfall. Die Pipeline hatte alles wie geplant exportiert.

Häufige Fehler und Stolpersteine

  • Connector-Verweise nicht neu zuordnen: Die Lösung läuft formal, spricht aber mit dem falschen System oder bricht still ab.
  • Umgebungsvariablen nach dem Export nicht aktualisieren: Schon eine harmlos wirkende Änderung kann eine Live-App lahmlegen.
  • Persönliche Konten statt Dienstprinzipale: Das führt zu Berechtigungsproblemen, unklaren Audit-Spuren und Abhängigkeit von einzelnen Personen.
  • Ein Workflow für alles: Secrets werden zwischen Jobs geteilt und gelangen unbemerkt in andere Umgebungen.
  • Ein Satz Anmeldeinformationen für alle Umgebungen: Das erzeugt Datenlecks und Fehler, die nur in einer Umgebung auftreten.
  • Unregelmäßiger Export in Git: Ohne Disziplin hat der Verlauf Lücken, und Logik aus Formeln oder Flow-Einstellungen bleibt unsichtbar.
  • Benutzerdefinierte Connectoren außerhalb der Quellcode-Verwaltung: Der Build verpackt dann unbemerkt eine unvollständige Lösung.
  • Trigger nie überprüfen: Veraltete Trigger öffnen Wege zwischen Entwicklung und Produktion.

Praktische Takeaways

  • Exportieren und committen Sie Lösungsdateien nach jeder relevanten Änderung, damit der Verlauf lückenlos bleibt.
  • Behandeln Sie Connector-Referenzen und Rollenzuordnungen immer als festen Teil der Pipeline.
  • Nutzen Sie die Power Platform CLI im Build, um Lösungen zu entpacken, zu validieren und neu zu verpacken.
  • Automatisieren Sie, was sich automatisieren lässt: Prüfungen auf fehlende Konnektoren, Validierung wichtiger Abläufe und Test der Anmeldeinformationen.
  • Legen Sie je Umgebung eigene Workflows und Trigger an, damit Entwicklung, Test und Produktion klar getrennt bleiben.
  • Teilen Sie Jobs nach Zuständigkeit auf: Export und Validierung, Variablenvorbereitung, Import.
  • Beschränken Sie Secrets auf ihre Umgebung und nutzen Sie Umgebungsschutzregeln.
  • Führen Sie Importe ausschließlich mit Dienstprinzipalen aus, die nur die minimal nötigen Berechtigungen haben.
  • Tauschen Sie Endpunkte und Schlüssel über Umgebungsvariablen aus, statt sie hart zu codieren.
Checkliste für eine robuste Power-Platform-Pipeline
M365.FM · Mirko Peters

Fazit

Power Platform ALM wirkt chaotisch, weil Logik, Verbindungen und Konfigurationen anders gespeichert werden als klassischer Code. Mit den vier Säulen Quelle, Build, Test und Bereitstellung, klar getrennten GitHub-Actions-Workflows, umgebungsbezogenen Secrets, Dienstprinzipalen und bewusst zugeordneten Konnektoren wird daraus ein vorhersehbarer Prozess. Wenn etwas schiefgeht, wissen Sie dann, ob eine Connector-Zuordnung, eine Variable oder eine fehlende Berechtigung die Ursache ist. Prüfer können Änderungen nachverfolgen, und Bereitstellungen hängen nicht mehr von Einzelpersonen ab. Entscheidend ist, Secrets, Konnektoren und Dienstprinzipale als das zu behandeln, was sie sind: zentrale Bausteine der Pipeline.

Häufige Fragen

Warum schlägt der Import einer Power-Platform-Lösung in der Testumgebung oft fehl, obwohl er in der Entwicklung funktioniert?

Meist liegt es nicht an der ZIP-Datei. Verbindungen zeigen auf den falschen Ort, Berechtigungen passen nicht, oder Datenrichtlinien blockieren Connectoren. Die häufigsten Ursachen sind fehlende Connector-Verweise und schlecht verwaltete Umgebungsvariablen, da jede Umgebung eigene Verbindungen und Richtlinien hat.

Welche vier Säulen gehören zum ALM der Power Platform mit GitHub Actions?

Die vier Säulen sind Quelle, Build, Test und Bereitstellung. Die Quelle ist die Lösungs-ZIP-Datei, der Build prüft Schema und Abhängigkeiten mit der Power Platform CLI, Tests validieren Konnektoren und Abläufe, die Bereitstellung ordnet Verbindungen, Berechtigungen und Variablen zu.

Warum sollte ich für Power-Platform-Deployments einen Dienstprinzipal statt eines Benutzerkontos verwenden?

Ein Dienstprinzipal ist eine an eine Azure-AD-App-Registrierung gebundene Identität mit minimalen Berechtigungen. Alle Änderungen werden darunter protokolliert, was einen sauberen Prüfpfad schafft. Persönliche Konten verursachen Berechtigungsprobleme, unklare Audit-Spuren und blockieren die Pipeline, wenn der Benutzer das Unternehmen verlässt.

Wie trenne ich Secrets und Umgebungen in GitHub Actions sicher voneinander?

Nutzen Sie getrennte Workflows und Trigger für Entwicklung, Test und Produktion. Beschränken Sie Secrets in GitHub auf ihre jeweilige Umgebung und setzen Sie Umgebungsschutzregeln ein. So kann ein Entwicklungs-Job nicht auf Produktionsanmeldeinformationen zugreifen. Endpunkte und Schlüssel tauschen Sie über Umgebungsvariablen aus.

Weitere Folgen

Power Apps Code Apps einfach erklärt

Enterprise-KI mit Power Platform und Azure OpenAI

Prompt Injection & KI-Governance

Power-Pages-Formularvalidierung schnell reparieren

Eigene Copilot-Funktionen in Business Central registrieren

Hauptbuch in Dynamics 365 Finance einfach erklärt

Alle Folgen →