Share via

CI/CD GitHub Deployment from Dev to UAT Synapse Workspace not Picking Up UAT Resources

Anonymous
2025-09-25T11:11:18.1533333+00:00

Hello,

I am setting up CI/CD for Azure Synapse Analytics using GitHub Actions with multiple environments (Dev, UAT, Prod).

My Synapse resources are:

Dev: ************-dev, azcalsbdatalakedev, calsbvaultdev, SQL DB azcalsbazuresqldev / MetaData

UAT: ************-uat, azcalsbdatalakeuat, calsbvaultuat, SQL DB azcalsbazuresqluat / MetaData

Prod: ***********-prod, azcalsbdatalakeprod, azcalsbvaultprod, SQL DB azcalsbazuresqlprod / MetaData

I have environment-specific parameter override files like uat.json and prod.json. My GitHub workflows (synapse-dev.yml, synapse-uat.yml, etc.) deploy the Synapse publish artifacts (TemplateForWorkspace.json and TemplateParametersForWorkspace.json) with those overrides.

Issue:

When I run the UAT workflow, deployment completes successfully but the UAT Synapse workspace still shows Dev resources. For example, linked services like LS_ADLS still point to azcalsbdatalakedev instead of azcalsbdatalakeuat.

What I have tried:

Created overrides for UAT (uat.json) with correct workspace name and connection strings

Checked GitHub workflow YAML to confirm the override file is being passed in the az deployment group create step

Verified that Dev deployment works fine

Tried changing default values in linked services JSON but behavior is inconsistent

Questions:

Is there a specific way to structure override files (uat.json) for Synapse CI/CD deployments so environment values are correctly replaced?

Do I need separate branches in GitHub for Dev, UAT, and Prod, or can I deploy to all environments from main with overrides?

Has anyone else seen linked services or parameters still pointing to Dev even after a UAT deployment?

Any guidance, best practices, or sample YAML and override examples would be very helpful.

Thanks in advance.

Azure Synapse Analytics
Azure Synapse Analytics

An Azure analytics service that brings together data integration, enterprise data warehousing, and big data analytics. Previously known as Azure SQL Data Warehouse.


3 answers

