Azure Citadel
  • Blogs

  • ARM
  • Azure Arc
    • Overview
    • Azure Arc-enabled Servers
      • Prereqs
      • Scenario
      • Hack Overview
      • Azure Landing Zone
      • Arc Pilot resource group
      • Azure Monitoring Agent
      • Additional policy assignments
      • Access your on prem VMs
      • Create onboarding scripts
      • Onboarding using scripts
      • Inventory
      • Monitoring
      • SSH
      • Windows Admin Center
      • Governance
      • Custom Script Extension
      • Key Vault Extension
      • Managed Identity
    • Azure Arc-enabled Kubernetes
      • Prereqs
      • Background
      • Deploy Cluster
      • Connect to Arc
      • Enable GitOps
      • Deploy Application
      • Enable Azure AD
      • Enforce Policy
      • Enable Monitoring
      • Enable Azure Defender
      • Enable Data Services
      • Enable Application Delivery
    • Useful Links
  • Azure CLI
    • Install
    • Get started
    • JMESPATH queries
    • Integrate with Bash
  • Azure Landing Zones
    • Prereqs
    • Day 1
      • Azure Baristas
      • Day 1 Challenge
    • Day 2
      • Example
      • Day 2 Challenge
    • Day 3
      • Day 3 Challenge
    • Useful Links
  • Azure Policy
    • Azure Policy Basics
      • Policy Basics in the Azure Portal
      • Creating Policy via the CLI
      • Deploy If Not Exists
      • Management Groups and Initiatives
    • Creating Custom Policies
      • Customer scenario
      • Policy Aliases
      • Determine the logic
      • Create the custom policy
      • Define, assign and test
  • Azure Stack HCI
    • Overview
    • Useful Links
    • Updates from Microsoft Ignite 2022
  • Marketplace
    • Introduction
      • Terminology
      • Offer Types
    • Partner Center
    • Offer Type
    • Publish a VM Offer HOL
      • Getting Started
      • Create VM Image
      • Test VM Image
      • VM Offer with SIG
      • VM Offer with SAS
      • Publish Offer
    • Other VM Resources
    • Publish a Solution Template HOL
      • Getting Started
      • Create ARM Template
      • Validate ARM Template
      • Create UI Definition
      • Package Assets
      • Publish Offer
    • Publish a Managed App HOL
      • Getting Started
      • Create ARM Template
      • Validate ARM Template
      • Create UI Definition
      • Package Assets
      • Publish Offer
    • Managed Apps with AKS HOL
    • Other Managed App Resources
    • SaaS Offer HOLs
    • SaaS Offer Video Series
      • Video 1 - SaaS Offer Overview
      • Video 2 - Purchasing a SaaS Offer
      • Video 3 - Purchasing a Private SaaS Plan
      • Video 4 - Publishing a SaaS Offer
      • Video 5 - Publishing a Private SaaS Plan
      • Video 6 - SaaS Offer Technical Overview
      • Video 7 - Azure AD Application Registrations
      • Video 8 - Using the SaaS Offer REST Fulfillment API
      • Video 9 - The SaaS Client Library for .NET
      • Video 10 - Building a Simple SaaS Landing Page in .NET
      • Video 11 - Building a Simple SaaS Publisher Portal in .NET
      • Video 12 - SaaS Webhook Overview
      • Video 13 - Implementing a Simple SaaS Webhook in .NET
      • Video 14 - Securing a Simple SaaS Webhook in .NET
      • Video 15 - SaaS Metered Billing Overview
      • Video 16 - The SaaS Metered Billing API with REST
  • Microsoft Fabric
    • Theory
    • Prereqs
    • Fabric Capacity
    • Set up a Remote State
    • Create a repo from a GitHub template
    • Configure an app reg for development
    • Initial Terraform workflow
    • Expanding your config
    • Configure a workload identity
    • GitHub Actions for Microsoft Fabric
    • GitLab pipeline for Microsoft Fabric
  • Packer & Ansible
    • Packer
    • Ansible
    • Dynamic Inventories
    • Playbooks & Roles
    • Custom Roles
    • Shared Image Gallery
  • Partner
    • Lighthouse and Partner Admin Link
      • Microsoft Cloud Partner Program
      • Combining Lighthouse and PAL
      • Minimal Lighthouse definition
      • Using service principals
      • Privileged Identity Management
    • Useful Links
  • REST API
    • REST API theory
    • Using az rest
  • Setup
  • Terraform
    • Fundamentals
      • Initialise
      • Format
      • Validate
      • Plan
      • Apply
      • Adding resources
      • Locals and outputs
      • Managing state
      • Importing resources
      • Destroy
    • Working Environments for Terraform
      • Cloud Shell
      • macOS
      • Windows with PowerShell
      • Windows with Ubuntu in WSL2
    • Using AzAPI
      • Using the REST API
      • azapi_resource
      • Removing azapi_resource
      • azapi_update_resource
      • Data sources and outputs
      • Removing azapi_update_resource
  • Virtual Machines
    • Azure Bastion with native tools & AAD
    • Managed Identities

  • About
  • Archive
  1. Home
  2. Microsoft Fabric
  3. GitLab pipeline for Microsoft Fabric

Table of Contents

  • Introduction
  • Pre-reqs
  • Add environment variables to GitLab
  • Add GitLab variables
  • Federated credential
    • Portal
    • CLI
  • References

