From 884c602d8ef48050f702e7aa0ad948f87cdf9c6f Mon Sep 17 00:00:00 2001 From: Sebastian Graef Date: Fri, 2 Sep 2022 08:24:45 +1000 Subject: [PATCH 1/3] in progress --- docs/wiki/Solution creation.md | 110 +++++++++++++++++- .../MultiRepoTestFolderStructure.png | Bin 2 files changed, 109 insertions(+), 1 deletion(-) rename docs/wiki/media/{ => SolutionCreation}/MultiRepoTestFolderStructure.png (100%) diff --git a/docs/wiki/Solution creation.md b/docs/wiki/Solution creation.md index 341626d393..b0adef4a5b 100644 --- a/docs/wiki/Solution creation.md +++ b/docs/wiki/Solution creation.md @@ -9,14 +9,22 @@ This section shows you how you can orchestrate a deployment using multiple resou - [Upstream workloads](#upstream-workloads) - [Orchestration overview](#orchestration-overview) - [Publish-location considerations](#publish-location-considerations) + - [Outline](#outline) + - [Comparison](#comparison) - [Template-orchestration](#template-orchestration) - [How to start](#how-to-start) - [Examples](#examples) - [Pipeline-orchestration](#pipeline-orchestration) + - [GitHub sample](#github-sample) - [Summary](#summary) - [Repo structure](#repo-structure) - [YAML pipeline](#yaml-pipeline) - [Notes](#notes) + - [Azure DevOps sample](#azure-devops-sample) + - [Summary](#summary-1) + - [Repo structure](#repo-structure-1) + - [YAML pipeline](#yaml-pipeline-1) + - [Notes](#notes-1) --- @@ -368,6 +376,8 @@ The example assumes you are using a [`bicepconfig.json`](https://docs.microsoft. The modules provided in this repo can be orchestrated to create more complex infrastructures, and as such, reusable solutions or products. To deploy resources, the pipeline-orchestration approach leverages the modules & pipeline templates of the 'ResourceModules' repository. Each pipeline job deploys one instance of a resource and the order of resources deployed in a multi-module solution is controlled by specifying dependencies in the pipeline itself. +## GitHub sample +
GitHub Sample solution for multi-repository approach @@ -386,7 +396,7 @@ The modules provided in this repo can be orchestrated to create more complex inf ### Repo structure - Repository Structure + Repository Structure ### YAML pipeline @@ -469,3 +479,101 @@ jobs: > 1. 'contoso/MultiRepoTest' repo has been checked out in a nested folder, called "MultiRepoTestParentFolder", to distinguish it from the folders of the other repo in the agent, but can also be downloaded at the root location if desired.
+ +## Azure DevOps sample + +
+Azure DevOps sample solution for multi-repository approach + +### Summary + +1. Below, you can find an example which makes use of multiple repositories to orchestrate the deployment (also known as a _multi-repository_ approach) in Azure DevOps. +2. It fetches the _public_ **Azure/ResourceModules** repo for consuming modules and uses the parameter files present in the _private_ **Litware/Platform** repo for deploying infrastructure. +3. This example is creating a Resource group, an NSG and a VNet - + 1. Job: **Deploy multi-repo solution** + 1. Checkout 'Azure/ResourceModules' repo in a nested folder "ResourceModules" at root of the agent + 2. Set environment variables for the agent + 3. Checkout 'Litware/Platform' repo containing the parameter files in a nested folder - "Platform" + 4. Deploy resource group in target Azure subscription + 5. Deploy network security group + 6. Deploy virtual network A + +### Repo structure + + Repository Structure + +### YAML pipeline + +```YAML +name: 'prfx-conn-ae-network-hub-rg' + +pr: none + +trigger: + batch: true + branches: + include: + - main + paths: + include: + - root (b3b845c6-2a30-6f4c-62d3-a8b417cb9173)/prfx-connectivity-ae (3e51c849-d082-4b01-9385-455f253a5729)/prfx-conn-ae-network-hub-rg/* + +variables: + - template: /settings.yml + - template: pipeline.variables.yml + +resources: + repositories: + - repository: modules + name: $(modulesRepository) + ref: $(ref) + endpoint: segraef + type: github + +stages: + - stage: + displayName: Deploy + jobs: + - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml + parameters: + jobName: resourceGroups + displayName: 'Resource Group' + modulePath: '/modules/Microsoft.Resources/resourceGroups/deploy.bicep' + moduleTestFilePath: '$(resourceGroupName)/parameters.json' + checkoutRepositories: + - modules + - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml + parameters: + jobName: networkSecurityGroups + displayName: 'Network Security Groups' + modulePath: '/modules/Microsoft.Network/networkSecurityGroups/deploy.bicep' + moduleTestFilePath: '$(resourceGroupName)/networkSecurityGroups/parameters.json' + checkoutRepositories: + - modules + - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml + parameters: + jobName: routeTables + displayName: 'Route Tables' + modulePath: '/modules/Microsoft.Network/routeTables/deploy.bicep' + moduleTestFilePath: '$(resourceGroupName)/routeTables/parameters.json' + checkoutRepositories: + - modules + - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml + parameters: + jobName: virtualNetworks + displayName: 'Virtual Networks' + modulePath: '/modules/Microsoft.Network/virtualNetworks/deploy.bicep' + moduleTestFilePath: '$(resourceGroupName)/virtualNetworks/parameters.json' + checkoutRepositories: + - modules + dependsOn: + - networkSecurityGroups + - routeTables +``` + +### Notes + +> 1. 'Azure/ResourceModules' repo has been checked out at the root location intentionally because GitHub Actions expect the underlying utility scripts and variables at a specific location. +> 1. 'contoso/MultiRepoTest' repo has been checked out in a nested folder, called "MultiRepoTestParentFolder", to distinguish it from the folders of the other repo in the agent, but can also be downloaded at the root location if desired. + +
diff --git a/docs/wiki/media/MultiRepoTestFolderStructure.png b/docs/wiki/media/SolutionCreation/MultiRepoTestFolderStructure.png similarity index 100% rename from docs/wiki/media/MultiRepoTestFolderStructure.png rename to docs/wiki/media/SolutionCreation/MultiRepoTestFolderStructure.png From b6ffa644ae5cce51b25a6c25683a45d95586257b Mon Sep 17 00:00:00 2001 From: Sebastian Graef Date: Fri, 2 Sep 2022 14:39:32 +1000 Subject: [PATCH 2/3] added other approaches --- docs/wiki/Solution creation.md | 331 ++++++++++++++++-- .../ADOSolutionTestFolderStructure.png | Bin 0 -> 153225 bytes 2 files changed, 303 insertions(+), 28 deletions(-) create mode 100644 docs/wiki/media/SolutionCreation/ADOSolutionTestFolderStructure.png diff --git a/docs/wiki/Solution creation.md b/docs/wiki/Solution creation.md index b0adef4a5b..479c3a8130 100644 --- a/docs/wiki/Solution creation.md +++ b/docs/wiki/Solution creation.md @@ -15,16 +15,25 @@ This section shows you how you can orchestrate a deployment using multiple resou - [How to start](#how-to-start) - [Examples](#examples) - [Pipeline-orchestration](#pipeline-orchestration) - - [GitHub sample](#github-sample) - - [Summary](#summary) + - [GitHub Sample](#github-sample) + - [Multi-repository approach](#multi-repository-approach) - [Repo structure](#repo-structure) - [YAML pipeline](#yaml-pipeline) - [Notes](#notes) - - [Azure DevOps sample](#azure-devops-sample) - - [Summary](#summary-1) - - [Repo structure](#repo-structure-1) - - [YAML pipeline](#yaml-pipeline-1) - - [Notes](#notes-1) + - [Azure DevOps Sample](#azure-devops-sample) + - [Repository structure](#repository-structure) + - [Multi-repository approach](#multi-repository-approach-1) + - [YAML pipeline](#yaml-pipeline-1) + - [Notes](#notes-1) + - [Artifacts approach](#artifacts-approach) + - [YAML pipeline](#yaml-pipeline-2) + - [Notes](#notes-2) + - [Bicep Registry approach](#bicep-registry-approach) + - [YAML pipeline](#yaml-pipeline-3) + - [Notes](#notes-3) + - [Template Spec approach](#template-spec-approach) + - [YAML pipeline](#yaml-pipeline-4) + - [Notes](#notes-4) --- @@ -376,12 +385,12 @@ The example assumes you are using a [`bicepconfig.json`](https://docs.microsoft. The modules provided in this repo can be orchestrated to create more complex infrastructures, and as such, reusable solutions or products. To deploy resources, the pipeline-orchestration approach leverages the modules & pipeline templates of the 'ResourceModules' repository. Each pipeline job deploys one instance of a resource and the order of resources deployed in a multi-module solution is controlled by specifying dependencies in the pipeline itself. -## GitHub sample +## GitHub Sample
-GitHub Sample solution for multi-repository approach +Multi-repository approach -### Summary +### Multi-repository approach 1. Below, you can find an example which makes use of multiple repositories to orchestrate the deployment (also known as a _multi-repository_ approach) in GitHub. 1. It fetches the _public_ **Azure/ResourceModules** repo for consuming bicep modules and uses the parameter files present in the _private_ **Contoso/MultiRepoTest** repo for deploying infrastructure. @@ -480,29 +489,119 @@ jobs:
-## Azure DevOps sample +## Azure DevOps Sample + +Below, you can find samples which can be used to orchestrate deployments in Azure DevOps. Unlike the above mentioned GitHub sample it's using a modified and standalone version of `pipeline.deploy.yml` which can be found with working examples [here](https://github.com/segraef/Platform/blob/main/.azuredevops/pipelineTemplates/jobs.solution.deploy.yml) (`/.azuredevops/pipelineTemplates/jobs.solution.deploy.yml`) which is capable of consuming Modules via any publishing option you prefer. + +> Note: The following samples show Azure Pipelines stored in GitHub and use a GitHub service connection endpoint and hence get triggered externally. This is out of pure convenience and can also be stored on Azure Repos directly and be triggered in the same way. + +### Repository structure + + Repository Structure + +> Note: This repository structure mimics a Platform deployment aligned to a resource group structure like in [AzOps](https://github.com/Azure/AzOps#output). For the following samples the resource group `prfx-conn-ae-network-hub-rg` is used.
-Azure DevOps sample solution for multi-repository approach +Multi-repository approach -### Summary +### Multi-repository approach -1. Below, you can find an example which makes use of multiple repositories to orchestrate the deployment (also known as a _multi-repository_ approach) in Azure DevOps. -2. It fetches the _public_ **Azure/ResourceModules** repo for consuming modules and uses the parameter files present in the _private_ **Litware/Platform** repo for deploying infrastructure. -3. This example is creating a Resource group, an NSG and a VNet - +1. Fetching the _public_ **Azure/ResourceModules** repository for consuming Modules and using the parameter files present in the _private_ **Litware/Platform** repo for deploying infrastructure. +2. This sample is creating a Resource Group, an NSG, a Route Table and a Virtual Network - 1. Job: **Deploy multi-repo solution** - 1. Checkout 'Azure/ResourceModules' repo in a nested folder "ResourceModules" at root of the agent - 2. Set environment variables for the agent - 3. Checkout 'Litware/Platform' repo containing the parameter files in a nested folder - "Platform" - 4. Deploy resource group in target Azure subscription - 5. Deploy network security group - 6. Deploy virtual network A + 1. Checkout 'Azure/ResourceModules' repo in a nested folder `ResourceModules` + 2. Checkout 'Litware/Platform' repository containing the parameter files in a nested folder - `Platform` + 3. Deploy resources in target Azure subscription -### Repo structure +#### YAML pipeline - Repository Structure +```YAML +name: 'prfx-conn-ae-network-hub-rg' -### YAML pipeline +pr: none + +trigger: + batch: true + branches: + include: + - main + paths: + include: + - root (b3b845c6-2a30-6f4c-62d3-a8b417cb9173)/prfx-connectivity-ae (3e51c849-d082-4b01-9385-455f253a5729)/prfx-conn-ae-network-hub-rg/* + +variables: + - template: /settings.yml + - template: pipeline.variables.yml + +resources: + repositories: + - repository: modules + name: $(modulesRepository) + ref: $(ref) + endpoint: segraef + type: github + +stages: + - stage: + displayName: Deploy + jobs: + - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml + parameters: + jobName: resourceGroups + displayName: 'Resource Group' + modulePath: '/modules/Microsoft.Resources/resourceGroups/deploy.bicep' + moduleTestFilePath: '$(resourceGroupName)/parameters.json' + checkoutRepositories: + - modules + - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml + parameters: + jobName: networkSecurityGroups + displayName: 'Network Security Groups' + modulePath: '/modules/Microsoft.Network/networkSecurityGroups/deploy.bicep' + moduleTestFilePath: '$(resourceGroupName)/networkSecurityGroups/parameters.json' + checkoutRepositories: + - modules + - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml + parameters: + jobName: routeTables + displayName: 'Route Tables' + modulePath: '/modules/Microsoft.Network/routeTables/deploy.bicep' + moduleTestFilePath: '$(resourceGroupName)/routeTables/parameters.json' + checkoutRepositories: + - modules + - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml + parameters: + jobName: virtualNetworks + displayName: 'Virtual Networks' + modulePath: '/modules/Microsoft.Network/virtualNetworks/deploy.bicep' + moduleTestFilePath: '$(resourceGroupName)/virtualNetworks/parameters.json' + checkoutRepositories: + - modules + dependsOn: + - networkSecurityGroups + - routeTables +``` + +#### Notes + +> 1. `Azure/ResourceModules` repo has been checked out in a nested folder called `ResourceModules` (unlike in the above mentioned GitHub sample workflow and due to restrictions in order to support all publishing options in ADO.) +> 1. `Litware/Platform` repo has been checked out in a nested folder, called `Platform`, to distinguish it from the folders of the other repo in the agent, and in order to support multiple repositories. + +
+ +
+Artifacts approach + +### Artifacts approach + +1. Fetching the _public_ **Azure/ResourceModules** repository for consuming Modules and using the parameter files present in the _private_ **Litware/Platform** repo for deploying infrastructure. +2. This sample is creating a Resource Group, an NSG, a Route Table and a Virtual Network - + 1. Job: **Deploy multi-repo solution** + 1. Checkout 'Azure/ResourceModules' repo in a nested folder `ResourceModules` + 2. Checkout 'Litware/Platform' repository containing the parameter files in a nested folder - `Platform` + 3. Deploy resources in target Azure subscription + +#### YAML pipeline ```YAML name: 'prfx-conn-ae-network-hub-rg' @@ -571,9 +670,185 @@ stages: - routeTables ``` -### Notes +#### Notes -> 1. 'Azure/ResourceModules' repo has been checked out at the root location intentionally because GitHub Actions expect the underlying utility scripts and variables at a specific location. -> 1. 'contoso/MultiRepoTest' repo has been checked out in a nested folder, called "MultiRepoTestParentFolder", to distinguish it from the folders of the other repo in the agent, but can also be downloaded at the root location if desired. +> 1. `Azure/ResourceModules` repo has been checked out in a nested folder called `ResourceModules` (unlike in the above mentioned GitHub sample workflow and due to restrictions in order to support all publishing options in ADO.) +> 1. `Litware/Platform` repo has been checked out in a nested folder, called `Platform`, to distinguish it from the folders of the other repo in the agent, and in order to support multiple repositories. + +
+ +
+Bicep Registry approach + +### Bicep Registry approach + +1. Fetching the _public_ **Azure/ResourceModules** repository for consuming Modules and using the parameter files present in the _private_ **Litware/Platform** repo for deploying infrastructure. +2. This sample is creating a Resource Group, an NSG, a Route Table and a Virtual Network - + 1. Job: **Deploy multi-repo solution** + 1. Checkout 'Azure/ResourceModules' repo in a nested folder `ResourceModules` + 2. Checkout 'Litware/Platform' repository containing the parameter files in a nested folder - `Platform` + 3. Deploy resources in target Azure subscription + +#### YAML pipeline + +```YAML +name: 'prfx-conn-ae-network-hub-rg' + +pr: none + +trigger: + batch: true + branches: + include: + - main + paths: + include: + - root (b3b845c6-2a30-6f4c-62d3-a8b417cb9173)/prfx-connectivity-ae (3e51c849-d082-4b01-9385-455f253a5729)/prfx-conn-ae-network-hub-rg/* + +variables: + - template: /settings.yml + - template: pipeline.variables.yml + +resources: + repositories: + - repository: modules + name: $(modulesRepository) + ref: $(ref) + endpoint: segraef + type: github + +stages: + - stage: + displayName: Deploy + jobs: + - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml + parameters: + jobName: resourceGroups + displayName: 'Resource Group' + modulePath: '/modules/Microsoft.Resources/resourceGroups/deploy.bicep' + moduleTestFilePath: '$(resourceGroupName)/parameters.json' + checkoutRepositories: + - modules + - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml + parameters: + jobName: networkSecurityGroups + displayName: 'Network Security Groups' + modulePath: '/modules/Microsoft.Network/networkSecurityGroups/deploy.bicep' + moduleTestFilePath: '$(resourceGroupName)/networkSecurityGroups/parameters.json' + checkoutRepositories: + - modules + - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml + parameters: + jobName: routeTables + displayName: 'Route Tables' + modulePath: '/modules/Microsoft.Network/routeTables/deploy.bicep' + moduleTestFilePath: '$(resourceGroupName)/routeTables/parameters.json' + checkoutRepositories: + - modules + - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml + parameters: + jobName: virtualNetworks + displayName: 'Virtual Networks' + modulePath: '/modules/Microsoft.Network/virtualNetworks/deploy.bicep' + moduleTestFilePath: '$(resourceGroupName)/virtualNetworks/parameters.json' + checkoutRepositories: + - modules + dependsOn: + - networkSecurityGroups + - routeTables +``` + +#### Notes + +> 1. `Azure/ResourceModules` repo has been checked out in a nested folder called `ResourceModules` (unlike in the above mentioned GitHub sample workflow and due to restrictions in order to support all publishing options in ADO.) +> 1. `Litware/Platform` repo has been checked out in a nested folder, called `Platform`, to distinguish it from the folders of the other repo in the agent, and in order to support multiple repositories. + +
+ +
+Template Spec approach + +### Template Spec approach + +1. Fetching the _public_ **Azure/ResourceModules** repository for consuming Modules and using the parameter files present in the _private_ **Litware/Platform** repo for deploying infrastructure. +2. This sample is creating a Resource Group, an NSG, a Route Table and a Virtual Network - + 1. Job: **Deploy multi-repo solution** + 1. Checkout 'Azure/ResourceModules' repo in a nested folder `ResourceModules` + 2. Checkout 'Litware/Platform' repository containing the parameter files in a nested folder - `Platform` + 3. Deploy resources in target Azure subscription + +#### YAML pipeline + +```YAML +name: 'prfx-conn-ae-network-hub-rg' + +pr: none + +trigger: + batch: true + branches: + include: + - main + paths: + include: + - root (b3b845c6-2a30-6f4c-62d3-a8b417cb9173)/prfx-connectivity-ae (3e51c849-d082-4b01-9385-455f253a5729)/prfx-conn-ae-network-hub-rg/* + +variables: + - template: /settings.yml + - template: pipeline.variables.yml + +resources: + repositories: + - repository: modules + name: $(modulesRepository) + ref: $(ref) + endpoint: segraef + type: github + +stages: + - stage: + displayName: Deploy + jobs: + - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml + parameters: + jobName: resourceGroups + displayName: 'Resource Group' + modulePath: '/modules/Microsoft.Resources/resourceGroups/deploy.bicep' + moduleTestFilePath: '$(resourceGroupName)/parameters.json' + checkoutRepositories: + - modules + - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml + parameters: + jobName: networkSecurityGroups + displayName: 'Network Security Groups' + modulePath: '/modules/Microsoft.Network/networkSecurityGroups/deploy.bicep' + moduleTestFilePath: '$(resourceGroupName)/networkSecurityGroups/parameters.json' + checkoutRepositories: + - modules + - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml + parameters: + jobName: routeTables + displayName: 'Route Tables' + modulePath: '/modules/Microsoft.Network/routeTables/deploy.bicep' + moduleTestFilePath: '$(resourceGroupName)/routeTables/parameters.json' + checkoutRepositories: + - modules + - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml + parameters: + jobName: virtualNetworks + displayName: 'Virtual Networks' + modulePath: '/modules/Microsoft.Network/virtualNetworks/deploy.bicep' + moduleTestFilePath: '$(resourceGroupName)/virtualNetworks/parameters.json' + checkoutRepositories: + - modules + dependsOn: + - networkSecurityGroups + - routeTables +``` + +#### Notes + +> 1. `Azure/ResourceModules` repo has been checked out in a nested folder called `ResourceModules` (unlike in the above mentioned GitHub sample workflow and due to restrictions in order to support all publishing options in ADO.) +> 1. `Litware/Platform` repo has been checked out in a nested folder, called `Platform`, to distinguish it from the folders of the other repo in the agent, and in order to support multiple repositories.
diff --git a/docs/wiki/media/SolutionCreation/ADOSolutionTestFolderStructure.png b/docs/wiki/media/SolutionCreation/ADOSolutionTestFolderStructure.png new file mode 100644 index 0000000000000000000000000000000000000000..0b3d7a3c58451ac6e82fcf9f9ecdeb969ef3f100 GIT binary patch literal 153225 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
Referencing local files +### Local files + The following example shows how you could orchestrate a deployment of multiple resources using local module references. In this example, we will deploy a resource group with a Network Security Group (NSG), and use them in a subsequent VNET deployment. ```bicep @@ -205,9 +201,11 @@ module vnet 'modules/Microsoft.Network/virtualNetworks/deploy.bicep' = {
-Referencing a Private Bicep Registry +Referencing a Bicep Registry + +### Bicep Registry -The following example shows how you could orchestrate a deployment of multiple resources using modules from a private Bicep Registry. In this example, we will deploy a resource group with a Network Security Group (NSG), and use them in a subsequent VNET deployment. +The following sample shows how you could orchestrate a deployment of multiple resources using modules from a private Bicep Registry. In this example, we will deploy a resource group with a Network Security Group (NSG), and use them in a subsequent VNET deployment. > **Note**: the preferred method to publish modules to the Bicep registry is to leverage the [CI environment](./The%20CI%20environment) provided in this repository. However, this option may not be applicable to all scenarios (ref e.g., the [Consume library](./Getting%20started%20-%20Scenario%201%20Consume%20library) section). As an alternative, the same [`Publish-ModuleToPrivateBicepRegistry.ps1`](https://github.com/Azure/ResourceModules/blob/main/utilities/pipelines/resourcePublish/Publish-ModuleToPrivateBicepRegistry.ps1) script leveraged by the publishing step of the CI environment pipeline can also be run locally. @@ -295,6 +293,8 @@ The example assumes you are using a [`bicepconfig.json`](https://docs.microsoft.
Referencing Template-Specs +### Template Specs + The following example shows how you could orchestrate a deployment of multiple resources using template specs. In this example, we will deploy a resource group with a Network Security Group (NSG), and use them in a subsequent VNET deployment. > **Note**: the preferred method to publish modules to template-specs is to leverage the [CI environment](./The%20CI%20environment) provided in this repository. However, this option may not be applicable to all scenarios (ref e.g., the [Consume library](./Getting%20started%20-%20Scenario%201%20Consume%20library) section). As an alternative, the same [Publish-ModuleToTemplateSpec.ps1](https://github.com/Azure/ResourceModules/blob/main/utilities/pipelines/resourcePublish/Publish-ModuleToTemplateSpec.ps1) script leveraged by the publishing step of the CI environment pipeline can also be run locally. @@ -381,142 +381,45 @@ The example assumes you are using a [`bicepconfig.json`](https://docs.microsoft.

-# Pipeline-orchestration +## Azure DevOps Samples -The modules provided in this repo can be orchestrated to create more complex infrastructures, and as such, reusable solutions or products. To deploy resources, the pipeline-orchestration approach leverages the modules & pipeline templates of the 'ResourceModules' repository. Each pipeline job deploys one instance of a resource and the order of resources deployed in a multi-module solution is controlled by specifying dependencies in the pipeline itself. +Below, you can find samples which can be used to orchestrate deployments in Azure DevOps. Unlike the above mentioned GitHub sample all samples are using a modified and standalone version of `pipeline.deploy.yml` which can be found with working examples [here](https://github.com/segraef/Platform/blob/main/.azuredevops/pipelineTemplates/jobs.solution.deploy.yml) (`/.azuredevops/pipelineTemplates/jobs.solution.deploy.yml`) which is capable of consuming Modules via any publishing option you prefer. -## GitHub Sample +> Note: The following samples show Azure Pipelines stored in GitHub and use a GitHub service connection endpoint and hence get triggered externally. This is out of pure convenience and can also be stored on Azure Repos directly and be triggered in the same way.

-Multi-repository approach - -### Multi-repository approach - -1. Below, you can find an example which makes use of multiple repositories to orchestrate the deployment (also known as a _multi-repository_ approach) in GitHub. -1. It fetches the _public_ **Azure/ResourceModules** repo for consuming bicep modules and uses the parameter files present in the _private_ **Contoso/MultiRepoTest** repo for deploying infrastructure. -1. This example is creating a Resource group, an NSG and a VNet - - 1. Job: **Deploy multi-repo solution** - 1. Checkout 'Azure/ResourceModules' repo at root of the agent - 1. Set environment variables for the agent - 1. Checkout 'contoso/MultiRepoTest' repo containing the parameter files in a nested folder - "MultiRepoTestParentFolder" - 1. Deploy resource group in target Azure subscription - 1. Deploy network security group - 1. Deploy virtual network A - -### Repo structure - - Repository Structure - -### YAML pipeline - -```YAML -name: 'Multi-Repo solution deployment' - -on: - push: - branches: - - main - paths: - - 'network-hub-rg/Parameters/**' - - '.github/workflows/network-hub.yml' - -env: - AZURE_CREDENTIALS: ${{ secrets.AZURE_CREDENTIALS }} - removeDeployment: false - variablesPath: 'settings.yml' - -jobs: - job_deploy_multi_repo_solution: - runs-on: ubuntu-20.04 - name: 'Deploy multi-repo solution' - steps: - - name: 'Checkout ResourceModules repo at the root location' - uses: actions/checkout@v2 - with: - repository: 'Azure/ResourceModules' - fetch-depth: 0 +Reference Samples - - name: Set environment variables - uses: ./.github/actions/templates/setEnvironmentVariables - with: - variablesPath: ${{ env.variablesPath }} - - - name: 'Checkout MultiRepoTest repo in a nested MultiRepoTestParentFolder' - uses: actions/checkout@v2 - with: - repository: 'contoso/MultiRepoTest' - fetch-depth: 0 - path: 'MultiRepoTestParentFolder' - - - name: 'Deploy resource group' - uses: ./.github/actions/templates/validateModuleDeployment - with: - templateFilePath: './modules/Microsoft.Resources/resourceGroups/deploy.bicep' - parameterFilePath: './MultiRepoTestParentFolder/network-hub-rg/Parameters/ResourceGroup/parameters.json' - location: '${{ env.defaultLocation }}' - resourceGroupName: '${{ env.resourceGroupName }}' - subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}' - managementGroupId: '${{ secrets.ARM_MGMTGROUP_ID }}' - removeDeployment: $(removeDeployment) - - - name: 'Deploy network security group' - uses: ./.github/actions/templates/validateModuleDeployment - with: - templateFilePath: './modules/Microsoft.Network/networkSecurityGroups/deploy.bicep' - parameterFilePath: './MultiRepoTestParentFolder/network-hub-rg/Parameters/NetworkSecurityGroups/parameters.json' - location: '${{ env.defaultLocation }}' - resourceGroupName: '${{ env.resourceGroupName }}' - subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}' - managementGroupId: '${{ secrets.ARM_MGMTGROUP_ID }}' - removeDeployment: $(removeDeployment) - - - name: 'Deploy virtual network A' - uses: ./.github/actions/templates/validateModuleDeployment - with: - templateFilePath: './modules/Microsoft.Network/virtualNetworks/deploy.bicep' - parameterFilePath: './MultiRepoTestParentFolder/network-hub-rg/Parameters/VirtualNetwork/vnet-A.parameters.json' - location: '${{ env.defaultLocation }}' - resourceGroupName: '${{ env.resourceGroupName }}' - subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}' - managementGroupId: '${{ secrets.ARM_MGMTGROUP_ID }}' - removeDeployment: $(removeDeployment) -``` - -### Notes - -> 1. 'Azure/ResourceModules' repo has been checked out at the root location intentionally because GitHub Actions expect the underlying utility scripts and variables at a specific location. -> 1. 'contoso/MultiRepoTest' repo has been checked out in a nested folder, called "MultiRepoTestParentFolder", to distinguish it from the folders of the other repo in the agent, but can also be downloaded at the root location if desired. +All DevOps samples can be found here as a reference: [Litware/Platform](https://github.com/segraef/Platform/).
-## Azure DevOps Sample - -Below, you can find samples which can be used to orchestrate deployments in Azure DevOps. Unlike the above mentioned GitHub sample it's using a modified and standalone version of `pipeline.deploy.yml` which can be found with working examples [here](https://github.com/segraef/Platform/blob/main/.azuredevops/pipelineTemplates/jobs.solution.deploy.yml) (`/.azuredevops/pipelineTemplates/jobs.solution.deploy.yml`) which is capable of consuming Modules via any publishing option you prefer. - -> Note: The following samples show Azure Pipelines stored in GitHub and use a GitHub service connection endpoint and hence get triggered externally. This is out of pure convenience and can also be stored on Azure Repos directly and be triggered in the same way. - -### Repository structure +
+Repository structure Repository Structure > Note: This repository structure mimics a Platform deployment aligned to a resource group structure like in [AzOps](https://github.com/Azure/AzOps#output). For the following samples the resource group `prfx-conn-ae-network-hub-rg` is used. -
-Multi-repository approach +
-### Multi-repository approach +
+Referencing Azure Artifacts -1. Fetching the _public_ **Azure/ResourceModules** repository for consuming Modules and using the parameter files present in the _private_ **Litware/Platform** repo for deploying infrastructure. -2. This sample is creating a Resource Group, an NSG, a Route Table and a Virtual Network - - 1. Job: **Deploy multi-repo solution** - 1. Checkout 'Azure/ResourceModules' repo in a nested folder `ResourceModules` - 2. Checkout 'Litware/Platform' repository containing the parameter files in a nested folder - `Platform` - 3. Deploy resources in target Azure subscription +### Azure Artifacts -#### YAML pipeline +1. The _public_ **Azure/ResourceModules** repository is being fetched and could potentially be used to leverage utilities but is not necessary since only Azure Artifacts and parameter files from this local repository are used. +2. This sample is creating a Resource Group, an NSG, a Route Table and a Virtual Network. + 1. Job: **WhatIf** + 1. Verify deployment. + 2. Job: **Deploy multi-repo solution** + 1. Checkout 'Azure/ResourceModules' repo in a nested folder `ResourceModules` + 2. Checkout 'Litware/Platform' repository containing the parameter files in a nested folder - `Platform` + 3. Download specific Modules Artifacts. + 4. Deploy resources in target Azure subscription using downloaded Artifacts. ```YAML -name: 'prfx-conn-ae-network-hub-rg' +name: 'prfx-conn-ae-network-hub-rg (Artifacts)' pr: none @@ -532,79 +435,50 @@ trigger: variables: - template: /settings.yml - template: pipeline.variables.yml - -resources: - repositories: - - repository: modules - name: $(modulesRepository) - ref: $(ref) - endpoint: segraef - type: github + - template: /.azuredevops/pipelineTemplates/jobs.artifacts.variables.yml stages: - stage: - displayName: Deploy + displayName: WhatIf jobs: - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml parameters: - jobName: resourceGroups - displayName: 'Resource Group' - modulePath: '/modules/Microsoft.Resources/resourceGroups/deploy.bicep' + jobName: bicep + displayName: 'Bicep Deployment' + moduleName: $(RGModuleName) moduleTestFilePath: '$(resourceGroupName)/parameters.json' - checkoutRepositories: - - modules - - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml - parameters: - jobName: networkSecurityGroups - displayName: 'Network Security Groups' - modulePath: '/modules/Microsoft.Network/networkSecurityGroups/deploy.bicep' - moduleTestFilePath: '$(resourceGroupName)/networkSecurityGroups/parameters.json' - checkoutRepositories: - - modules - - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml - parameters: - jobName: routeTables - displayName: 'Route Tables' - modulePath: '/modules/Microsoft.Network/routeTables/deploy.bicep' - moduleTestFilePath: '$(resourceGroupName)/routeTables/parameters.json' - checkoutRepositories: - - modules + whatif: true + + - stage: + displayName: Deploy + jobs: - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml parameters: - jobName: virtualNetworks - displayName: 'Virtual Networks' - modulePath: '/modules/Microsoft.Network/virtualNetworks/deploy.bicep' - moduleTestFilePath: '$(resourceGroupName)/virtualNetworks/parameters.json' - checkoutRepositories: - - modules - dependsOn: - - networkSecurityGroups - - routeTables + jobName: bicep + displayName: 'Bicep Deployment' + moduleName: $(RGModuleName) + moduleTestFilePath: '$(resourceGroupName)/parameters.json' ``` -#### Notes - -> 1. `Azure/ResourceModules` repo has been checked out in a nested folder called `ResourceModules` (unlike in the above mentioned GitHub sample workflow and due to restrictions in order to support all publishing options in ADO.) -> 1. `Litware/Platform` repo has been checked out in a nested folder, called `Platform`, to distinguish it from the folders of the other repo in the agent, and in order to support multiple repositories. -
-Artifacts approach +Referencing a Bicep Registry -### Artifacts approach +### Bicep Registry -1. Fetching the _public_ **Azure/ResourceModules** repository for consuming Modules and using the parameter files present in the _private_ **Litware/Platform** repo for deploying infrastructure. -2. This sample is creating a Resource Group, an NSG, a Route Table and a Virtual Network - - 1. Job: **Deploy multi-repo solution** - 1. Checkout 'Azure/ResourceModules' repo in a nested folder `ResourceModules` - 2. Checkout 'Litware/Platform' repository containing the parameter files in a nested folder - `Platform` - 3. Deploy resources in target Azure subscription +1. The _public_ **Azure/ResourceModules** repository is being fetched and could potentially be used to leverage utilities but is not necessary since only Bicep Modules from the remote Bicep registry and parameter files from this local repository are used. +2. This sample is creating a Resource Group, an NSG, a Route Table and a Virtual Network. + 1. Job: **WhatIf** + 1. Verify deployment. + 2. Job: **Deploy multi-repo solution** + 1. Checkout 'Azure/ResourceModules' repo in a nested folder `ResourceModules` + 2. Checkout 'Litware/Platform' repository containing the parameter files in a nested folder - `Platform` + 3. Deploy resources in target Azure subscription using remote Bicep Registry Modules. -#### YAML pipeline ```YAML -name: 'prfx-conn-ae-network-hub-rg' +name: 'prfx-conn-ae-network-hub-rg (Bicep Registry)' pr: none @@ -620,79 +494,50 @@ trigger: variables: - template: /settings.yml - template: pipeline.variables.yml - -resources: - repositories: - - repository: modules - name: $(modulesRepository) - ref: $(ref) - endpoint: segraef - type: github + - template: /.azuredevops/pipelineTemplates/jobs.artifacts.variables.yml stages: - stage: - displayName: Deploy + displayName: WhatIf jobs: - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml parameters: - jobName: resourceGroups - displayName: 'Resource Group' - modulePath: '/modules/Microsoft.Resources/resourceGroups/deploy.bicep' + jobName: bicep + displayName: 'Bicep Deployment' + modulePath: '$(resourceGroupName)/deploy.br.bicep' moduleTestFilePath: '$(resourceGroupName)/parameters.json' - checkoutRepositories: - - modules - - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml - parameters: - jobName: networkSecurityGroups - displayName: 'Network Security Groups' - modulePath: '/modules/Microsoft.Network/networkSecurityGroups/deploy.bicep' - moduleTestFilePath: '$(resourceGroupName)/networkSecurityGroups/parameters.json' - checkoutRepositories: - - modules - - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml - parameters: - jobName: routeTables - displayName: 'Route Tables' - modulePath: '/modules/Microsoft.Network/routeTables/deploy.bicep' - moduleTestFilePath: '$(resourceGroupName)/routeTables/parameters.json' - checkoutRepositories: - - modules + whatif: true + + - stage: + displayName: Deploy + jobs: - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml parameters: - jobName: virtualNetworks - displayName: 'Virtual Networks' - modulePath: '/modules/Microsoft.Network/virtualNetworks/deploy.bicep' - moduleTestFilePath: '$(resourceGroupName)/virtualNetworks/parameters.json' - checkoutRepositories: - - modules - dependsOn: - - networkSecurityGroups - - routeTables + jobName: bicep + displayName: 'Bicep Deployment' + modulePath: '$(resourceGroupName)/deploy.br.bicep' + moduleTestFilePath: '$(resourceGroupName)/parameters.json' ``` -#### Notes - -> 1. `Azure/ResourceModules` repo has been checked out in a nested folder called `ResourceModules` (unlike in the above mentioned GitHub sample workflow and due to restrictions in order to support all publishing options in ADO.) -> 1. `Litware/Platform` repo has been checked out in a nested folder, called `Platform`, to distinguish it from the folders of the other repo in the agent, and in order to support multiple repositories. -
-Bicep Registry approach +Referencing Template Specs -### Bicep Registry approach +### Template Specs -1. Fetching the _public_ **Azure/ResourceModules** repository for consuming Modules and using the parameter files present in the _private_ **Litware/Platform** repo for deploying infrastructure. -2. This sample is creating a Resource Group, an NSG, a Route Table and a Virtual Network - - 1. Job: **Deploy multi-repo solution** - 1. Checkout 'Azure/ResourceModules' repo in a nested folder `ResourceModules` - 2. Checkout 'Litware/Platform' repository containing the parameter files in a nested folder - `Platform` - 3. Deploy resources in target Azure subscription +1. The _public_ **Azure/ResourceModules** repository is being fetched and could potentially be used to leverage utilities but is not necessary since only Template Specs and parameter files from this local repository are used. +2. This sample is creating a Resource Group, an NSG, a Route Table and a Virtual Network. + 1. Job: **WhatIf** + 1. Verify deployment. + 2. Job: **Deploy multi-repo solution** + 1. Checkout 'Azure/ResourceModules' repo in a nested folder `ResourceModules` + 2. Checkout 'Litware/Platform' repository containing the parameter files in a nested folder - `Platform` + 3. Deploy resources in target Azure subscription using Template Specs. -#### YAML pipeline ```YAML -name: 'prfx-conn-ae-network-hub-rg' +name: 'prfx-conn-ae-network-hub-rg (Template Spec)' pr: none @@ -709,66 +554,144 @@ variables: - template: /settings.yml - template: pipeline.variables.yml -resources: - repositories: - - repository: modules - name: $(modulesRepository) - ref: $(ref) - endpoint: segraef - type: github - stages: - stage: - displayName: Deploy + displayName: WhatIf jobs: - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml parameters: - jobName: resourceGroups - displayName: 'Resource Group' - modulePath: '/modules/Microsoft.Resources/resourceGroups/deploy.bicep' + jobName: bicep + displayName: 'Bicep Deployment' + modulePath: '$(resourceGroupName)/deploy.ts.bicep' moduleTestFilePath: '$(resourceGroupName)/parameters.json' - checkoutRepositories: - - modules - - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml - parameters: - jobName: networkSecurityGroups - displayName: 'Network Security Groups' - modulePath: '/modules/Microsoft.Network/networkSecurityGroups/deploy.bicep' - moduleTestFilePath: '$(resourceGroupName)/networkSecurityGroups/parameters.json' - checkoutRepositories: - - modules - - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml - parameters: - jobName: routeTables - displayName: 'Route Tables' - modulePath: '/modules/Microsoft.Network/routeTables/deploy.bicep' - moduleTestFilePath: '$(resourceGroupName)/routeTables/parameters.json' - checkoutRepositories: - - modules + whatif: true + + - stage: + displayName: Deploy + jobs: - template: /.azuredevops/pipelineTemplates/jobs.solution.deploy.yml parameters: - jobName: virtualNetworks - displayName: 'Virtual Networks' - modulePath: '/modules/Microsoft.Network/virtualNetworks/deploy.bicep' - moduleTestFilePath: '$(resourceGroupName)/virtualNetworks/parameters.json' - checkoutRepositories: - - modules - dependsOn: - - networkSecurityGroups - - routeTables + jobName: bicep + displayName: 'Bicep Deployment' + modulePath: '$(resourceGroupName)/deploy.ts.bicep' + moduleTestFilePath: '$(resourceGroupName)/parameters.json' + ``` -#### Notes +
-> 1. `Azure/ResourceModules` repo has been checked out in a nested folder called `ResourceModules` (unlike in the above mentioned GitHub sample workflow and due to restrictions in order to support all publishing options in ADO.) -> 1. `Litware/Platform` repo has been checked out in a nested folder, called `Platform`, to distinguish it from the folders of the other repo in the agent, and in order to support multiple repositories. + +# Pipeline-orchestration + +The modules provided in this repo can be orchestrated to create more complex infrastructures, and as such, reusable solutions or products. To deploy resources, the pipeline-orchestration approach leverages the modules & pipeline templates of the 'ResourceModules' repository. Each pipeline job deploys one instance of a resource and the order of resources deployed in a multi-module solution is controlled by specifying dependencies in the pipeline itself. + +## GitHub Sample + +
+Multi-repository approach + +### Multi-repository + +1. Below, you can find an example which makes use of multiple repositories to orchestrate the deployment (also known as a _multi-repository_ approach) in GitHub. +1. It fetches the _public_ **Azure/ResourceModules** repo for consuming bicep modules and uses the parameter files present in the _private_ **Contoso/MultiRepoTest** repo for deploying infrastructure. +1. This example is creating a Resource group, an NSG and a VNet - + 1. Job: **Deploy multi-repo solution** + 1. Checkout 'Azure/ResourceModules' repo at root of the agent + 1. Set environment variables for the agent + 1. Checkout 'contoso/MultiRepoTest' repo containing the parameter files in a nested folder - "MultiRepoTestParentFolder" + 1. Deploy resource group in target Azure subscription + 1. Deploy network security group + 1. Deploy virtual network A + +### Repository structure + + Repository Structure + + +```YAML +name: 'Multi-Repo solution deployment' + +on: + push: + branches: + - main + paths: + - 'network-hub-rg/Parameters/**' + - '.github/workflows/network-hub.yml' + +env: + AZURE_CREDENTIALS: ${{ secrets.AZURE_CREDENTIALS }} + removeDeployment: false + variablesPath: 'settings.yml' + +jobs: + job_deploy_multi_repo_solution: + runs-on: ubuntu-20.04 + name: 'Deploy multi-repo solution' + steps: + - name: 'Checkout ResourceModules repo at the root location' + uses: actions/checkout@v2 + with: + repository: 'Azure/ResourceModules' + fetch-depth: 0 + + - name: Set environment variables + uses: ./.github/actions/templates/setEnvironmentVariables + with: + variablesPath: ${{ env.variablesPath }} + + - name: 'Checkout MultiRepoTest repo in a nested MultiRepoTestParentFolder' + uses: actions/checkout@v2 + with: + repository: 'contoso/MultiRepoTest' + fetch-depth: 0 + path: 'MultiRepoTestParentFolder' + + - name: 'Deploy resource group' + uses: ./.github/actions/templates/validateModuleDeployment + with: + templateFilePath: './modules/Microsoft.Resources/resourceGroups/deploy.bicep' + parameterFilePath: './MultiRepoTestParentFolder/network-hub-rg/Parameters/ResourceGroup/parameters.json' + location: '${{ env.defaultLocation }}' + resourceGroupName: '${{ env.resourceGroupName }}' + subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}' + managementGroupId: '${{ secrets.ARM_MGMTGROUP_ID }}' + removeDeployment: $(removeDeployment) + + - name: 'Deploy network security group' + uses: ./.github/actions/templates/validateModuleDeployment + with: + templateFilePath: './modules/Microsoft.Network/networkSecurityGroups/deploy.bicep' + parameterFilePath: './MultiRepoTestParentFolder/network-hub-rg/Parameters/NetworkSecurityGroups/parameters.json' + location: '${{ env.defaultLocation }}' + resourceGroupName: '${{ env.resourceGroupName }}' + subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}' + managementGroupId: '${{ secrets.ARM_MGMTGROUP_ID }}' + removeDeployment: $(removeDeployment) + + - name: 'Deploy virtual network A' + uses: ./.github/actions/templates/validateModuleDeployment + with: + templateFilePath: './modules/Microsoft.Network/virtualNetworks/deploy.bicep' + parameterFilePath: './MultiRepoTestParentFolder/network-hub-rg/Parameters/VirtualNetwork/vnet-A.parameters.json' + location: '${{ env.defaultLocation }}' + resourceGroupName: '${{ env.resourceGroupName }}' + subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}' + managementGroupId: '${{ secrets.ARM_MGMTGROUP_ID }}' + removeDeployment: $(removeDeployment) +``` + +> 1. 'Azure/ResourceModules' repo has been checked out at the root location intentionally because GitHub Actions expect the underlying utility scripts and variables at a specific location. +> 1. 'contoso/MultiRepoTest' repo has been checked out in a nested folder, called "MultiRepoTestParentFolder", to distinguish it from the folders of the other repo in the agent, but can also be downloaded at the root location if desired.
+## Azure DevOps Sample +
-Template Spec approach +Multi-repository approach -### Template Spec approach +### Multi-repository 1. Fetching the _public_ **Azure/ResourceModules** repository for consuming Modules and using the parameter files present in the _private_ **Litware/Platform** repo for deploying infrastructure. 2. This sample is creating a Resource Group, an NSG, a Route Table and a Virtual Network - @@ -777,7 +700,11 @@ stages: 2. Checkout 'Litware/Platform' repository containing the parameter files in a nested folder - `Platform` 3. Deploy resources in target Azure subscription -#### YAML pipeline +### Repository structure + + Repository Structure + +> Note: This repository structure mimics a Platform deployment aligned to a resource group structure like in [AzOps](https://github.com/Azure/AzOps#output). For the following samples the resource group `prfx-conn-ae-network-hub-rg` is used. ```YAML name: 'prfx-conn-ae-network-hub-rg' @@ -846,8 +773,6 @@ stages: - routeTables ``` -#### Notes - > 1. `Azure/ResourceModules` repo has been checked out in a nested folder called `ResourceModules` (unlike in the above mentioned GitHub sample workflow and due to restrictions in order to support all publishing options in ADO.) > 1. `Litware/Platform` repo has been checked out in a nested folder, called `Platform`, to distinguish it from the folders of the other repo in the agent, and in order to support multiple repositories.

h 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 yC%O_3rp4dZUuM94|0^V3Idx%#ry9B>fNj Date: Mon, 5 Sep 2022 10:40:46 +1000 Subject: [PATCH 3/3] done --- docs/wiki/Solution creation.md | 517 ++++++++++++++------------------- 1 file changed, 221 insertions(+), 296 deletions(-) diff --git a/docs/wiki/Solution creation.md b/docs/wiki/Solution creation.md index 479c3a8130..efead91cd9 100644 --- a/docs/wiki/Solution creation.md +++ b/docs/wiki/Solution creation.md @@ -12,28 +12,22 @@ This section shows you how you can orchestrate a deployment using multiple resou - [Outline](#outline) - [Comparison](#comparison) - [Template-orchestration](#template-orchestration) - - [How to start](#how-to-start) - - [Examples](#examples) + - [To be considered](#to-be-considered) + - [GitHub Samples](#github-samples) + - [Local files](#local-files) + - [Bicep Registry](#bicep-registry) + - [Template Specs](#template-specs) + - [Azure DevOps Samples](#azure-devops-samples) + - [Azure Artifacts](#azure-artifacts) + - [Bicep Registry](#bicep-registry-1) + - [Template Specs](#template-specs-1) - [Pipeline-orchestration](#pipeline-orchestration) - [GitHub Sample](#github-sample) - - [Multi-repository approach](#multi-repository-approach) - - [Repo structure](#repo-structure) - - [YAML pipeline](#yaml-pipeline) - - [Notes](#notes) - - [Azure DevOps Sample](#azure-devops-sample) + - [Multi-repository](#multi-repository) - [Repository structure](#repository-structure) - - [Multi-repository approach](#multi-repository-approach-1) - - [YAML pipeline](#yaml-pipeline-1) - - [Notes](#notes-1) - - [Artifacts approach](#artifacts-approach) - - [YAML pipeline](#yaml-pipeline-2) - - [Notes](#notes-2) - - [Bicep Registry approach](#bicep-registry-approach) - - [YAML pipeline](#yaml-pipeline-3) - - [Notes](#notes-3) - - [Template Spec approach](#template-spec-approach) - - [YAML pipeline](#yaml-pipeline-4) - - [Notes](#notes-4) + - [Azure DevOps Sample](#azure-devops-sample) + - [Multi-repository](#multi-repository-1) + - [Repository structure](#repository-structure-1) --- @@ -118,7 +112,7 @@ With this approach, modules need to be stored in an available location, where th In an enterprise environment, the recommended approach is to store these _master templates_ in a private environment, only accessible by enterprise resources. Thus, only trusted authorities can have access to these files. -## How to start +## To be considered Once you start building a solution using this library, you may wonder how best to start. Following, you can find some points that can accelerate your experience: @@ -131,11 +125,13 @@ Once you start building a solution using this library, you may wonder how best t 1. Add the missing output to the module 1. Reference the deployed resource using the `existing` keyword (Note: You cannot reference the same resource as both a new deployment & `existing`. To make this work, you have to move the `existing` reference into it's own `.bicep` file). -## Examples +## GitHub Samples