{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreihw6jun56ngaajbc4ap36vphdrzcj3s2ic3muhjxyajnyupiiow2e",
    "uri": "at://did:plc:7hif3wqfl2tajwyskuuvn2dh/app.bsky.feed.post/3moniedz5m7d2"
  },
  "coverImage": {
    "$type": "blob",
    "ref": {
      "$link": "bafkreie4zblnpemiqkpl2ofrkah5ueapxzqc3oqchfhgxcnyoyvrie3gze"
    },
    "mimeType": "image/jpeg",
    "size": 405574
  },
  "description": "I recently helped a client migrate from Azure DevOps to GitHub Enterprise Managed Users with Data Residency (ghe.com for short). And as part of the migration we rewired the exiting Azure Pipelines from the old repository located on Azure Repos to the new one on GitHub.",
  "path": "/configure-azure-pipelines-app-in-ghe-com/",
  "publishedAt": "2026-06-19T13:50:47.000Z",
  "site": "https://jessehouwing.net",
  "tags": [
    "we weren't the first to hit this snag"
  ],
  "textContent": "I recently helped a client migrate from Azure DevOps to GitHub Enterprise Managed Users with Data Residency (ghe.com for short). And as part of the migration we rewired the exiting Azure Pipelines from the old repository located on Azure Repos to the new one on GitHub.\n\nWith GitHub Enterprise this is quite easy, create a new service connection in Azure DevOps and click the magic authorize button to install the app into GitHub automatically. Unfortunately no such luck in ghe.com, even though there is a special service connection type:\n\nSelect the GitHub Enterprise Cloud with data residency service connection type to link Azure Pipelines with ghe.com\n\nThe screen mentions: \"GitHub Organization should have azure pipelines app already installed\", but there is no documentation anywhere on how to actually do that.\n\nUnfortunately, this already expects the Azure Pipelines app to be installed in the target GitHub organization\n\nAnd unfortunately, it turned out we weren't the first to hit this snag. And the error message is not very helpful either:\n\nThe error message you receive is \"Could not complete OAuth Authorization; verify you have enough permissions to perform this operation\"\n\nI reached out to my contacts in GitHub and Azure DevOps to see if they knew what to do, but unfortunately, even they did not know.\n\nI decided to play around some more and stumbled upon this well hidden url based on the url of the Azure Boards app by replacing `boards` with `pipeline`\n\n\n    https://{enterprise-slug}.ghe.com/apps/external-app/azure-boards\n    https://{enterprise-slug}.ghe.com/apps/external-app/azure-pipelines\n\nAnd lo and behold, from this location you can install the Azure Pipelines app:\n\nBy navigating directly to the hidden Azure Pipelines GitHub App installation page you can install the app\n\nClick **Install** to and select your GitHub organization, after which the configuration of the service connection will work without a hitch:\n\n\nSelect the GitHub Organization you want to link to your Azure DevOps Project.\n\nSelect the repos you want to enable for Azure Pipelines:\n\nSelect which repos in GitHub should be available to Azure Pipelines\n\nAfter which you are redirected to Azure DevOps to complete the installation:\n\nSelect the correct Azure DevOps organization and project\n\nIf you now go back into the settings of your Azure DevOps Project, you should be able to create the new service connection:\n\nCreate the new service connection, which should work without any issues.\n\nClick **Authorize** after which you'll be able to **Save** the new service connection.\n\nTo rewire a pipeline, navigate to the pipeline you want to rewire and click **Edit** :\n\nEdit your existing Azure Pipelines Definitions to rewire them to GitHub\n\nClick the **⁞** button and then select **Triggers:**\n\nUse the triggers editor to navigate to the classic Pipelines editor\n\nThis brings you to the classic pipelines editor on which you can navigate to the **YAML** tab:\n\nIn the classic Pipelines editor, navigate to the YAML tab to change the source location\n\nSelect the **Get Souces** element in the pipeline\n\nSelect the Get Sources step to rewire the pipeline to GitHub\n\nAnd rewire the pipeline to **GitHub** by selecting the GitHub tile and picking the Service Connection we previously created:\n\nAfter selecting GitHub, change the service connection, repository and default branch",
  "title": "Configure Azure Pipelines app in ghe.com",
  "updatedAt": "2026-06-19T13:50:48.139Z"
}