GitLab pipeline for Microsoft Fabric

See how GitLab differs from GitHub when configuring OpenID Connect and workflows.

Introduction

There are numerous cloud Git platforms that could host your Microsoft Fabric deployment workflows. The two most commonly used on Azure are the first party products, i.e. GitHub Actions and Azure DevOps pipelines, but you have a far greater range of options as OpenID Connect is part of the OAuth2.0 open standard and enjoys wide support. One of those is GitLab, and this page will explore how you integrate GitLab and Microsoft Fabric

In practice most workload identities serve a specific purpose and you will normally see a single federated credential representing a 1:1 relationship between the trusted identity provider (IdP) and the context. However, the platform does support up to ten federated credentials so no problem with adding one.

On this page we will switch the upstream for our Git repo to GitLab. You will see the difference in the federated credential, but in reality the platforms have plenty in common.

I am not a GitLab expert, so please feel free to jump on the source repo for this site and create an enhancement if you see errors, or want to suggest a more common approach for those working with GitLab on a day to day basis.

Pre-reqs

You will need

  • a GitLab account
  • the GitLab Workflows extension in vscode

After you sign up you should have a group and a default project. Feel free to remove the project as we will push our current repo later on this page.

Add environment variables to GitLab

  1. Set the variables

    Set these to your correct values.

    fabric_subscription_id="<subscriptionGuid>"
    backend_subscription_id="<subscriptionGuid>"
    resource_group_name="terraform"
    managed_identity_name="fabric_terraform_provider"
    
    fabric_subscription_id="73568139-5c52-4066-a406-3e8533bb0f15"
    backend_subscription_id="73568139-5c52-4066-a406-3e8533bb0f15"
    resource_group_name="terraform"
    managed_identity_name="fabric_terraform_provider"
    

    ⚠️ If you have used a single subscription then set both subscription_id variables to the same value.

  2. Derive additional values then display the suggested GitLab variable names and values

    tenant_id=$(az account show --name $fabric_subscription_id --query tenantId -otsv)
    client_id=$( az identity show --name fabric_terraform_provider --resource-group $resource_group_name --subscription $backend_subscription_id --query clientId -otsv)
    storage_account_name=$(az storage account list --resource-group $resource_group_name --subscription $backend_subscription_id --query "[?starts_with(name,'terraformfabric')]|[0].name" -otsv)
    
    echo
    echo "ARM_TENANT_ID                                   $tenant_id"
    echo "ARM_SUBSCRIPTION_ID                             $fabric_subscription_id"
    echo "ARM_CLIENT_ID                                   $client_id"
    echo "BACKEND_AZURE_SUBSCRIPTION_ID                   $backend_subscription_id"
    echo "BACKEND_AZURE_RESOURCE_GROUP_NAME               terraform"
    echo "BACKEND_AZURE_STORAGE_ACCOUNT_NAME              $storage_account_name"
    echo "BACKEND_AZURE_STORAGE_ACCOUNT_CONTAINER_NAME    prod"
    echo "TFVARS_FILE                                     prod.tfvars"
    

Add GitLab variables

  1. Open GitLab and navigate into your repo

  2. Open Settings > CI/CD in the sidebar

  3. Expand the Variables section

  4. Add project variables for each of the required variables using the information output to screen above

    ℹ️ For this lab I unchecked Protect variable on each as I was not focusing on GitLab branch protections. Note that you can download and configure the glab CLI with a personal access token if you wish to automate this step as well.

Federated credential

Portal

  1. Navigate back to your managed identity in the Azure Portal

  2. Settings > Federated credentials

  3. Add credential

    • federated credential scenario: Other

    • issuer URL

      https://gitlab.com
      
    • subject identifier

      project_path:<group>/<project>:ref_type:branch:ref:main
      
    • name: unique identifier, e.g. gitlab-main-branch

CLI

  1. Variables

    rg="terraform"
    identity="fabric_terraform_provider"
    gitlab_group="richeney-group"
    gitlab_project="fabric_terraform_provider"
    branch="main"
    
  2. Add the federated credential to your managed identity

    az identity federated-credential create --name gitlab-main-branch \
      --identity-name $identity --resource-group $rg \
      --audiences "api://AzureADTokenExchange" "https://gitlab.com" \
      --issuer "https://gitlab.com" \
      --subject "project_path:$gitlab_group/$gitlab_project:ref_type:branch:ref:$branch"
    

    Example output:

    {
      "audiences": [
        "api://AzureADTokenExchange"
      ],
      "id": "/subscriptions/73568139-5c52-4066-a406-3e8533bb0f15/resourcegroups/terraform/providers/Microsoft.ManagedIdentity/userAssignedIdentities/fabric_terraform_provider/federatedIdentityCredentials/gitlab-main-branch",
      "issuer": "https://gitlab.com",
      "name": "gitlab-main-branch",
      "resourceGroup": "terraform",
      "subject": "project_path:richeney-group/fabric_terraform_provider:ref_type:branch:ref:main",
      "systemData": null,
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials"
    }
    

References

  • https://spacelift.io/blog/gitlab-ci-yml
  • https://docs.gitlab.com/ci/secrets/id_token_authentication/
  • https://gitlab.com/demos/infrastructure/terraform-multi-env/-/blob/main/helper.yml
GitHub Actions for Microsoft Fabric GitLab pipeline for Microsoft Fabric Next