{"id":23514,"date":"2025-02-12T18:43:06","date_gmt":"2025-02-12T17:43:06","guid":{"rendered":"https:\/\/whiteduck.de\/?p=23514"},"modified":"2025-02-14T09:22:19","modified_gmt":"2025-02-14T08:22:19","slug":"managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern","status":"publish","type":"post","link":"https:\/\/whiteduck.de\/en\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\/","title":{"rendered":"&#8220;Managed DevOps Pools for Azure DevOps&#8221; und wie diese unser Leben erleichtern"},"content":{"rendered":"<p><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;\" ><\/div><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 1170px + 0px );margin-left: calc(-0px \/ 2 );margin-right: calc(-0px \/ 2 );\"><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-one-full fusion-column-first fusion-column-last\" style=\"--awb-bg-size:cover;width:100%;\"><div class=\"fusion-column-wrapper fusion-flex-column-wrapper-legacy\"><div class=\"fusion-clearfix\"><\/div><\/div><\/div><div class=\"fusion-title title fusion-title-1 fusion-sep-none fusion-title-text fusion-title-size-one\" style=\"--awb-margin-top-small:0px;--awb-margin-right-small:0px;--awb-margin-bottom-small:20px;--awb-margin-left-small:0px;\"><h1 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:32;line-height:1.31;\"><\/p>\n<p>&#8220;Managed DevOps Pools for Azure DevOps&#8221; und wie diese unser Leben erleichtern<\/p>\n<p><\/h1><\/div><div class=\"fusion-text fusion-text-1\"><\/div><\/p>\n\n\n<p class=\"wp-block-paragraph\">In diesem Beitrag stellen wir <a href=\"https:\/\/learn.microsoft.com\/azure\/devops\/managed-devops-pools\" target=\"_blank\" rel=\"noreferrer noopener\">Azure DevOps Managed DevOps Pools<\/a> vor und erkl\u00e4ren, wie sie uns das Leben erleichtern. Wir vergleichen Managed DevOps Pools mit Self-Hosted Agents und zeigen, wie man diese Funktionalit\u00e4t vollst\u00e4ndig mit Terraform automatisiert. Schlie\u00dflich besprechen wir, wie man sie in der eigenen CI\/CD-Pipeline verwendet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Inhalt<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"#WasverstehtmanunterManagedDevOpsPoolsforAzureDevOps?\">Was versteht man unter Managed DevOps Pools for Azure DevOps?<\/a><\/li>\n\n\n\n<li><a href=\"#WiefunktioniertManagedDevOpsPoolsforAzureDevOps?\">Wie funktioniert Managed DevOps Pools for Azure DevOps?<\/a><\/li>\n\n\n\n<li><a href=\"#WassinddieUnterschiedezudenSelfHostedAgentsundzudenVMSSAgents\">Was sind die Unterschiede zu den Self-Hosted Agents und zu den VMSS Agents?<\/a><\/li>\n\n\n\n<li><a href=\"#WelcheVorteilesehenwirimEinsatzvonAzureManagedPools?\">Welche Vorteile sehen wir im Einsatz von Azure Managed Pools?<\/a><\/li>\n\n\n\n<li><a href=\"#WieautomatisiertmandasSetupviaTerraformamBeispielvonManagedPoolimeigenenNetzwerk?\">Wie automatisiert man das Setup via Terraform am Beispiel von Managed Pool im eigenen Netzwerk?<\/a><\/li>\n\n\n\n<li><a href=\"#WelcheLimitierungengibtesbeiManagedDevOpsPools?\">Welche Limitierungen gibt es bei Managed DevOps Pools?<\/a><\/li>\n<\/ul>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"WasverstehtmanunterManagedDevOpsPoolsforAzureDevOps?\">Was versteht man unter Managed DevOps Pools for Azure DevOps?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Azure DevOps Agent-Pools sind eine Sammlung von Build- und Release-Agents, die verwendet werden, um CI\/CD (Continuous Integration\/Continuous Delivery)-Pipelines auf spezifischen Maschinen, virtuellen Maschinen oder Containern auszuf\u00fchren. Die zugrunde liegende Infrastruktur f\u00fcr die Agent-Pools wird durch den neuen Service &#8220;Managed DevOps Pools for Azure DevOps&#8221; von Microsoft bereitgestellt und verwaltet. Dieser Service automatisiert und vereinfacht nahezu alle Aufgaben rund um das Management der Agent-Pools und bietet den Endanwendern die gr\u00f6\u00dftm\u00f6gliche Flexibilit\u00e4t in der Anpassung an die eigene Umgebung und an die Anforderungen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Microsoft-gehostete Agents bieten keine Netzwerk-Integration, sodass man entweder auf das Hosting durch Microsoft verzichten oder den komplexen und wartungsintensiven Weg \u00fcber Virtual Machine Scale Sets gehen musste um self-hosted Agents mit dem eigenen Netzwerk zu integrieren. Managed Pools for Azure DevOps l\u00f6st diese Diskrepanz und vereint nun beides \u2013 Hosting und Management durch Microsoft sowie unz\u00e4hlige Anpassungsm\u00f6glichkeiten, inklusive der Anbindung an das eigene Netzwerk.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"WiefunktioniertManagedDevOpsPoolsforAzureDevOps?\">Wie funktioniert Managed DevOps Pools for Azure DevOps?<\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img decoding=\"async\" width=\"2533\" height=\"1355\" src=\"https:\/\/whiteduck.de\/wp-content\/uploads\/hintergrund-weiss.png\" data-orig-src=\"https:\/\/whiteduck.de\/wp-content\/uploads\/hintergrund-weiss.png\" alt=\"\" class=\"lazyload wp-image-23536\" style=\"width:732px;height:auto\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%272533%27%20height%3D%271355%27%20viewBox%3D%270%200%202533%201355%27%3E%3Crect%20width%3D%272533%27%20height%3D%271355%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/whiteduck.de\/wp-content\/uploads\/hintergrund-weiss-200x107.png 200w, https:\/\/whiteduck.de\/wp-content\/uploads\/hintergrund-weiss-300x160.png 300w, https:\/\/whiteduck.de\/wp-content\/uploads\/hintergrund-weiss-400x214.png 400w, https:\/\/whiteduck.de\/wp-content\/uploads\/hintergrund-weiss-600x321.png 600w, https:\/\/whiteduck.de\/wp-content\/uploads\/hintergrund-weiss-768x411.png 768w, https:\/\/whiteduck.de\/wp-content\/uploads\/hintergrund-weiss-800x428.png 800w, https:\/\/whiteduck.de\/wp-content\/uploads\/hintergrund-weiss-1024x548.png 1024w, https:\/\/whiteduck.de\/wp-content\/uploads\/hintergrund-weiss-1200x642.png 1200w, https:\/\/whiteduck.de\/wp-content\/uploads\/hintergrund-weiss-1536x822.png 1536w, https:\/\/whiteduck.de\/wp-content\/uploads\/hintergrund-weiss.png 2533w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 2533px) 100vw, 2533px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Auf der obigen Grafik sieht man ein vereinfachtes Setup eines Managed DevOps Pools im eigenen Netzwerk. Die Pipelines aus der Azure DevOps Organisation greifen auf den Managed DevOps Pool zu. Dieser l\u00e4uft in der eigenen Subscription im privaten Netzwerk. Die eigentlichen Agents sind hierbei durch Microsoft abstrahiert.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um die Kommunikation zu erm\u00f6glichen, bedarf es eines dedizierten Service Principals namens &#8220;DevOpsInfrastructure&#8221; (Dieser wird beim Registrieren des Resource Providers Microsoft.DevOpsInfrastructure automatisch angelegt). Der Service Principal &#8220;DevOpsInfrastructure&#8221; ben\u00f6tigt auf das virtuelle Netzwerk die Berechtigungen &#8220;Network Contributor&#8221; sowie &#8220;Reader&#8221;. Weiterhin ist es m\u00f6glich die notwendigen Rechte durch die Definition einer benutzerdefinierte Rolle zu reduzieren.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"WassinddieUnterschiedezudenSelfHostedAgentsundzudenVMSSAgents?\">Was sind die Unterschiede zu den Self-Hosted Agents und zu den VMSS Agents?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Die Unterschiede zwischen den drei Optionen lassen sich in folgender Gegen\u00fcberstellung besonders gut erkennen:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>&nbsp;<\/strong><\/td><td><strong>Self-hosted Agents<\/strong><\/td><td><strong>VMSS Agents<\/strong><\/td><td><strong>MDP Agents<\/strong><\/td><\/tr><tr><td><strong>Infrastruktur<\/strong><\/td><td>Eigene Verantwortung<\/td><td>Eigene Verantwortung<\/td><td>Verwaltung durch Microsoft<\/td><\/tr><tr><td><strong>Kontrolle<\/strong><\/td><td>Volle Kontrolle<\/td><td>Volle Kontrolle<\/td><td>Kein Zugriff auf die zugrundeliegende VMs<\/td><\/tr><tr><td><strong>Skalierung<\/strong><\/td><td>Keine Skalierung<\/td><td>Azure Pipelines \u00fcbernehmen die Skalierung<\/td><td>Vollautomatisierte Skalierung, sehr gro\u00dfer Pool an Agents<\/td><\/tr><tr><td><strong>Kosten<\/strong><\/td><td>Volle (Fix)Kosten f\u00fcr die Infrastruktur<\/td><td>Kosten f\u00fcr Compute und Parallel Jobs<\/td><td>Kosten f\u00fcr Compute und Parallel Jobs<\/td><\/tr><tr><td><strong>Wartung<\/strong><\/td><td>Eigene Verantwortung<\/td><td>Eigene Verantwortung<\/td><td>Wartung durch Microsoft<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"WelcheVorteilesehenwirimEinsatzvonAzureManagedPools?\">Welche Vorteile sehen wir im Einsatz von Azure Managed Pools?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Um zu erkl\u00e4ren, warum wir Azure Managed Pools zum neuen Standard in unserem Projektgesch\u00e4ft definiert haben, m\u00fcssen wir etwas ausholen. Jedem Unternehmen ist es wichtig, dass auf seine privaten Ressourcen sicher zugegriffen wird. Den Entwicklerteams ist es wichtig, dass die Jobs und die Pipelines parallel und schnell laufen. Den Administratoren ist es wichtig, dass der Wartungsaufwand minimal bleibt. Den Platform Engineers ist es wichtig, dass das Setup rund um die Pipelines weitestgehend automatisiert abl\u00e4uft.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Als wir die Ank\u00fcndigung von Azure DevOps Managed Pools im Sommer 2024 gesehen und im sp\u00e4ten Herbst \u00fcber die allgemeine Freigabe gelesen haben, mussten wir es sofort ausprobieren &#8211; unsere Erwartungen wurden mehr als erf\u00fcllt. Wir sind nun in der Lage, vollautomatisiert via Terraform unseren Kunden Agents anzubieten, die mit wenig Aufwand sicher im Kundennetz laufen, nach Belieben skalieren k\u00f6nnen, komplett wartungsfrei sind.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"WieautomatisiertmandasSetupviaTerraformamBeispielvonManagedPoolimeigenenNetzwerk?\">Wie automatisiert man das Setup via Terraform am Beispiel von Managed Pool im eigenen Netzwerk?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Grundlegende Voraussetzungen sind eine Azure DevOps Organisation, ein Azure DevOps Projekt, eine administrativen Zugriff auf das Projekt und die Anbindung der Organisation an den Entra ID Dienst.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zum Ausf\u00fchren der Pipeline und zum Erstellen der Infrastruktur wird ein Service Principal verwendet. Der Service Principal sowie alles Notwendige f\u00fcr den Terraform State k\u00f6nnen mithilfe unseres Open-Source Projekt <a href=\"https:\/\/github.com\/whiteducksoftware\/terraform-scaffold-for-azure\" target=\"_blank\" rel=\"noreferrer noopener\">&#8220;Terraform scaffolding for Azure&#8221;<\/a>angelegt werden (Weitere Informationen gibt es im zugeh\u00f6rigen <a href=\"https:\/\/whiteduck.de\/en\/production-ready-terraform-project-scaffolding-for-azure\/\" target=\"_blank\" rel=\"noreferrer noopener\">Blogpost<\/a>). Unser Terraform Scaffolding ist nach dem Prinzip der minimalen Berechtigungen (least privilege) aufgesetzt. Die meisten Anwendungsf\u00e4lle sind mit den im Skript verwendeten minimalen Berechtigungen abgedeckt. Im Fall von Managed Pools muss im Entra ID dem Service Principal das Recht &#8220;Application.ReadAll&#8221; zugewiesen werden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sobald die Voraussetzungen erf\u00fcllt sind (DevOps Organisation, Projekt, Service Principal, Terraform State und ein Terraform-Projekt, z.B. in VS Code), muss man als Erstes die notwendigen Resource Providers: &#8220;Microsoft.DevOpsInfrastructure&#8221; und &#8220;Microsoft.DevCenter&#8221; definieren.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>terraform {\n  required_providers {\n    azurerm = {\n      source  = \"hashicorp\/azurerm\"\n      version = \"4.17.0\"\n    }\n    azapi = {\n      source  = \"Azure\/azapi\"\n      version = \"2.2.0\"\n    }\n    azurecaf = {\n      source  = \"aztfmod\/azurecaf\"\n      version = \"1.2.28\"\n    }\n    azuread = {\n      source  = \"hashicorp\/azuread\"\n      version = \"3.1.0\"\n    }\n  }\n\n  backend \"azurerm\" {\n  }\n  required_version = \"1.10.5\"\n}\nprovider \"azuread\" {\n}\n\nprovider \"azurerm\" {\n  features {}\n  subscription_id                 = \"XYZ\"\n  resource_provider_registrations = \"core\"\n  resource_providers_to_register = &#091;\n    \"Microsoft.DevOpsInfrastructure\",\n    \"Microsoft.DevCenter\"\n  ]\n}\n\nprovider \"azapi\" {\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Beim Registrieren von Microsoft.DevOpsInfrastructure wird in EntraID eine Enterprise Application mit dem Namen \u201eDevOpsInfrastructure\u201d angelegt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Da unser Managed Pool in unserem privaten Azure Netzwerk laufen sollen, m\u00fcssen wir dem \u201eDevOpsInfrastructure\u201c Service Principal entsprechende Rechte zuweisen. Im ersten Schritt lesen wir den Service Principal ein:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>data \"azuread_service_principal\" \"managed_pool_sp\" {\n  display_name = \"DevOpsInfrastructure\"\n}\ndata \"azurerm_client_config\" \"current\" {}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dann legen wir vorbereitend eine variables.tf an in der wir die notwendigen Variablen definieren:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>variable \"project\" {\n  type    = string\n  default = \"poc\"\n}\nvariable \"location\" {\n  type    = string\n  default = \"swedencentral\"\n}\nvariable \"stage\" {\n  type    = string\n  default = \"dev\"\n}\nvariable \"vnet_address_space\" {\n  type    = list(string)\n  default = &#091;\"10.0.0.0\/16\"]\n}\nvariable \"subnet_address_space_runner\" {\n  type    = list(string)\n  default = &#091;\"10.0.0.0\/24\"]\n}\nvariable \"azure_devops_organization\" {\n  type    = string\n  default = \"your-devops-org-name\"\n}\nvariable \"azure_devops_project\" {\n  type    = string\n  default = \"your-devops-project-name\"\n}\nvariable \"parallelism\" {\n  type    = number\n  default = 2\n}\nvariable \"maximumConcurrency\" {\n  type    = number\n  default = 2\n}\nvariable \"maxAgentLifetime\" {\n  type    = string\n  default = \"7.00:00:00\"\n}\nvariable \"gracePeriodTimeSpan\" {\n  type    = string\n  default = \"00:00:00\"\n}\nvariable \"runner_sku\" {\n  type    = string\n  default = \"Standard_B2ms\"\n}\nvariable \"runner_state\" {\n  type    = string\n  default = \"Stateful\"\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nun erstellen wir neben der Resource Group und dem VNet ein eigenes Subnet mit Service Delegation f\u00fcr die Agents des Managed Pools. Dieses Subnet wird ausschlie\u00dflich vom Managed Pool for Azure DevOps verwendet (f\u00fcr alle unterst\u00fctzten Ressourcen verwenden wir das Microsoft Cloud Adoption Framework (CAF), um die konsistente und klare Benennung der Azure-Ressourcen zu gew\u00e4hrleisten):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>resource \"azurecaf_name\" \"rg_core\" {\n  name          = var.project\n  resource_type = \"azurerm_resource_group\"\n  suffixes      = &#091;var.stage, \"core\"]\n}\n\nresource \"azurecaf_name\" \"vnet\" {\n  name          = var.project\n  resource_type = \"azurerm_virtual_network\"\n  suffixes      = &#091;var.stage, \"core\"]\n}\n\nresource \"azurecaf_name\" \"subnet\" {\n  name          = var.project\n  resource_type = \"azurerm_subnet\"\n  suffixes      = &#091;var.stage]\n}\n\nlocals {\n  tags = {\n    environment = var.stage\n    location    = var.location\n    managedBy   = data.azurerm_client_config.current.client_id\n  }\n  devOpsInfrastructureUser_object_id = data.azuread_service_principal.managed_pool_sp.object_id\n}\n\nresource \"azurerm_resource_group\" \"core\" {\n  name     = azurecaf_name.rg_core.result\n  location = var.location\n  tags     = local.tags\n}\n\nresource \"azurerm_virtual_network\" \"core\" {\n  name                = azurecaf_name.vnet.result\n  address_space       = var.vnet_address_space\n  location            = azurerm_resource_group.core.location\n  resource_group_name = azurerm_resource_group.core.name\n  tags                = local.tags\n}\n\nresource \"azurerm_subnet\" \"runner\" {\n  name                 = \"${azurecaf_name.subnet.result}-runner\"\n  resource_group_name  = azurerm_resource_group.core.name\n  virtual_network_name = azurerm_virtual_network.core.name\n  address_prefixes     = var.subnet_address_space_runner\n \n  delegation {\n    name = \"Microsoft.DevOpsInfrastructure\/pools\"\n\n    service_delegation {\n      actions = &#091;\n        \"Microsoft.Network\/virtualNetworks\/subnets\/join\/action\",\n      ]\n      name = \"Microsoft.DevOpsInfrastructure\/pools\"\n    }\n  }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In diesem Schritt berechtigen wir den Service Principal \u201cDevOpsInfrastructure\u201c auf unserem privaten Azure Netzwerk:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>resource \"azurerm_role_assignment\" \"vnet_network_contributor_doi_user\" {\n  scope                = azurerm_virtual_network.core.id\n  role_definition_name = \"Network Contributor\"\n  principal_id         = local.devOpsInfrastructureUser_object_id\n}\n\nresource \"azurerm_role_assignment\" \"vnet_reader_doi_user\" {\n  scope                = azurerm_virtual_network.core.id\n  role_definition_name = \"Reader\"\n  principal_id         = local.devOpsInfrastructureUser_object_id\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Als N\u00e4chstes m\u00fcssen wir die Ressourcen DevCenter und DevCenter Projekt anlegen da diese die Grundlage f\u00fcr den Managed DevOps Pool darstellen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>resource \"azurerm_dev_center\" \"core\" {\n  name                = \"dc-${var.project}-${var.stage}\"\n  location            = azurerm_resource_group.core.location\n  resource_group_name = azurerm_resource_group.core.name\n  tags      = local.tags\n\n}\n\nresource \"azurerm_dev_center_project\" \"core\" {\n  name                = \"dcp-${var.project}-${var.stage}\"\n  dev_center_id       = replace(azurerm_dev_center.core.id, \"devCenters\", \"devcenters\")\n  location            = azurerm_resource_group.core.location\n  resource_group_name = azurerm_resource_group.core.name\n  tags      = local.tags\n\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Die eigentliche Terraform Ressource zum Anlegen von Managed DevOps Pool ist der Runner. Diesen m\u00fcssen wir \u00fcber den AZAPI Terraform Provider anlegen. Dokumentation zum Verwenden der Ressource findet man <a href=\"https:\/\/learn.microsoft.com\/azure\/templates\/microsoft.devopsinfrastructure\/pools?pivots=deployment-language-terraform\" target=\"_blank\" rel=\"noreferrer noopener\">hier<\/a>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>resource \"azapi_resource\" \"runner\" {\n  parent_id = azurerm_resource_group.core.id\n  type      = \"Microsoft.DevOpsInfrastructure\/pools@2024-10-19\"\n  name      = \"mdp-${var.project}-${var.stage}\"\n  location  = azurerm_resource_group.core.location\n  tags      = local.tags\n  body = {\n    properties = {\n      organizationProfile = {\n        organizations = &#091;\n          {\n            url = \"https:\/\/dev.azure.com\/${var.azure_devops_organization}\"\n            projects = &#091;\n              \"${var.azure_devops_project}\"\n            ],\n            parallelism = var.parallelism\n          }\n        ],\n        permissionProfile = {\n          kind = \"Inherit\"\n        }\n        kind = \"AzureDevOps\"\n      }\n      devCenterProjectResourceId = azurerm_dev_center_project.core.id\n      maximumConcurrency         = var.maximumConcurrency\n      agentProfile = {\n        maxAgentLifetime    = var.maxAgentLifetime\n        gracePeriodTimeSpan = var.gracePeriodTimeSpan\n        kind                = var.runner_state\n        resourcePredictionsProfile = {\n          predictionPreference = \"Balanced\"\n          kind                 = \"Automatic\"\n        }\n      }\n\n      fabricProfile = {\n        sku = {\n          name = var.runner_sku\n        }\n        images = &#091;\n          {\n            aliases = &#091;\n              \"ubuntu-22.04\"\n            ]\n            buffer             = \"*\"\n            wellKnownImageName = \"ubuntu-22.04\/latest\"\n          }\n        ]\n        osProfile = {\n          secretsManagementSettings = {\n            observedCertificates = &#091;]\n            keyExportable        = false\n          }\n          logonType = \"Service\"\n        }\n        storageProfile = {\n          osDiskStorageAccountType = \"StandardSSD\"\n          dataDisks                = &#091;]\n        }\n        networkProfile = {\n          subnetId = azurerm_subnet.runner.id\n        }\n        kind = \"Vmss\"\n      }\n      provisioningState = \"Succeeded\"\n    }\n  }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">An dieser Stelle sind wir mit den Terraform-Aufgaben durch und wechseln ins Azure DevOps Portal. Da wir die Ressourcen \u00fcber die Pipeline anlegen wollen, brauchen wir als Erstes eine Service Connection. Diese legen wir unter Verwendung des Service Principals aus dem ersten Schritt an (zur Erinnerung: die Vorgehensweise beim Anlegen des Terraform-Grundger\u00fcsts inklusive Service Principal und Terraform State Management findet man unter folgendem <a href=\"https:\/\/github.com\/whiteducksoftware\/terraform-scaffold-for-azure\" target=\"_blank\" rel=\"noreferrer noopener\">Link<\/a>. Nat\u00fcrlich w\u00fcrden sich die notwendigen Anpassungen im Azure DevOps Portal auch mit Terraform \u00fcber den <a href=\"https:\/\/registry.terraform.io\/providers\/microsoft\/azuredevops\" target=\"_blank\" rel=\"noreferrer noopener\">Azure DevOps Provider<\/a> realisieren lassen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Als N\u00e4chstes m\u00fcssen wir dem Nutzer, in dessen Kontext die Pipeline l\u00e4uft, Berechtigungen erteilen. In unserem Fall ist dies der bereits bekannte Service Principal. Dieser manuelle Schritt erfolgt vor dem Ausf\u00fchren der Pipeline zum Anlegen des Managed Pools:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Der Service Principal soll als &#8220;User&#8221; zur &#8220;Organization&#8221; hinzugef\u00fcgt werden.<\/li>\n\n\n\n<li>Dem Service Principal wird anschlie\u00dfend die &#8220;Project Administrator&#8221;-Berechtigung auf das Projekt erteilt.<\/li>\n\n\n\n<li>Unter &#8220;Organisation settings&#8221; \u2192 &#8220;Pipelines&#8221; \u2192 &#8220;Agent Pools&#8221; muss der Service Principal als Administrator hinzugef\u00fcgt werden. (Die Berechtigungen k\u00f6nnen nach dem initialen Ausf\u00fchren zum Anlegen des Pools wieder entzogen werden.)<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Es ist alles bereit, um die Pipeline erstmalig laufen zu lassen. Die Pipeline ist eine einfache YAML-Pipeline, die unter anderem <em>Terraform plan<\/em> und<em> Terraform apply<\/em> ausf\u00fchrt. Da beim initialen Lauf der Managed Pool noch nicht vorhanden ist und erst angelegt werden muss, lassen wir die Pipeline mit einem Standard Microsoft Hosted Agent laufen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pool:\n  vmImage: ubuntu-latest<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Das Ergebnis sehen wir direkt im Azure Portal:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img decoding=\"async\" width=\"732\" height=\"294\" src=\"https:\/\/whiteduck.de\/wp-content\/uploads\/Picture-2-1.png\" data-orig-src=\"https:\/\/whiteduck.de\/wp-content\/uploads\/Picture-2-1.png\" alt=\"\" class=\"lazyload wp-image-23519\" style=\"width:518px;height:auto\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27732%27%20height%3D%27294%27%20viewBox%3D%270%200%20732%20294%27%3E%3Crect%20width%3D%27732%27%20height%3D%27294%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/whiteduck.de\/wp-content\/uploads\/Picture-2-1-200x80.png 200w, https:\/\/whiteduck.de\/wp-content\/uploads\/Picture-2-1-300x120.png 300w, https:\/\/whiteduck.de\/wp-content\/uploads\/Picture-2-1-400x161.png 400w, https:\/\/whiteduck.de\/wp-content\/uploads\/Picture-2-1-600x241.png 600w, https:\/\/whiteduck.de\/wp-content\/uploads\/Picture-2-1.png 732w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 732px) 100vw, 732px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Der finale Schritt ist das Austauschen des zu verwendenden Pools in der Pipeline:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pool:\n   name: mdp-poc-dev<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ab jetzt l\u00e4uft die Pipeline im Microsoft Managed Pool, der sich in unserem privaten Netzwerk befindet. Wir sind nun bereit, alle Features der Managed DevOps Pools f\u00fcr Azure DevOps voll auszunutzen. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sobald die Agents im Pool einen Job ausgef\u00fchrt haben, hat man im Azure Portal die M\u00f6glichkeit, die Ausf\u00fchrung des Jobs auszuwerten sowie weitere Metriken und m\u00f6gliche Fehler zu analysieren. Als Einstieg benutzt man die Overview-Seite der Ressource &#8220;Managed DevOps Pool&#8221;:<\/p>\n\n\n\n<figure class=\"wp-block-gallery aligncenter has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"3430\" height=\"1534\" data-id=\"23547\" src=\"https:\/\/whiteduck.de\/wp-content\/uploads\/Monitoring.png\" data-orig-src=\"https:\/\/whiteduck.de\/wp-content\/uploads\/Monitoring.png\" alt=\"\" class=\"lazyload wp-image-23547\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%273430%27%20height%3D%271534%27%20viewBox%3D%270%200%203430%201534%27%3E%3Crect%20width%3D%273430%27%20height%3D%271534%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/whiteduck.de\/wp-content\/uploads\/Monitoring-200x89.png 200w, https:\/\/whiteduck.de\/wp-content\/uploads\/Monitoring-300x134.png 300w, https:\/\/whiteduck.de\/wp-content\/uploads\/Monitoring-400x179.png 400w, https:\/\/whiteduck.de\/wp-content\/uploads\/Monitoring-600x268.png 600w, https:\/\/whiteduck.de\/wp-content\/uploads\/Monitoring-768x343.png 768w, https:\/\/whiteduck.de\/wp-content\/uploads\/Monitoring-800x358.png 800w, https:\/\/whiteduck.de\/wp-content\/uploads\/Monitoring-1024x458.png 1024w, https:\/\/whiteduck.de\/wp-content\/uploads\/Monitoring-1200x537.png 1200w, https:\/\/whiteduck.de\/wp-content\/uploads\/Monitoring-1536x687.png 1536w, https:\/\/whiteduck.de\/wp-content\/uploads\/Monitoring.png 3430w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 3430px) 100vw, 3430px\" \/><\/figure>\n<figcaption class=\"blocks-gallery-caption wp-element-caption\">Unter &#8220;Monitoring&#8221; kann man sich die einzelnen Metriken genau anschauen und auch dazu Alerts erstellen.<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"WelcheLimitierungengibtesbeiManagedDevOpsPools?\">Welche Limitierungen gibt es bei Managed DevOps Pools?<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Kein Fernzugriff: Was bei den Self-Hosted Agents ein Vorteil ist, k\u00f6nnte bei dem Einsatz von Managed DevOps Pools ein Nachteil sein &#8211; die virtuellen Maschinen sind f\u00fcr m\u00f6gliche Anpassungen nicht erreichbar, da sie komplett in der Verantwortung von Microsoft liegen.<\/li>\n\n\n\n<li>Begrenzte Anpassungsm\u00f6glichkeiten: da die Infrastruktur von Microsoft verwaltet werden, hat man im Vergleich zu selbst gehosteten Agenten nur begrenzte Kontrolle \u00fcber deren Konfiguration<\/li>\n\n\n\n<li>Regionale Verf\u00fcgbarkeit: Managed DevOps Pools sind nur in bestimmten Azure-Regionen verf\u00fcgbar. Vor dem Einsatz \u00fcberpr\u00fcfen werden, ob die gew\u00fcnschte oder im Projekt vorausgesetzte Region verf\u00fcgbar ist. Daf\u00fcr \u00f6ffnet man in der Subscription Overview \u201cResource Providers\u201d, sucht nach Microsoft.DevOps, klickt auf Microsoft.DevOpsInfrastructure und kontrolliert im Tab \u201cLocation\u201d, ob die notwendige Region ausw\u00e4hlbar ist:<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" width=\"1024\" height=\"541\" src=\"https:\/\/whiteduck.de\/wp-content\/uploads\/Screenshot-2025-01-31-at-08.34.03-1024x541.png\" data-orig-src=\"https:\/\/whiteduck.de\/wp-content\/uploads\/Screenshot-2025-01-31-at-08.34.03-1024x541.png\" alt=\"\" class=\"lazyload wp-image-23556\" style=\"width:719px;height:auto\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271024%27%20height%3D%27541%27%20viewBox%3D%270%200%201024%20541%27%3E%3Crect%20width%3D%271024%27%20height%3D%27541%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/whiteduck.de\/wp-content\/uploads\/Screenshot-2025-01-31-at-08.34.03-200x106.png 200w, https:\/\/whiteduck.de\/wp-content\/uploads\/Screenshot-2025-01-31-at-08.34.03-300x158.png 300w, https:\/\/whiteduck.de\/wp-content\/uploads\/Screenshot-2025-01-31-at-08.34.03-400x211.png 400w, https:\/\/whiteduck.de\/wp-content\/uploads\/Screenshot-2025-01-31-at-08.34.03-600x317.png 600w, https:\/\/whiteduck.de\/wp-content\/uploads\/Screenshot-2025-01-31-at-08.34.03-768x406.png 768w, https:\/\/whiteduck.de\/wp-content\/uploads\/Screenshot-2025-01-31-at-08.34.03-800x423.png 800w, https:\/\/whiteduck.de\/wp-content\/uploads\/Screenshot-2025-01-31-at-08.34.03-1024x541.png 1024w, https:\/\/whiteduck.de\/wp-content\/uploads\/Screenshot-2025-01-31-at-08.34.03-1200x634.png 1200w, https:\/\/whiteduck.de\/wp-content\/uploads\/Screenshot-2025-01-31-at-08.34.03-1536x811.png 1536w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">4. Quotenbeschr\u00e4nkungen: neben der regionalen Verf\u00fcgbarkeit sollte man beachten, dass es Standardquoten f\u00fcr die Anzahl der Agenten gibt, die man erstellen kann. M\u00f6glicherweise muss eine Erh\u00f6hung beantragt werden, wenn der Bedarf diese Grenzen \u00fcberschreitet. Wie man die Erh\u00f6hung beantragt, ist <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/devops\/managed-devops-pools\/prerequisites?view=azure-devops&amp;tabs=azure-portal#view-your-quotas:~:text=quota%20adjustment.-,View%20your%20quotas,-To%20view%20the\">hier<\/a> beschrieben.<\/p>\n\n\n\n<div style=\"height:14px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Zusammengefasst bieten Managed DevOps Pools for Azure DevOps eine zentralisierte und vereinfachte L\u00f6sung zur Verwaltung von Agenten f\u00fcr CI\/CD-Pipelines. Diese Pools erm\u00f6glichen eine sichere und automatisierte Integration in private Netzwerke und minimieren gleichzeitig den Wartungsaufwand durch Microsofts Management der zugrunde liegenden Infrastruktur. Trotz einiger Limitierungen bez\u00fcglich Fernzugriff und Anpassungsm\u00f6glichkeiten, bieten Managed DevOps Pools eine flexible und skalierbare L\u00f6sung, die besonders in komplexen Unternehmensumgebungen von Vorteil ist.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sie m\u00f6chten mehr \u00fcber Managed DevOps Pools for Azure erfahren oder diese direkt in Ihren Projekten nutzen? <a href=\"https:\/\/outlook.office365.com\/book\/WDWebsiteBuchungsanfrage@whiteduck.de\/?utm_source=organic&amp;utm_medium=blog\" target=\"_blank\" rel=\"noreferrer noopener\">Sprechen Sie uns an<\/a>!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Beitrag stellen wir Azure DevOps Managed DevOps Pools vor und erkl\u00e4ren, wie sie uns das Leben erleichtern. Wir vergleichen Managed DevOps Pools mit Self-Hosted Agents und zeigen, wie man diese Funktionalit\u00e4t vollst\u00e4ndig mit Terraform automatisiert. Schlie\u00dflich besprechen wir, wie man sie in der eigenen CI\/CD-Pipeline verwendet. Inhalt Was versteht man unter Managed DevOps <a href=\"https:\/\/whiteduck.de\/en\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\/\"> <\/p>\n<div style=\"color:#ff9900\">[&#8230;]<\/div>\n<p><\/a><\/p>\n","protected":false},"author":17,"featured_media":8224,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_tribe_events_control_status":"","_tribe_events_control_status_canceled_reason":"","_tribe_events_control_status_postponed_reason":"","_tribe_events_control_online":"","_tribe_events_control_online_url":"","footnotes":""},"categories":[591],"tags":[113,172,110],"class_list":["post-23514","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-platform-engineering","tag-azure","tag-azure-devops","tag-devops"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>&quot;Managed DevOps Pools for Azure DevOps&quot; und wie diese unser Leben erleichtern - white duck<\/title>\n<meta name=\"description\" content=\"Wie Managed DevOps Pools f\u00fcr Azure DevOps Ihr Leben vereinfachen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/whiteduck.de\/en\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"&quot;Managed DevOps Pools for Azure DevOps&quot; und wie diese unser Leben erleichtern - white duck\" \/>\n<meta property=\"og:description\" content=\"Wie Managed DevOps Pools f\u00fcr Azure DevOps Ihr Leben vereinfachen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/whiteduck.de\/en\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\/\" \/>\n<meta property=\"og:site_name\" content=\"white duck\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/whiteduckgmbh\" \/>\n<meta property=\"article:published_time\" content=\"2025-02-12T17:43:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-02-14T08:22:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/whiteduck.de\/wp-content\/uploads\/WD-Blog-GutzuWissen-Blog-Header-2560x1702px.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1702\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Valentina Hermann\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@whiteduck_gmbh\" \/>\n<meta name=\"twitter:site\" content=\"@whiteduck_gmbh\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Valentina Hermann\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\\\/\"},\"author\":{\"name\":\"Valentina Hermann\",\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/#\\\/schema\\\/person\\\/13554efbacf4b63ddbddbe2479383c88\"},\"headline\":\"&#8220;Managed DevOps Pools for Azure DevOps&#8221; und wie diese unser Leben erleichtern\",\"datePublished\":\"2025-02-12T17:43:06+00:00\",\"dateModified\":\"2025-02-14T08:22:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\\\/\"},\"wordCount\":1884,\"image\":{\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/whiteduck.de\\\/wp-content\\\/uploads\\\/WD-Blog-GutzuWissen-Blog-Header-2560x1702px.png\",\"keywords\":[\"Azure\",\"Azure DevOps\",\"DevOps\"],\"articleSection\":[\"Platform Engineering\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\\\/\",\"url\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\\\/\",\"name\":\"\\\"Managed DevOps Pools for Azure DevOps\\\" und wie diese unser Leben erleichtern - white duck\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/whiteduck.de\\\/wp-content\\\/uploads\\\/WD-Blog-GutzuWissen-Blog-Header-2560x1702px.png\",\"datePublished\":\"2025-02-12T17:43:06+00:00\",\"dateModified\":\"2025-02-14T08:22:19+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/#\\\/schema\\\/person\\\/13554efbacf4b63ddbddbe2479383c88\"},\"description\":\"Wie Managed DevOps Pools f\u00fcr Azure DevOps Ihr Leben vereinfachen.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/whiteduck.de\\\/en\\\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\\\/#primaryimage\",\"url\":\"https:\\\/\\\/whiteduck.de\\\/wp-content\\\/uploads\\\/WD-Blog-GutzuWissen-Blog-Header-2560x1702px.png\",\"contentUrl\":\"https:\\\/\\\/whiteduck.de\\\/wp-content\\\/uploads\\\/WD-Blog-GutzuWissen-Blog-Header-2560x1702px.png\",\"width\":2560,\"height\":1702,\"caption\":\"gut zu wissen grafik\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"&#8222;Managed DevOps Pools for Azure DevOps&#8220; und wie diese unser Leben erleichtern\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/\",\"name\":\"white duck\",\"description\":\"Your Partner for Microsoft Azure &amp; AI\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/#\\\/schema\\\/person\\\/13554efbacf4b63ddbddbe2479383c88\",\"name\":\"Valentina Hermann\",\"url\":\"https:\\\/\\\/whiteduck.de\\\/en\\\/author\\\/valentina\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\"Managed DevOps Pools for Azure DevOps\" und wie diese unser Leben erleichtern - white duck","description":"Wie Managed DevOps Pools f\u00fcr Azure DevOps Ihr Leben vereinfachen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/whiteduck.de\/en\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\/","og_locale":"en_US","og_type":"article","og_title":"\"Managed DevOps Pools for Azure DevOps\" und wie diese unser Leben erleichtern - white duck","og_description":"Wie Managed DevOps Pools f\u00fcr Azure DevOps Ihr Leben vereinfachen.","og_url":"https:\/\/whiteduck.de\/en\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\/","og_site_name":"white duck","article_publisher":"https:\/\/www.facebook.com\/whiteduckgmbh","article_published_time":"2025-02-12T17:43:06+00:00","article_modified_time":"2025-02-14T08:22:19+00:00","og_image":[{"width":2560,"height":1702,"url":"https:\/\/whiteduck.de\/wp-content\/uploads\/WD-Blog-GutzuWissen-Blog-Header-2560x1702px.png","type":"image\/png"}],"author":"Valentina Hermann","twitter_card":"summary_large_image","twitter_creator":"@whiteduck_gmbh","twitter_site":"@whiteduck_gmbh","twitter_misc":{"Written by":"Valentina Hermann","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/whiteduck.de\/en\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\/#article","isPartOf":{"@id":"https:\/\/whiteduck.de\/en\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\/"},"author":{"name":"Valentina Hermann","@id":"https:\/\/whiteduck.de\/en\/#\/schema\/person\/13554efbacf4b63ddbddbe2479383c88"},"headline":"&#8220;Managed DevOps Pools for Azure DevOps&#8221; und wie diese unser Leben erleichtern","datePublished":"2025-02-12T17:43:06+00:00","dateModified":"2025-02-14T08:22:19+00:00","mainEntityOfPage":{"@id":"https:\/\/whiteduck.de\/en\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\/"},"wordCount":1884,"image":{"@id":"https:\/\/whiteduck.de\/en\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\/#primaryimage"},"thumbnailUrl":"https:\/\/whiteduck.de\/wp-content\/uploads\/WD-Blog-GutzuWissen-Blog-Header-2560x1702px.png","keywords":["Azure","Azure DevOps","DevOps"],"articleSection":["Platform Engineering"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/whiteduck.de\/en\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\/","url":"https:\/\/whiteduck.de\/en\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\/","name":"\"Managed DevOps Pools for Azure DevOps\" und wie diese unser Leben erleichtern - white duck","isPartOf":{"@id":"https:\/\/whiteduck.de\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/whiteduck.de\/en\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\/#primaryimage"},"image":{"@id":"https:\/\/whiteduck.de\/en\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\/#primaryimage"},"thumbnailUrl":"https:\/\/whiteduck.de\/wp-content\/uploads\/WD-Blog-GutzuWissen-Blog-Header-2560x1702px.png","datePublished":"2025-02-12T17:43:06+00:00","dateModified":"2025-02-14T08:22:19+00:00","author":{"@id":"https:\/\/whiteduck.de\/en\/#\/schema\/person\/13554efbacf4b63ddbddbe2479383c88"},"description":"Wie Managed DevOps Pools f\u00fcr Azure DevOps Ihr Leben vereinfachen.","breadcrumb":{"@id":"https:\/\/whiteduck.de\/en\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/whiteduck.de\/en\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/whiteduck.de\/en\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\/#primaryimage","url":"https:\/\/whiteduck.de\/wp-content\/uploads\/WD-Blog-GutzuWissen-Blog-Header-2560x1702px.png","contentUrl":"https:\/\/whiteduck.de\/wp-content\/uploads\/WD-Blog-GutzuWissen-Blog-Header-2560x1702px.png","width":2560,"height":1702,"caption":"gut zu wissen grafik"},{"@type":"BreadcrumbList","@id":"https:\/\/whiteduck.de\/en\/managed-devops-pools-for-azure-devops-und-wie-diese-uns-das-leben-erleichtern\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/whiteduck.de\/en\/"},{"@type":"ListItem","position":2,"name":"&#8222;Managed DevOps Pools for Azure DevOps&#8220; und wie diese unser Leben erleichtern"}]},{"@type":"WebSite","@id":"https:\/\/whiteduck.de\/en\/#website","url":"https:\/\/whiteduck.de\/en\/","name":"white duck","description":"Your Partner for Microsoft Azure &amp; AI","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/whiteduck.de\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/whiteduck.de\/en\/#\/schema\/person\/13554efbacf4b63ddbddbe2479383c88","name":"Valentina Hermann","url":"https:\/\/whiteduck.de\/en\/author\/valentina\/"}]}},"_links":{"self":[{"href":"https:\/\/whiteduck.de\/en\/wp-json\/wp\/v2\/posts\/23514","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/whiteduck.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/whiteduck.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/whiteduck.de\/en\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/whiteduck.de\/en\/wp-json\/wp\/v2\/comments?post=23514"}],"version-history":[{"count":0,"href":"https:\/\/whiteduck.de\/en\/wp-json\/wp\/v2\/posts\/23514\/revisions"}],"wp:attachment":[{"href":"https:\/\/whiteduck.de\/en\/wp-json\/wp\/v2\/media?parent=23514"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/whiteduck.de\/en\/wp-json\/wp\/v2\/categories?post=23514"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/whiteduck.de\/en\/wp-json\/wp\/v2\/tags?post=23514"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}