Intune DevOps Pipeline: Objekte in den Prod-Tenant
Baue eine Intune-CI-Pipeline in Azure DevOps, um Konfigurationen mit sichererem Release-Management vom Dev- in den Prod-Tenant zu verschieben.

Je mehr Clients in deinem Tenant verwaltet werden und je mehr Personen Contributor-Rechte in deinem Tenant haben, desto wichtiger werden gute Release-Management-Prozesse. In diesem Blogbeitrag möchte ich dir meine Intune-CI-Pipeline vorstellen, mit der du Konfigurationen von einem Tenant in einen anderen übertragen kannst. Das bietet die Möglichkeit, dass nur eine kleine Anzahl von Administratoren Zugriff auf den Prod-Tenant hat und alle anderen Konfigurationen in einem Dev-Tenant erstellen, die dann über eine DevOps-Pipeline in den Prod-Tenant übertragen werden.

Warum lohnt sich dieser Aufwand? Sobald mehrere Administratoren parallel Konfigurationen anpassen, schleichen sich im Prod-Tenant schnell Fehler ein: ein falsch gesetztes Profil, eine versehentlich geänderte Compliance-Richtlinie oder eine App-Zuweisung, die niemand getestet hat. Mit einer Intune DevOps Pipeline trennst du sauber zwischen der Umgebung, in der experimentiert wird, und der Umgebung, in der produktiv verwaltet wird. Änderungen durchlaufen einen klaren Freigabeweg, statt direkt auf den produktiven Clients zu landen, und du behältst jederzeit den Überblick, wer was wann übertragen hat.
Einen Service Principal erstellen
- Öffne das Azure Portal
- Suche nach Microsoft Entra ID
- Wähle App registration -> + New registration

- Gib einen Name ein
- Klicke auf Register

- Wähle API permissions
- Klicke auf + Add a permission

- Wähle Microsoft Graph

- Wähle Application permissions
- Wähle die folgenden Graph-Berechtigungen:
- DeviceManagementConfiguration.ReadWrite.All
- DeviceManagementApps.ReadWrite.All
- Klicke auf App permissions

- Klicke auf Grant admin consent
- Bestätige mit Yes

- Lass den Browser-Tab geöffnet, wir brauchen ihn gleich wieder
Subscription zu Azure DevOps hinzufügen
- Öffne Azure DevOps in einem neuen Tab
- Erstelle eine neue Organization und ein Project

- Öffne das Project
- Wähle Pipelines and Library
- Klicke auf +Variable group

- Gehe zurück zur App Registration und kopiere die AppId, TenantId und erstelle ein Secret

- Navigiere zu Certificates & secrets
- Klicke auf + New client secret
- Füge eine Description und ein Expires date hinzu

- Gib IntuneProd als Name für die Variable Group ein
- Erstelle drei Variablen (ProdAppSecret, ProdAppId, ProdTenantId) und füge die Werte aus der App Registration ein
- Wähle secure variable für das AppSecret
- Klicke auf Save

Die Dev-Umgebung einrichten
Wiederhole dieselben Schritte für deine Dev-Umgebung, wähle aber die folgenden Berechtigungen:
- DeviceManagementApps.Read.All
- DeviceManagementConfiguration.Read.All

Pipeline einrichten
- Navigiere zu Repos -> Files
- Wähle Import repository

- Gib die URL aus meinem GitHub-Repository ein:
https://github.com/JayRHa/IntuneDevOps.git
- Gib einen Name ein und klicke auf Import

- Navigiere zu Pipelines
- Klicke auf New pipeline

- Wähle Azure Repos Git

- Wähle das importierte Repository

- Wähle Existing Azure Pipeline YAML file
- Wähle die azure-pipelines.yaml
- Klicke auf Continue

- Klicke auf Save

Wie funktioniert es
- Kopiere die Object Id des Objekts, das du im Dev-Tenant kopieren möchtest. Die Id findest du in der URL.

- Gib den Object type und die Object Id in der Pipeline ein
- Klicke auf Run

DevOps Runner beschaffen
Wenn du die Pipeline startest, ohne einen DevOps Runner erworben zu haben, erhältst du die folgende Fehlermeldung.

- Fülle das Formular unter https://aka.ms/azpipelines-parallelism-request aus, um eine kostenlose Testlizenz zu erhalten (kann 2-3 Tage dauern)
- Du kannst auch einen Runner auf deinem PC oder auf einem Server in deiner Organisation installieren
- Du kannst außerdem eine Abrechnung im Bereich Billing in den Project settings hinzufügen

Fazit
Ich hoffe, dass ich dir helfen kann, das Übertragen von Konfigurationen von einem Dev- in den Prod-Tenant zu vereinfachen. Wenn dir das gefallen hat, magst du vielleicht auch how to create PowerShell script to automate tasks in Intune. Ich freue mich über Tester und Feedback zu meiner Intune DevOps Pipeline, damit ich es in einer der nächsten Versionen berücksichtigen kann. Anbei die Features, die ich für die nächsten Releases plane:
Ein praktischer Tipp aus der Praxis: Beginne mit einem einzelnen, unkritischen Objekttyp wie einem Konfigurationsprofil, bevor du die Pipeline für Compliance-Richtlinien oder App-Zuweisungen nutzt. So lernst du den Ablauf kennen, ohne im Fehlerfall produktive Geräte zu gefährden. Achte außerdem darauf, dem Dev-Service-Principal nur Lese-Berechtigungen zu geben – die Pipeline soll aus der Dev-Umgebung lediglich lesen und ausschließlich im Prod-Tenant schreiben. Dieses Prinzip der minimalen Rechte verhindert, dass eine fehlerhafte Pipeline ungewollt deine Quellkonfigurationen überschreibt.
- Debug-Option einbauen
- Mehr Object types einbauen
- Prüfung der Namenskonvention hinzufügen
- Assignments einbauen
- Genehmigungsprozess einbauen
Kommentare
I have some questions on this, I found the layout a little confusing.
Setup Pipeline. Do I do this in both the Test and Prod tenant? I only did it in Test, and got the following error:
An error occurred while loading the YAML build pipeline. Variable group was not found or is not authorized for use. For authorization details, refer to https://aka.ms/yamlauthz.
I’m in two different tenants, I’m assuming I’m missing something for Test to see Prod and vice versa?
Does everything need to be named exactly the same in both instances? Apps, Projects, Variables, etc?
Hey Joe, you only need one pipeline for both. The variables groups need the exact name as I used in my blog or you have to change it in the yaml file. If you need help let me know
Hi Thanks for the post.. i am getting the error in get object from dev. Something went wrong by getting the object from Intune remote server returned an error: (404) Not Found. I am not getting the object ID in url. i can see only policy ID and template ID also from some end point security polices. Can you please share how to get Object ID.
Also you mentioned you could add more object types. please share the link if you have already published.