Sort by: Most helpful
  1. Anonymous
    2025-10-04T13:35:11.6433333+00:00

    I wanted to share how the GitHub CI/CD pipeline was configured to handle the default parameter value for LS_ADLS.

    What Worked:

    The CI/CD pipeline successfully implemented the following:

    1. Issue Identified: Initially, I was NOT passing the default value as a parameter in the template definition
    2. Solution Implemented: Updated the ARM template parameter configuration to include default values
    3. Template Updated: Modified the Synapse linked service definition to use parameterized default values

    Template Parameter Definition:

    json

    {
      "Microsoft.Synapse/workspaces/linkedServices": {
        "AzureBlobFS": {
          "properties": {
            "typeProperties": {
              "url": "="
            },
            "parameters": {
              "*": {
                "defaultValue": "="
              }
            }
          }
        }
      }
    }
    

    What Changed:

    • Added the defaultValue property to the parameters section
    • The "=" syntax allows the default value to be pulled from the pipeline parameter
    • This ensures LS_ADLS now has a default value defined in the template itself

    This configuration allows the pipeline to run smoothly with the default LS_ADLS value while still maintaining the flexibility to override it when needed.

    Was this answer helpful?


  2. Anonymous
    2025-09-29T11:59:45.44+00:00

    I am working on Synapse CI/CD using GitHub. I have parameterized my LS_ADLS linked service in Dev (main branch → Synapse Workspace Dev).

    When I publish from Dev, the linked service is parameterized correctly and shows the default value:

    "defaultValue": "https://azcalsbdatalakedev.dfs.core.windows.net/"
    

    This works fine in Dev, but when I merge the PR to UAT branch, run my synapse-uat.yml deployment pipeline, and use the override parameters file, the linked service gets parameterized but does not update the defaultValue to point to the UAT resource (https://azcalsbdatalakeuat.dfs.core.windows.net/).

    Here are my key files/snippets:

    1. TemplateParametersForWorkspace.uat.json
    {
      "parameters": {
        "workspaceName": {
          "value": "calbarsynapsews-uat"
        },
        "LS_ADLS_connectionString": {
          "value": "https://azcalsbdatalakeuat.dfs.core.windows.net/"
        }
      }
    }
    

    template-parameters-definition.json

    {
      "Microsoft.Synapse/workspaces/linkedServices": {
        "AzureBlobFS": {
          "properties": {
            "typeProperties": {
              "url": "="
            }
          }
        }
      }
    }
    

    Linked Service definition (LS_ADLS) UAT / Dev both currently show default value pointing to Dev:

    "defaultValue": "https://azcalsbdatalakedev.dfs.core.windows.net/"
    "typeProperties": {
      "url": "@{linkedService().LS_ADLS_connectionString}"
    }
    

    Issue: Despite having TemplateParametersForWorkspace.uat.json with the UAT endpoint, after deployment the linked service in Synapse UAT still shows the defaultValue from Dev (azcalsbdatalakedev).

    Question: How do I make sure the deployment pipeline correctly overrides the default value in UAT so that Synapse workspace reflects the UAT resource (azcalsbdatalakeuat) instead of Dev?I am working on Synapse CI/CD using GitHub. I have parameterized my LS_ADLS linked service in Dev (main branch → Synapse Workspace Dev).

    Was this answer helpful?


  3. Sina Salam 30,166 Reputation points Volunteer Moderator
    2025-09-25T13:44:01.0266667+00:00

    Hello Ahirwal, Varsha,

    Welcome to the Microsoft Q&A and thank you for posting your questions here.

    Regarding the situation, to fix the issue, follow the steps below in order:

    Step 1:

    In Synapse Studio, when publishing, ensure linked services, datasets, and pipelines are parameterized and check TemplateForWorkspace.json for:

    "parameters": {
        "LS_ADLS_connectionString": {
          "type": "string"
        }
      }
    

    If missing, re-publish with parameterization enabled. - https://learn.microsoft.com/en-us/azure/synapse-analytics/cicd/continuous-integration-delivery

    Step 2:

    Your uat.json should correctly look like:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "LS_ADLS_connectionString": {
          "value": "https://azcalsbdatalakeuat.dfs.core.windows.net/"
        },
        "workspaceName": {
          "value": "-uat"
        }
      }
    }
    

    Key Rule: Parameter names in override file must match those in TemplateParametersForWorkspace.json.

    Step 3:

    Ensure the deployment step uses:

    - name: Deploy Synapse Workspace
      run: |
        az deployment group create \
          --resource-group ${{ env.RESOURCE_GROUP }} \
          --template-file TemplateForWorkspace.json \
          --parameters @TemplateParametersForWorkspace.json \
          --parameters @uat.json
    

    Step 4:

    This is for ARM templates deploy infrastructure. So use Synapse Workspace Deployment task or Azure CLI Synapse commands for Synapse artifacts like below sample:

    - name: Deploy Synapse Artifacts
      run: |
        az synapse workspace artifact publish \
          --workspace-name ${{ env.WORKSPACE_NAME }} \
          --artifact-path ./artifacts
    

    https://learn.microsoft.com/en-us/azure/synapse-analytics/cicd/source-control

    Step 5:

    Validate your enviroment secret to ensure Key Vault references are updated in UAT and if you're using managed identity, grant Synapse UAT workspace access to UAT Key Vault.

    I hope this is helpful! Do not hesitate to let me know if you have any other questions or clarifications.


    Please don't forget to close up the thread here by upvoting and accept it as an answer if it is helpful.

    Was this answer helpful?

    0 comments No comments

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.