Integrate Azure DevOps with Portal for catalog entity discovery, pipeline visibility, pull requests, scaffolder actions, and wiki search indexing.
How to integrate Azure DevOps
This guide will walk you through how to integrate Azure DevOps into Portal so it can be used to pull in Entities into the Catalog, display Pipelines, Pull Requests and repo README files using the Azure DevOps plugin, and install the Azure DevOps Scaffolder actions to power up your Software Templates. Finally, you’ll setup the Azure DevOps Wiki Collator so that the content of your Wikis can be surfaced in Search results! You’ll need to be a Portal Admin to complete this guide.
For those using Azure DevOps Server, the on-premise version, you’ll want to
setup Private Connect before moving forward with this guide as it will make it
easier to validate each step is working along the way.
Steps Overview
To accomplish the goals set above this guide will take you through the following steps:
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Spotify for Backstage","colors":{"primary":"#34baa2","light":"#9af0e1","dark":"#91eeda"},"logo":{"light":"https://mintcdn.com/spotify-89f50c35/24doFeqc-xIrJKxF/static/logo/light.svg?fit=max\u0026auto=format\u0026n=24doFeqc-xIrJKxF\u0026q=85\u0026s=e7c3376851f302fc6d1308df15deb771","dark":"https://mintcdn.com/spotify-89f50c35/24doFeqc-xIrJKxF/static/logo/dark.svg?fit=max\u0026auto=format\u0026n=24doFeqc-xIrJKxF\u0026q=85\u0026s=a4e4bd6c0b855fc5959169face3701e1","href":"/"},"favicon":"https://mintcdn.com/spotify-89f50c35/6C5KyJhdlFRgXnE0/static/favicon.ico?fit=max\u0026auto=format\u0026n=6C5KyJhdlFRgXnE0\u0026q=85\u0026s=78c7096e52c0a4493c1d4b76355d22d9","api":{"playground":{"display":"simple"}},"appearance":{"default":"dark"},"navbar":{"links":[{"href":"https://backstage.spotify.com/contact-us/try-portal/","label":"Try Spotify Portal"}],"primary":{"type":"button","label":"Log in","href":"https://backstage.spotify.com/login/"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/showcase/spotify-r\u0026d","x":"https://twitter.com/spotifyeng","youtube":"https://www.youtube.com/@SpotifyRnD","instagram":"https://www.instagram.com/lifeatspotify","facebook":"https://www.facebook.com/spotify"},"links":[{"header":"Learn More","items":[{"label":"Go to backstage.spotify.com","href":"https://backstage.spotify.com"},{"label":"Explore the demo","href":"https://demo.backstage.io/catalog"},{"label":"Partner interest form","href":"https://backstage.spotify.com/interested-in-partnering"}]},{"header":"News \u0026 Updates","items":[{"label":"Read our blog","href":"https://backstage.spotify.com/blog"},{"label":"Subscribe to newsletter","href":"https://spoti.fi/backstagenewsletter"},{"label":"Portal system status","href":"https://status.spotifyportal.com"}]},{"header":"Community","items":[{"label":"Join the community","href":"https://github.com/backstage/community"},{"label":"Get Backstage Certified","href":"https://www.cncf.io/training/certification/cba"}]},{"header":"Legal","items":[{"label":"Security","href":"https://backstage.spotify.com/security"},{"label":"Privacy Policy","href":"https://backstage.spotify.com/spotify-for-backstage-terms/privacy-policy"},{"label":"Cookies","href":"https://www.spotify.com/legal/cookies-policy"},{"label":"Terms of Service","href":"https://backstage.spotify.com/terms-of-service"},{"label":"Trademark Usage","href":"https://www.linuxfoundation.org/legal/trademark-usage"}]}]},"seo":{"metatags":{"canonical":"https://backstage.spotify.com/docs"}},"fonts":{"heading":{"family":"Circular Sp","source":"https://mintlify-assets.b-cdn.net/fonts/CircularSpTitle-Bold.woff2","format":"woff2"},"body":{"family":"Circular Sp","source":"https://mintlify-assets.b-cdn.net/fonts/CircularSp-Book.woff2","format":"woff2"}},"styling":{"codeblocks":{"theme":{"light":"github-light","dark":"dracula"}},"latex":false},"integrations":{"gtm":{"tagId":"GTM-58S6R55"},"telemetry":{"enabled":false}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"navigation":{"global":{"anchors":[{"anchor":"Contact us","icon":"headset","href":"https://backstage.spotify.com/contact-us/talk-to-us/"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"spotify-89f50c35","hasAudioNarration":false,"actualSubdomain":"spotify-89f50c35","customDomains":["backstage.spotify.com"],"gitSource":{"type":"github","owner":"backstage-external","repo":"spotify-for-backstage-docs","deployBranch":"main","contentDirectory":"public","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af70fd85dcd64e14d2edac9","clientVersion":"0.0.4142","searchFilterCounts":[{"language":"default","tag":"Portal","count":140},{"language":"default","tag":"Plugins","count":111},{"language":"default","tag":"Soundcheck","count":88},{"language":"default","tag":"Portal Features \u0026 Plugins","count":88},{"language":"default","tag":"API Reference","count":45},{"language":"default","tag":"Integrations","count":35},{"language":"default","tag":"Guides","count":34},{"language":"default","tag":"Core Concepts","count":31},{"language":"default","tag":"Checks","count":19},{"language":"default","tag":"Fact Collectors","count":16}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"backstage-support@spotify.com","showHelpButton":true}},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"styles.css","content":"body{--font-jetbrains-mono:\n 'JetBrains Mono', SF Mono, SFMono-Regular, Menlo, Monaco, Cascadia Mono,\n Segoe UI Mono, Roboto Mono, Oxygen Mono, Ubuntu Monospace, Source Code Pro,\n Fira Mono, Droid Sans Mono, Consolas, Courier New, monospace}#topbar-cta-button svg path{stroke:#000000}#topbar-cta-button span{color:#000000}#content:has(.video-overlay){isolation:auto}.landing-page-card{transition:all 0.3s cubic-bezier(0.4, 0, 0.2, 1);backdrop-filter:blur(12px);border-width:2px;background-color:rgb(255 255 255)}.landing-page-card:is(.dark *){background-color:rgb(255 255 255 / 0.1)}.landing-page-card:hover{transform:translateY(-0.25rem)}.landing-page-card [data-component-part=\"card-icon\"],.landing-page-card [data-component-part=\"card-icon\"]>img{width:48px;height:48px}.landing-page-card h2{font-size:1.5rem;margin-bottom:1rem;font-weight:600}"}],"page":{"pagePath":"portal/guides/integrations/azure-devops","slug":"/portal/guides/integrations/azure-devops","pageMetadata":{"sidebar_position":1,"title":"Azure DevOps","sidebarTitle":"Overview","description":"Integrate Azure DevOps with Portal for catalog entity discovery, pipeline visibility, pull requests, scaffolder actions, and wiki search indexing.","href":"/portal/guides/integrations/azure-devops/index"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Integrate Azure DevOps with Portal for catalog entity discovery, pipeline visibility, pull requests, scaffolder actions, and wiki search indexing.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,..._provideComponents(),...props.components},{Heading,Tip}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`how-to-integrate-azure-devops`,children:`How to integrate Azure DevOps`}),`\n`,_jsxs(_components.p,{children:[`This guide will walk you through how to integrate Azure DevOps into Portal so it can be used to pull in Entities into the Catalog, display Pipelines, Pull Requests and repo `,_jsx(_components.code,{children:`README`}),` files using the Azure DevOps plugin, and install the Azure DevOps Scaffolder actions to power up your Software Templates. Finally, you’ll setup the Azure DevOps Wiki Collator so that the content of your Wikis can be surfaced in Search results! You’ll need to be a Portal Admin to complete this guide.`]}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`For those using Azure DevOps Server, the on-premise version, you’ll want to\nsetup Private Connect before moving forward with this guide as it will make it\neasier to validate each step is working along the way.`})}),`\n`,_jsx(Heading,{level:`2`,id:`steps-overview`,children:`Steps Overview`}),`\n`,_jsx(_components.p,{children:`To accomplish the goals set above this guide will take you through the following steps:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/portal/guides/integrations/azure-devops/azure-app-settings-integrations`,children:`Setup the Azure integration in App Settings`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/portal/guides/integrations/azure-devops/azure-devops-discovery`,children:`Setup Azure DevOps Discovery`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/portal/guides/integrations/azure-devops/azure-devops-annotator-processor`,children:`Install the Azure DevOps Annotator Processor`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/portal/guides/integrations/azure-devops/azure-devops-plugin`,children:`Install the Azure DevOps plugin`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/portal/guides/integrations/azure-devops/azure-devops-scaffolder-actions`,children:`Install the Azure DevOps scaffolder actions`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/portal/guides/integrations/azure-devops/azure-devops-wiki-collator`,children:`Install the Azure DevOps Wiki collator`})}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{"theme":{"light":"github-light","dark":"dracula"}},"config":{},"pageMetadata":{"sidebar_position":1,"title":"Azure DevOps","sidebarTitle":"Overview","description":"Integrate Azure DevOps with Portal for catalog entity discovery, pipeline visibility, pull requests, scaffolder actions, and wiki search indexing.","href":"/portal/guides/integrations/azure-devops/index"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"How to integrate Azure DevOps","slug":"how-to-integrate-azure-devops","depth":2,"children":[]},{"title":"Steps Overview","slug":"steps-overview","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"spotify-89f50c35","siteName":"Spotify for Backstage","title":"Azure DevOps - Spotify for Backstage","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-06-22T08:17:59.290Z","originalFileLocation":"portal/guides/integrations/azure-devops/index.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Integrate Azure DevOps with Portal for catalog entity discovery, pipeline visibility, pull requests, scaffolder actions, and wiki search indexing.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Spotify for Backstage\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/spotify-89f50c35/R_8z5ScClO7v3nRq/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/spotify-89f50c35/R_8z5ScClO7v3nRq/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/spotify-89f50c35/R_8z5ScClO7v3nRq/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/spotify-89f50c35/R_8z5ScClO7v3nRq/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/spotify-89f50c35/R_8z5ScClO7v3nRq/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/spotify-89f50c35/R_8z5ScClO7v3nRq/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/spotify-89f50c35/R_8z5ScClO7v3nRq/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/spotify-89f50c35/R_8z5ScClO7v3nRq/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/spotify-89f50c35/R_8z5ScClO7v3nRq/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Azure DevOps - Spotify for Backstage\">\u003cmeta data-mint-head property=\"og:description\" content=\"Integrate Azure DevOps with Portal for catalog entity discovery, pipeline visibility, pull requests, scaffolder actions, and wiki search indexing.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Spotify for Backstage\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://backstage.spotify.com/docs/portal/guides/integrations/azure-devops\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://spotify-89f50c35.mintlify.site/docs/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Azure+DevOps\u0026amp;description=Integrate+Azure+DevOps+with+Portal+for+catalog+entity+discovery%2C+pipeline+visibility%2C+pull+requests%2C+scaffolder+actions%2C+and+wiki+search+indexing.\u0026amp;theme=a6f41037062b0a3b3eab7f14\u0026amp;signature=f14d2ea9164ea40b21db03befe81f72ad575c002f8bc8ffa6431aa66af9f82cf\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Azure DevOps - Spotify for Backstage\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Integrate Azure DevOps with Portal for catalog entity discovery, pipeline visibility, pull requests, scaffolder actions, and wiki search indexing.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://spotify-89f50c35.mintlify.site/docs/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Azure+DevOps\u0026amp;description=Integrate+Azure+DevOps+with+Portal+for+catalog+entity+discovery%2C+pipeline+visibility%2C+pull+requests%2C+scaffolder+actions%2C+and+wiki+search+indexing.\u0026amp;theme=a6f41037062b0a3b3eab7f14\u0026amp;signature=f14d2ea9164ea40b21db03befe81f72ad575c002f8bc8ffa6431aa66af9f82cf\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/spotify-89f50c35/R_8z5ScClO7v3nRq/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Spotify for Backstage\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#34baa2\">\u003clink data-mint-head rel=\"canonical\" href=\"https://backstage.spotify.com/docs/portal/guides/integrations/azure-devops\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/portal/guides/integrations/azure-devops.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://backstage.spotify.com/#organization\",\"name\":\"Spotify for Backstage\",\"url\":\"https://backstage.spotify.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/spotify-89f50c35/24doFeqc-xIrJKxF/static/logo/light.svg?fit=max\u0026auto=format\u0026n=24doFeqc-xIrJKxF\u0026q=85\u0026s=e7c3376851f302fc6d1308df15deb771\"}},{\"@type\":\"WebSite\",\"@id\":\"https://backstage.spotify.com/docs#website\",\"name\":\"Spotify for Backstage\",\"url\":\"https://backstage.spotify.com/docs\",\"publisher\":{\"@id\":\"https://backstage.spotify.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://backstage.spotify.com/docs/portal/guides/integrations/azure-devops#webpage\",\"url\":\"https://backstage.spotify.com/docs/portal/guides/integrations/azure-devops\",\"name\":\"Azure DevOps\",\"description\":\"Integrate Azure DevOps with Portal for catalog entity discovery, pipeline visibility, pull requests, scaffolder actions, and wiki search indexing.\",\"dateModified\":\"2026-06-22T08:17:59.290Z\",\"isPartOf\":{\"@id\":\"https://backstage.spotify.com/docs#website\"},\"breadcrumb\":{\"@id\":\"https://backstage.spotify.com/docs/portal/guides/integrations/azure-devops#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://backstage.spotify.com/docs/portal/guides/integrations/azure-devops#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Guides\",\"item\":\"https://backstage.spotify.com/docs/portal/guides\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Integrations\",\"item\":\"https://backstage.spotify.com/docs/portal/guides/integrations\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Azure DevOps\",\"item\":\"https://backstage.spotify.com/docs/portal/guides/integrations/azure-devops\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://backstage.spotify.com/docs/portal/guides/integrations/azure-devops#article\",\"headline\":\"Azure DevOps\",\"name\":\"Azure DevOps\",\"description\":\"Integrate Azure DevOps with Portal for catalog entity discovery, pipeline visibility, pull requests, scaffolder actions, and wiki search indexing.\",\"url\":\"https://backstage.spotify.com/docs/portal/guides/integrations/azure-devops\",\"mainEntityOfPage\":{\"@id\":\"https://backstage.spotify.com/docs/portal/guides/integrations/azure-devops#webpage\"},\"dateModified\":\"2026-06-22T08:17:59.290Z\",\"publisher\":{\"@id\":\"https://backstage.spotify.com/#organization\"},\"isPartOf\":{\"@id\":\"https://backstage.spotify.com/docs#website\"}}]}\u003c/script>","agentPointerHref":"/docs/portal/guides/integrations/azure-devops.md","siteName":"Spotify for Backstage","nav":{"global":{"anchors":[{"anchor":"Contact us","icon":"headset","href":"https://backstage.spotify.com/contact-us/talk-to-us/"}]},"tabs":[{"tab":"Portal","pages":[{"title":"Spotify Portal for Backstage","sidebarTitle":"Spotify Portal for Backstage","href":"/portal"},{"group":"Getting Started","root":{"title":"Getting Started Guide","sidebarTitle":"Getting started with Portal for Backstage","href":"/portal/getting-started"},"pages":[{"title":"AWS Marketplace","sidebarTitle":"Buy Portal on AWS Marketplace","href":"/portal/aws-marketplace"}]},{"group":"Portal Features \u0026 Plugins","root":{"title":"Portal Features \u0026 Plugins","sidebarTitle":"Overview","href":"/portal/core-features-and-plugins/index"},"pages":[{"group":"Catalog","root":{"title":"Software Catalog Overview","sidebarTitle":"Overview","href":"/portal/core-features-and-plugins/catalog/index"},"pages":[{"title":"Creating the Catalog Graph","href":"/portal/core-features-and-plugins/catalog/creating-the-catalog-graph"},{"title":"Descriptor Format of Catalog Entities","href":"/portal/core-features-and-plugins/catalog/descriptor-format"},{"title":"Life of an Entity","href":"/portal/core-features-and-plugins/catalog/life-of-an-entity"},{"title":"Entity References","href":"/portal/core-features-and-plugins/catalog/references"},{"title":"System Model","href":"/portal/core-features-and-plugins/catalog/system-model"},{"title":"Well-known Relations between Catalog Entities","sidebarTitle":"Well-known Relations","href":"/portal/core-features-and-plugins/catalog/well-known-relations"},{"title":"Well-known Status fields of Catalog Entities","sidebarTitle":"Well-known Statuses","href":"/portal/core-features-and-plugins/catalog/well-known-statuses"},{"title":"Creating a Single Entity","sidebarTitle":"Creating a Single Entity","href":"/portal/core-features-and-plugins/catalog/single-entity-create"},{"title":"Auto Ingestion","sidebarTitle":"Auto Ingestion","href":"/portal/core-features-and-plugins/catalog/auto-ingestion"},{"title":"Monorepos","href":"/portal/core-features-and-plugins/catalog/monorepos"},{"title":"Updating Components","sidebarTitle":"Updating Components","href":"/portal/core-features-and-plugins/catalog/bulk-editing"},{"group":"Bulk catalog ingestion","root":{"title":"Bulk catalog ingestion","sidebarTitle":"Overview","href":"/portal/core-features-and-plugins/catalog-builder/index"},"pages":[{"title":"Understanding Management Modes","sidebarTitle":"Understanding Management Modes","href":"/portal/core-features-and-plugins/catalog-builder/management-modes"},{"title":"Portal Mode Walkthrough","sidebarTitle":"Portal Mode Walkthrough","href":"/portal/core-features-and-plugins/catalog-builder/portal-mode-walkthrough"},{"title":"YAML Mode Walkthrough","sidebarTitle":"YAML Mode Walkthrough","href":"/portal/core-features-and-plugins/catalog-builder/yaml-mode-walkthrough"},{"title":"Troubleshooting Bulk Catalog Ingestion","sidebarTitle":"Troubleshooting","href":"/portal/core-features-and-plugins/catalog-builder/troubleshooting"},{"title":"Frequently Asked Questions","sidebarTitle":"FAQ","href":"/portal/core-features-and-plugins/catalog-builder/faq"}]}]},{"group":"Scaffolder","root":{"sidebarTitle":"Scaffolder","title":"Scaffolder (Portal)","href":"/portal/core-features-and-plugins/scaffolder/index"},"pages":[{"sidebarTitle":"Getting Started","title":"Getting Started with Scaffolder","href":"/portal/core-features-and-plugins/scaffolder/getting-started"},{"title":"How-to Guides","href":"/portal/core-features-and-plugins/scaffolder/how-to-guides"},{"sidebarTitle":"Reference","title":"Scaffolder Reference","href":"/portal/core-features-and-plugins/scaffolder/reference"}]},{"title":"TechDocs","sidebarTitle":"TechDocs","href":"/portal/core-features-and-plugins/techdocs"},{"title":"Soundcheck","sidebarTitle":"Soundcheck","href":"/portal/core-features-and-plugins/soundcheck"},{"group":"Fleetshift","root":{"title":"Fleetshift: Getting Started","sidebarTitle":"Fleetshift","hidden":false,"href":"/portal/core-features-and-plugins/fleetshift/getting-started"},"pages":[{"title":"Enable AI Shifts","sidebarTitle":"Enable AI Shifts","hidden":false,"href":"/portal/core-features-and-plugins/fleetshift/enable-ai-shifts"},{"title":"Create and Run a Shift","sidebarTitle":"Create and Run","hidden":false,"href":"/portal/core-features-and-plugins/fleetshift/create-and-run"},{"title":"Fleetshift Guides","sidebarTitle":"Guides","hidden":false,"href":"/portal/core-features-and-plugins/fleetshift/guides"},{"title":"Fleetshift: Writing and Publishing npm Package Shifts","sidebarTitle":"npm Package Shifts","hidden":false,"href":"/portal/core-features-and-plugins/fleetshift/npm-package-shifts"},{"title":"Fleetshift: OpenRewrite Shifts","sidebarTitle":"OpenRewrite Shifts","hidden":false,"href":"/portal/core-features-and-plugins/fleetshift/openrewrite-shifts"},{"title":"Fleetshift MCP Actions","sidebarTitle":"MCP Actions","hidden":false,"href":"/portal/core-features-and-plugins/fleetshift/mcp-actions"},{"title":"Fleetshift Troubleshooting","sidebarTitle":"Troubleshooting","hidden":false,"href":"/portal/core-features-and-plugins/fleetshift/troubleshooting"},{"title":"Fleetshift FAQ","sidebarTitle":"FAQ","hidden":false,"href":"/portal/core-features-and-plugins/fleetshift/faq"}]},{"group":"AI Gateway","root":{"title":"AI Gateway","sidebarTitle":"Overview","href":"/portal/core-features-and-plugins/ai-gateway/index"},"pages":[{"group":"Integrations","root":{"title":"Integrations","sidebarTitle":"Overview","href":"/portal/core-features-and-plugins/ai-gateway/integrations/index"},"pages":[{"title":"Anthropic","href":"/portal/core-features-and-plugins/ai-gateway/integrations/anthropic"},{"title":"OpenAI","href":"/portal/core-features-and-plugins/ai-gateway/integrations/openai"},{"title":"Azure OpenAI","href":"/portal/core-features-and-plugins/ai-gateway/integrations/azure"},{"title":"Cohere","href":"/portal/core-features-and-plugins/ai-gateway/integrations/cohere"},{"title":"Google Generative AI","href":"/portal/core-features-and-plugins/ai-gateway/integrations/google"},{"title":"Ollama","href":"/portal/core-features-and-plugins/ai-gateway/integrations/ollama"},{"title":"Amazon Bedrock","href":"/portal/core-features-and-plugins/ai-gateway/integrations/aws-bedrock"}]}]},{"title":"DevEx Metrics","href":"/portal/core-features-and-plugins/devex-metrics"},{"title":"Search","sidebarTitle":"Search","href":"/portal/core-features-and-plugins/search"},{"title":"Home","sidebarTitle":"Home","href":"/portal/core-features-and-plugins/home"},{"title":"Insights","sidebarTitle":"Insights","href":"/portal/core-features-and-plugins/insights"},{"title":"Skill Exchange","href":"/portal/core-features-and-plugins/skillexchange"},{"title":"Role-Based Access Control (RBAC)","sidebarTitle":"RBAC","href":"/portal/core-features-and-plugins/rbac"},{"group":"AiKA","pages":[{"title":"Getting Started with AiKA","sidebarTitle":"Getting Started","href":"/portal/core-features-and-plugins/aika/getting-started"},{"title":"Searching for Information","href":"/portal/core-features-and-plugins/aika/searching-for-information"},{"title":"Semantic Plugin","href":"/portal/core-features-and-plugins/aika/semantic-plugin"},{"title":"Tracing for AiKA","sidebarTitle":"Tracing for AiKA","href":"/portal/core-features-and-plugins/aika/tracing"},{"title":"AiKA Data Flow \u0026 Security","sidebarTitle":"Data Flow \u0026 Security","href":"/portal/core-features-and-plugins/aika/data-flow"},{"title":"Agent Configuration","sidebarTitle":"Agent Configuration","href":"/portal/core-features-and-plugins/aika/agent-configuration"},{"title":"AiKA Side Panel","sidebarTitle":"AiKA Side Panel","href":"/portal/core-features-and-plugins/aika/side-panel"},{"title":"Modes","sidebarTitle":"Modes","href":"/portal/core-features-and-plugins/aika/modes"}]},{"group":"AI Explorer","root":{"title":"AI Explorer","href":"/portal/core-features-and-plugins/ai-explorer/index"},"pages":[{"title":"Configuration","href":"/portal/core-features-and-plugins/ai-explorer/configuration"},{"title":"Local Resource Management From AI Explorer","href":"/portal/core-features-and-plugins/ai-explorer/installation"},{"title":"Rules","href":"/portal/core-features-and-plugins/ai-explorer/rules"},{"title":"Skills","href":"/portal/core-features-and-plugins/ai-explorer/skills"},{"title":"Marketplaces \u0026 Plugins","href":"/portal/core-features-and-plugins/ai-explorer/marketplaces"},{"title":"Ownership","href":"/portal/core-features-and-plugins/ai-explorer/ownership"},{"title":"Soundcheck Integration","href":"/portal/core-features-and-plugins/ai-explorer/soundcheck"}]},{"title":"Confidence Flags","href":"/portal/core-features-and-plugins/confidence-flags"},{"title":"Entity Overlays","sidebarTitle":"Entity Overlays","href":"/portal/core-features-and-plugins/entity-overlays"},{"group":"Data Experience","root":{"title":"Overview","href":"/portal/core-features-and-plugins/data-experience/overview"},"pages":[{"title":"Data Experience Quick Start","sidebarTitle":"Quick Start","href":"/portal/core-features-and-plugins/data-experience/quickstart"},{"title":"Key Concepts","href":"/portal/core-features-and-plugins/data-experience/key-concepts"},{"title":"Configuration","href":"/portal/core-features-and-plugins/data-experience/configuration"},{"title":"TechDocs","href":"/portal/core-features-and-plugins/data-experience/techdocs"},{"title":"Dataset Access Requests","href":"/portal/core-features-and-plugins/data-experience/data-access"},{"title":"Portal database tables","href":"/portal/core-features-and-plugins/data-experience/integration-portal-databases"},{"title":"Integration: Redshift","href":"/portal/core-features-and-plugins/data-experience/integration-redshift"},{"title":"Integration: Snowflake","href":"/portal/core-features-and-plugins/data-experience/integration-snowflake"},{"title":"Integration: BigQuery","href":"/portal/core-features-and-plugins/data-experience/integration-bigquery"},{"title":"Integration: Databricks","href":"/portal/core-features-and-plugins/data-experience/integration-databricks"},{"title":"Integration: dbt","href":"/portal/core-features-and-plugins/data-experience/integration-dbt"},{"title":"Data Lineage","href":"/portal/core-features-and-plugins/data-experience/data-lineage"}]},{"group":"MCP","root":{"title":"MCP in Portal","href":"/portal/core-features-and-plugins/mcp/overview"},"pages":[{"title":"Connecting AI Agents","href":"/portal/core-features-and-plugins/mcp/connecting-agents"},{"title":"Available MCP Tools","sidebarTitle":"Available Tools","href":"/portal/core-features-and-plugins/mcp/available-tools"},{"sidebarTitle":"Registering Tools","title":"Registering MCP Tools","href":"/portal/core-features-and-plugins/mcp/registering-tools"},{"title":"Third-Party MCP Servers","href":"/portal/core-features-and-plugins/mcp/third-party-servers"}]},{"group":"Portal CLI","root":{"title":"Get started with Portal CLI","sidebarTitle":"Get started","href":"/portal/core-features-and-plugins/cli/getting-started"},"pages":[]},{"group":"Audit Logs","root":{"title":"Getting Started","href":"/portal/core-features-and-plugins/audit-logs/getting-started"},"pages":[{"title":"Guides","href":"/portal/core-features-and-plugins/audit-logs/guides"},{"title":"Reference","href":"/portal/core-features-and-plugins/audit-logs/reference"}]},{"group":"Recommended Plugins","pages":[{"title":"PagerDuty","sidebarTitle":"PagerDuty","href":"/portal/core-features-and-plugins/recommended-plugins/pagerduty"},{"title":"Buildkite","sidebarTitle":"Buildkite","href":"/portal/core-features-and-plugins/recommended-plugins/buildkite"},{"title":"GitHub Actions","sidebarTitle":"GitHub Actions","href":"/portal/core-features-and-plugins/recommended-plugins/github-actions"},{"title":"GitHub Deployments","sidebarTitle":"GitHub Deployments","href":"/portal/core-features-and-plugins/recommended-plugins/github-deployments"},{"title":"GitHub Issues","sidebarTitle":"GitHub Issues","href":"/portal/core-features-and-plugins/recommended-plugins/github-issues"},{"title":"GitHub Pull Request Board","sidebarTitle":"GitHub Pull Request Board","href":"/portal/core-features-and-plugins/recommended-plugins/github-pull-request-board"},{"title":"Azure DevOps","sidebarTitle":"Azure DevOps","href":"/portal/core-features-and-plugins/recommended-plugins/azure-devops"},{"title":"New Relic","sidebarTitle":"New Relic","href":"/portal/core-features-and-plugins/recommended-plugins/new-relic"},{"title":"SonarQube","sidebarTitle":"SonarQube","href":"/portal/core-features-and-plugins/recommended-plugins/sonarqube"},{"title":"Jira Dashboard","sidebarTitle":"Jira Dashboard","href":"/portal/core-features-and-plugins/recommended-plugins/jira-dashboard"}]},{"title":"Portal Connect","href":"/portal/core-features-and-plugins/portal-connect"}]},{"group":"Developing Portal plugins","root":{"title":"Developing Portal plugins","sidebarTitle":"Overview","href":"/portal/portal-plugins/index"},"pages":[{"title":"Get started","sidebarTitle":"Get started","href":"/portal/portal-plugins/get-started"},{"title":"Build a plugin","sidebarTitle":"Build a plugin","href":"/portal/portal-plugins/build-plugin"},{"title":"Publish and install custom plugins","sidebarTitle":"Publish custom plugins","href":"/portal/portal-plugins/publishing-custom-plugins"},{"title":"Registry plugin publishing","sidebarTitle":"Registry publishing (previous method)","href":"/portal/portal-plugins/publishing-plugins"},{"title":"Generate package metadata","sidebarTitle":"Generate package metadata","href":"/portal/portal-plugins/generate-metadata"}]},{"group":"Managing Plugins","root":{"title":"Managing Plugins","sidebarTitle":"Overview","href":"/portal/managing-plugins/index"},"pages":[{"title":"Installing a Plugin","href":"/portal/managing-plugins/installing-plugins"},{"title":"Updating a Plugin","href":"/portal/managing-plugins/updating-plugins"},{"title":"Uninstalling a Plugin","href":"/portal/managing-plugins/uninstalling-plugins"},{"title":"Build Progress","href":"/portal/managing-plugins/build-progress"},{"title":"Plugin Versioning","href":"/portal/managing-plugins/plugin-versioning"},{"title":"Switching to pre-built plugins","href":"/portal/managing-plugins/migration"}]},{"group":"Guides","root":{"title":"Guides","href":"/portal/guides/index"},"pages":[{"group":"Authentication","root":{"title":"Authentication","sidebarTitle":"Overview","href":"/portal/guides/auth/index"},"pages":[{"group":"Entra ID","root":{"title":"Entra ID","sidebarTitle":"Overview","href":"/portal/guides/auth/entraId/index"},"pages":[{"title":"Create an Azure App Registration","href":"/portal/guides/auth/entraId/create-azure-app-registration"},{"title":"Ingest users and groups","href":"/portal/guides/auth/entraId/setup-catalog-provider"},{"title":"Setup auth provider","href":"/portal/guides/auth/entraId/setup-auth"},{"title":"Retain admin access","href":"/portal/guides/auth/entraId/retain-admin-access"}]},{"group":"Okta","root":{"title":"Okta","sidebarTitle":"Overview","href":"/portal/guides/auth/okta/index"},"pages":[{"title":"Ingest users and groups","href":"/portal/guides/auth/okta/setup-catalog-provider"},{"title":"Setup auth provider","href":"/portal/guides/auth/okta/setup-auth"}]},{"group":"GitHub","root":{"title":"GitHub","sidebarTitle":"Overview","href":"/portal/guides/auth/github/index"},"pages":[{"title":"GitHub Identity Setup Guide","sidebarTitle":"GitHub Setup Guide","href":"/portal/guides/auth/github/setup-auth"}]},{"group":"GitLab","root":{"title":"GitLab","sidebarTitle":"Overview","href":"/portal/guides/auth/gitlab/index"},"pages":[{"title":"Ingest users and groups","href":"/portal/guides/auth/gitlab/setup-catalog-provider"},{"title":"Setup auth provider","href":"/portal/guides/auth/gitlab/setup-auth"}]}]},{"group":"Integrations","root":{"title":"Integrations","sidebarTitle":"Overview","description":"Connect Portal to external services like GitHub, GitLab, and Azure DevOps for catalog ingestion, repository integration, and CI/CD visibility.","href":"/portal/guides/integrations/index"},"pages":[{"group":"Azure DevOps","root":{"title":"Azure DevOps","sidebarTitle":"Overview","href":"/portal/guides/integrations/azure-devops/index"},"pages":[{"title":"Setup the Azure integration in App Settings","description":"Add Azure DevOps credentials to Portal App Settings using a Personal Access Token or service principal with client secret.","href":"/portal/guides/integrations/azure-devops/azure-app-settings-integrations"},{"title":"Setup Azure DevOps Discovery","description":"Enable Azure DevOps Discovery in Portal to automatically find and ingest catalog-info.yaml files from your Azure DevOps repositories.","href":"/portal/guides/integrations/azure-devops/azure-devops-discovery"},{"title":"Install the Azure DevOps Annotator Processor","description":"Install the Azure DevOps Annotator Processor plugin to automatically add required annotations to catalog entities for Azure DevOps features.","href":"/portal/guides/integrations/azure-devops/azure-devops-annotator-processor"},{"title":"Install the Azure DevOps plugin","description":"Install the Azure DevOps plugin to display pipeline results, pull requests, Git tags, and README files on Portal entity pages.","href":"/portal/guides/integrations/azure-devops/azure-devops-plugin"},{"title":"Install the Azure DevOps scaffolder actions","description":"Install Azure DevOps and Dotnet scaffolder action plugins to use Azure DevOps operations in Portal Software Templates.","href":"/portal/guides/integrations/azure-devops/azure-devops-scaffolder-actions"},{"title":"Install the Azure DevOps Wiki Collator","description":"Install the Azure DevOps Wiki collator to index wiki content so it appears in Portal search results and is available to AiKA.","href":"/portal/guides/integrations/azure-devops/azure-devops-wiki-collator"}]},{"group":"GitLab","root":{"title":"GitLab","sidebarTitle":"Overview","href":"/portal/guides/integrations/gitlab/index"},"pages":[{"title":"Setup the GitLab integration in App Settings","href":"/portal/guides/integrations/gitlab/gitlab-app-settings-integrations"},{"title":"Setup GitLab Discovery","href":"/portal/guides/integrations/gitlab/gitlab-discovery"}]},{"title":"AWS Credentials","href":"/portal/guides/integrations/aws-credentials"},{"title":"Migrating to a GitHub App Integration","sidebarTitle":"Migrating to a GitHub App","href":"/portal/guides/integrations/migrating-to-a-github-app-integration"},{"title":"Ingesting Entities into your Catalog from GitHub","sidebarTitle":"Ingesting Entities into your Catalog from GitHub","href":"/portal/guides/integrations/ingesting-entities-into-your-catalog-from-github"},{"title":"Storing Entity Metadata outside of your SCM System","sidebarTitle":"Storing Entity Metadata outside of your SCM System","href":"/portal/guides/integrations/storing-entity-metadata-outside-of-your-scm-system"}]},{"title":"Enabling recovery mode","sidebarTitle":"Enabling recovery mode","href":"/portal/guides/enable-recovery-mode"},{"group":"Confidence Flags","root":{"title":"Introduction to Flags","sidebarTitle":"Overview","href":"/portal/guides/confidence-flags/index"},"pages":[{"title":"Confidence Flag SDKs","sidebarTitle":"Flag SDKs","href":"/portal/guides/confidence-flags/sdks"},{"title":"Configure a Flag","sidebarTitle":"Quickstart","href":"/portal/guides/confidence-flags/quickstart"},{"title":"Rules","sidebarTitle":"Rules","href":"/portal/guides/confidence-flags/rules"},{"title":"Flags","sidebarTitle":"Reference","href":"/portal/guides/confidence-flags/reference"},{"title":"Resolve Tester","sidebarTitle":"Resolve tester","href":"/portal/guides/confidence-flags/resolve-tester"},{"title":"Audience","href":"/portal/guides/confidence-flags/audience"}]},{"title":"Event-Driven Catalog Component Updates","sidebarTitle":"Event-Driven Catalog Component Updates","href":"/portal/guides/events-based-github"},{"group":"Admin","pages":[{"title":"Getting Started with Admin","sidebarTitle":"Getting Started","href":"/portal/guides/Admin/getting_started"},{"title":null,"href":"/portal/guides/Admin/create-api-key"}]},{"group":"Portal Connect","root":{"title":"Portal Connect","href":"/portal/guides/portal-connect/index"},"pages":[{"title":"Installation and Setup","href":"/portal/guides/portal-connect/installation"},{"title":"Managing Portal Connect","href":"/portal/guides/portal-connect/managing"},{"title":"Security Model","href":"/portal/guides/portal-connect/security"}]}]},{"title":"Portal Security Overview","sidebarTitle":"Security","href":"/portal/security"},{"group":"Troubleshooting","root":{"title":"Troubleshooting","sidebarTitle":"Overview","href":"/portal/troubleshooting/index"},"pages":[{"title":"GitHub Integration Troubleshooting","href":"/portal/troubleshooting/github-integration"},{"title":"Troubleshooting Rate Limiting Issues","sidebarTitle":"Rate Limiting Issues","href":"/portal/troubleshooting/rate-limiting"}]},{"title":"Spotify Portal for Backstage Changelog","sidebarTitle":"Changelog","href":"/portal/changelog"},{"title":"Videos","mode":"wide","href":"/portal/videos"}]},{"tab":"Plugins","pages":[{"title":"Plugins","href":"/plugins"}]},{"tab":"Xirp","pages":[{"title":"Xirp","href":"/xirp"}]}]},"basePath":"","title":"Azure DevOps - Spotify for Backstage","buildId":"dpl_eBQnj73Q1gDRVNqNsS3Yt9yPkTEW","deploymentId":"dpl_eBQnj73Q1gDRVNqNsS3Yt9yPkTEW","dynamics":[],"chunks":[]}