@MartinJaffer-MSFT - Sorry... my response was too long for the reply, so I put it here. :)
cc: @MarkKromer-MSFT , @Abhishek Narain | MSFT
I'm not attempting to execute via the Trigger now functionality and am aware of the difference in behavior.
Unfortunately, the issue I am trying to explain is difficult to do so purely via text. It works better in a conversational format.
Furthermore, only our DEV instance(s) are currently connected to Git Repos. All other environments are built using the CICD Pipeline and operate in Live mode. These environments do not suffer the same challenges as DEV as they are operating on published artifacts and configuration.
My challenge remains at the DEV level and specifically when we have conflicting changes that need to be performed on independent tracks.
We are using key vault where possible to store credentials and connection strings.
Let's also make the following assumptions:
- Azure Key Vault is used where possible
- 3 developers on the team (A, B, and C)
- changes being performed affect linked service assets
-- Azure SQL Database
-- Azure Function
-- Azure Storage
Developer A is working on changes in the DEV environment and using the /dev branch to support a bug fix currently in PROD.
Developer B is working on changes in the DEV environment and using the /fb1 branch to add new functionality for an upcoming release.
Developer C is working on changes in the DEV environment and using the /fb2 branch to modify the behavior of existing functionality that has the potential to break the way the existing behavior operates.
If Developers A, B, and C are all working on the same ADF instance they likely can do so without significant issue. However, they will likely run into problems when they need to make changes to tables or stored procedures in Azure SQL or any of the Azure services used by the DEV Data Factory.
One way to avoid these conflicts are to create completely separate ADF and Azure services instances. You can still point the "new" ADF instance to the Feature Branch within the same Repo, but now you run into a problem with the linked services configuration files. As a result, the ADF-FB1 instance is still connected to the same linked services as ADF-DEV.
Ideally, you would be able to manually edit the configuration files in the linkedService folder to modify:
- azureFunctionLinkedService.json -> functionAppUrl (does not support dynamic content)
- dataLakeStorageLinkedService.json -> url
- keyVaultLinkedService.json -> baseUrl
This would allow ADF-FB1 to be connected to the FB1 specific Azure instances.
The challenge here is with the merging of changes across the branches. When you merge from /fb1 into /dev, you will overwrite the linked service configs and now DEV will point to the FB1 service instances.
Potential solutions:
- Adding parameterization support for the Azure Function URL would allow us to parameterize the URL and would likely eliminate the need to alter the json config files.
- Git magic that would prevent certain commits, files, folders from being included in a merge would prevent the linkedService changes from being promoted when not desired/intended. This would likely need to be done explicitly as sometimes you want them and sometimes you don't.