Synapse pipeline import resource from git - azure

I have a situation here where I import resources from my Azure DevOps Git repository DEV to TEST, I want DEV code to be independent of TEST and not commit my changes back to the repository.
After I import the repository to TEST I made changes to the SQL database connection string in the copy activity source and sink in TEST and had to commit the changes for the debug to run and the triggers I have setup for the pipelines don't run in TEST as per the schedule and fail in DEV because of the changes I did in TEST.
When move the pipelines and underlying objects to different environments, How do I make all the environments independent once I import repository? Is there a way to copy from the repository to the Synapse live mode to accomplish this?
OR How would I automate deployment of Synapse pipelines? Is it using ARM or Bicep Template?

You'll want to follow Microsoft's guide on CI/CD with Synapse. This is a great walkthrough video for the process.
The flow is:
Work in your development environment and commit to your collaboration branch.
A pipeline triggers off of your workspace_publish branch, releasing your code to your next environment (preferably with an approval gate)
Continue releasing the same code to higher environments, again with approval gates.
For Azure DevOps, you can use variable groups to parameterize your pipeline. Also make sure to read through the custom parameters section on that link to parameterize parts of the template that are not parameterized by default.

Related

Azure Data Factory Environment Set up

I am setting up an environment for ADF. I have multiple projects and Segments which I need to support. I have noticed that I can only set up one publish branch in ADF.
Should we create ADF for each project?
What is the recommended approach for setting up an environment ?.
Multiple ADFs are required if there is complete different project with different data. If you want to work in same project and just need to manage different environment like development, testing and prod; all this can be managed in one ADF.
A developer creates a feature branch to make a change. They debug their pipeline runs with their most recent changes. For more information on how to debug a pipeline run, see Iterative development and debugging with Azure Data Factory.
After a developer is satisfied with their changes, they create a pull request from their feature branch to the main or collaboration branch to get their changes reviewed by peers.
After a pull request is approved and changes are merged in the main branch, the changes get published to the development factory.
When the team is ready to deploy the changes to a test or UAT (User Acceptance Testing) factory, the team goes to their Azure Pipelines release and deploys the desired version of the development factory to UAT. This deployment takes place as part of an Azure Pipelines task and uses Resource Manager template parameters to apply the appropriate configuration.
After the changes have been verified in the test factory, deploy to the production factory by using the next task of the pipelines release.
Note
Note: Only the development factory is associated with a git repository. The test and production factories shouldn't have a git repository associated with them and should only be updated via an Azure DevOps pipeline or via a Resource Management template.

Azure Synapse Analytics - CI/CD workspace and infrastructure - Design question

I have an Azure Repos project with IaC code and ci/cd yaml pipelines to set up Azure Synapse infrastructure. Can you recommend what is right approach when I integrate the workspace to connect to git? Should I create a new project in Azure Repos for the Synapse artifacts or should I use the same repository as the infrastructure project?
I will be setting up ci/cd pipelines to deploy the azure synapse artifacts as well.
Thanks!
Here's an answer to a similar question I posted:
You'll want to follow Microsoft's guide on CI/CD with Synapse. This is a great walkthrough video for the process.
Work in your development environment and commit to your collaboration branch.
A pipeline triggers off of your workspace_publish branch, releasing your code to your next environment (preferably with an approval gate)
Continue releasing the same code to higher environments, again with approval gates.
For Azure DevOps, you can use variable groups to parameterize your pipeline. Also make sure to read through the custom parameters section on that link to parameterize parts of the template that are not parameterized by default.

Export ARM template for ADF and deploy it in another ADF instance using DevOps

I have two instances of Azure Data Factory in which one is integrated with GIT repo and another is not.
I have taken ARM templates from non GIT ADF instance using Export ARM template option.
I have to deploy this ARM template in the second ADF instance using azure DevOps pipeline.
How should I do this process using the devOps pipeline.
Is there any way to fetch this downloaded ARM templates using devOps pipeline and deploy in another ADF instance?
Also before deployment I have to replace some text in the json files. (ex: instance01/tmp/file to instance02/tmp/file) Is there any shell script that can be make use here?
Deploying the code to the other Data Factory will not be a problem.
After downloading the ARM template for the non Git integrated one there should be a parameter for what Data Factory you are deploying to. It would be as simple as updating that parameter to point to the other instance of Data Factory and deploying the ARM template either via Azure DevOps or Powershell w/ the Incremental deployment. This is possible since the deployment will do a delta and each pipeline/linked service/ data set will be it's own resource it should deploy the new. Just be careful if there are any conflicts on the naming standard.
The issue you will run into will be the source code definition. The way the CI/CD integration works is the collaboration branch, usually master, is defined and when clicking publish the changes are consolidated and pushed to adf_publish by default. The adf_publish will be the definition of the Data Factory that is published. Since we are publishing outside of a repository neither the master nor adf_publish will have any knowledge of the changes. Unfortunately given that adf_publish cannot merge back into master the best way might be to stand up a new repo or reimport the data factory definition after the manual publish has occurred.

selection of task in release pipeline in azure devops

I have a build pipeline which I created and I have the artifacts in a drop folder.
Now I want to deploy these artifacts. The drop folder contains my data factory resources like pipelines, datasets.
I have 2 questions:
What task for the agent should I select in the release pipeline to deploy this folder?
How do I specify that in this environment it should go ? i.e. If I suppose have a QA environment, then how do I specify that thing?
I am actually confused over this selection of task for the agent.
What task for the agent should I select in the release pipeline to
deploy this folder?
It's based on where and how you want to deploy the artifacts.
If you just want to deploy them in a local machine where you can access, then you just need to add a Copy Files task to copy the artifacts to the target folder.
If you want to deploy to other remote sites or third party services, then you need to select other tasks based on your requirements, and some of them we need to create services connections to access them.
For example Deploy to Azure(e.g. Deploy a web app to Azure App Services)
How do I specify that in this environment it should go ? i.e. If I
suppose have a QA environment, then how do I specify that thing?
In release pipeline we can defined multiple environments/stages, in each environment we can add different tasks to do the actions based on our requirements. We need to add the artifacts sources to deploy them in the release pipeline. Please see Release pipelines for details. You can reference below links to do that:
Reference Exercise 2: Examine the CI/CD pipelines configured by
Azure DevOps Project
Azure DevOps - creating a release pipeline- Video Guide

Start ARM template deploy conditionally in Azure Devops

My source code is on GitHub.
I have an Azure Devops pipeline set up to build and deploy the application to an Azure subscription.
I also have the full azure environment defined in ARM templates.
I'd like to run the template deployment only when a specific folder changes in my GitHub repo.
Path triggers are only for Azure Devops repos.
Other possible solutions I investigated, but there is no clear documentation on how to achieve this exactly:
Custom condition on build or release task.
Pre-deployment conditions. Maybe artifact filters?
Pre-deployment Gates?
The ARM template deployment is idempotent, I know, but it takes a several long minutes to run even if there was no infrastructure change and I'd like to avoid that time wasted on every build.
Sounds like you have a single pipeline for both the infrastructure and application code. I have separate pipelines for each, one for infrastructure as code and other builds/pipelines for applications, NuGet package creation, etc. Perhaps split the pipeline and have the application deployment trigger after and separately from the infrastructure deployment pipeline. That way the application build and deployment can run in a more frequent cycle.

Resources