Add and configure a catalog from GitHub or Azure DevOps

This guide explains how to add and configure a catalog in your Azure Deployment Environments dev center. A catalog is a repository hosted in GitHub or Azure DevOps.

You can use a catalog to provide your development teams with a curated set of infrastructure as code (IaC) templates called environment definitions.

Deployment Environments supports catalogs hosted in Azure Repos (the repository service in Azure, commonly referred to as Azure DevOps) and catalogs hosted in GitHub. Azure DevOps supports authentication by assigning permissions to a managed identity. Azure DevOps and GitHub both support the use of a personal access token (PAT) for authentication. To further secure your templates, the catalog is encrypted; Azure Deployment Environments supports encryption at rest with platform-managed encryption keys, which Microsoft for Azure Services manages.

Microsoft offers a quick start catalog that you can add to the dev center, and a sample catalog that you can use as your repository. You also can use your own private repository, or you can fork and customize the environment definitions in the sample catalog.

Configure a managed identity for the dev center

After you create a dev center, before you can attach a catalog, you must configure a managed identity, also called an MSI, for the dev center. You can attach either a system-assigned managed identity (system-assigned MSI) or a user-assigned managed identity (user-assigned MSI). You then assign roles to the managed identity to allow the dev center to create environment types in your subscription and read the Azure DevOps project that contains the catalog repo.

If your dev center doesn't have an MSI attached, follow the steps in Configure a managed identity to create one and to assign roles for the dev center managed identity.

To learn more about managed identities, see What are managed identities for Azure resources?

Add a catalog

You can add a catalog from an Azure DevOps repository or a GitHub repository. You can choose to authenticate by assigning permissions to an MSI or by using a PAT, which you store in a key vault.

Select the tab for the type of repository and authentication you want to use.

To add a catalog, complete the following tasks:

  • Assign permissions in Azure DevOps for the dev center managed identity.
  • Add your repository as a catalog.

Assign permissions in Azure DevOps for the dev center managed identity

You must give the dev center managed identity permissions to the repository in Azure DevOps.

  1. Sign in to your Azure DevOps organization.

    Note

    Your Azure DevOps organization must be in the same directory as the Azure subscription that contains your dev center.

  2. Select Organization settings.

    Screenshot showing the Azure DevOps organization page, with Organization Settings highlighted.

  3. On the Overview page, select Users.

    Screenshot showing the Organization overview page, with Users highlighted.

  4. On the Users page, select Add users.

    Screenshot showing the Users page, with Add user highlighted.

  5. Complete Add new users by entering or selecting the following information, and then select Add:

    Name Value
    Users or Service Principals Enter the name of your dev center.
    When you use a system-assigned MSI, specify the name of the dev center, not the object ID of the managed account. When you use a user-assigned MSI, use the name of the managed account.
    Access level Select Basic.
    Add to projects Select the project that contains your repository.
    Azure DevOps Groups Select Project Readers.
    Send email invites (to Users only) Clear the checkbox.

    Screenshot showing Add users, with example entries and Add highlighted.

Add your repository as a catalog

Azure Deployment Environments supports attaching Azure DevOps repositories and GitHub repositories. You can store a set of curated IaC templates in a repository. Attaching the repository to a dev center as a catalog gives your development teams access to the templates and enables them to quickly create consistent environments.

The following steps let you attach an Azure DevOps repository.

  1. In the Azure portal, navigate to your dev center.

  2. In the left menu under Environment configuration, select Catalogs, and then select Add.

    Screenshot that shows the Catalogs pane.

  3. In Add catalog, enter the following information, and then select Add:

    Field Value
    Name Enter a name for the catalog.
    Catalog location Select Azure DevOps.
    Authentication type Select Managed Identity.
    Organization Select your Azure DevOps organization.
    Project From the list of projects, select the project that stores the repo.
    Repo From the list of repos, select the repo you want to add.
    Branch Select the branch.
    Folder path Dev Box retrieves a list of folders in your branch. Select the folder that stores your IaC templates.

    Screenshot showing the add catalog pane with examples entries and Add highlighted.

  4. In Catalogs for the dev center, verify that your catalog appears. If the connection is successful, Status is Connected. Connecting to a catalog can take a few minutes the first time.

Update a catalog

If you update the Azure Resource Manager template (ARM template) contents or definition in the attached repository, you can provide the latest set of environment definitions to your development teams by syncing the catalog.

To sync an updated catalog in Azure Deployment Environments:

  1. On the left menu for your dev center, under Environment configuration, select Catalogs.

  2. Select the specific catalog, and then select Sync. The service scans through the repository and makes the latest list of environment definitions available to all of the associated projects in the dev center.

Delete a catalog

You can delete a catalog to remove it from the Azure Deployment Environments dev center. Templates in a deleted catalog aren't available to development teams when they deploy new environments. Update the environment definition reference for any existing environments that were created by using the environment definitions in the deleted catalog. If the reference isn't updated and the environment is redeployed, the deployment fails.

To delete a catalog:

  1. On the left menu for your dev center, under Environment configuration, select Catalogs.

  2. Select the specific catalog, and then select Delete.

  3. In the Delete catalog dialog, select Continue to delete the catalog.

Catalog sync errors

When you add or sync a catalog, you might encounter a sync error. A sync error indicates that some or all of the environment definitions have errors. Use the Azure CLI or the REST API to GET the catalog. The GET response shows you the type of error:

  • Ignored environment definitions that were detected to be duplicates.
  • Invalid environment definitions that failed due to schema, reference, or validation errors.

Resolve ignored environment definition errors

An ignored environment definition error occurs if you add two or more environment definitions that have the same name. You can resolve this issue by renaming environment definitions so that each environment definition has a unique name within the catalog.

Resolve invalid environment definition errors

An invalid environment definition error might occur for various reasons:

  • Manifest schema errors. Ensure that your environment definition environment file matches the required schema.

  • Validation errors. Check the following items to resolve validation errors:

    • Ensure that the environment file's engine type is correctly configured as ARM.
    • Ensure that the environment definition name is between 3 and 63 characters.
    • Ensure that the environment definition name includes only characters that are valid for a URL, which are alphanumeric characters and these symbols: ~ ! , . ' ; : = - _ + ( ) * & $ @
  • Reference errors. Ensure that the template path that the environment file references is a valid relative path to a file in the repository.