From c879d3458492b784ae5ff76b6e8a1ab63f2f5b9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Geuze?= Date: Thu, 1 Mar 2018 13:50:05 +0100 Subject: [PATCH 001/168] restructure the main readme and getting started --- README.md | 63 +--------------- getting-started/README.md | 150 +++++++++++++++++++++++--------------- 2 files changed, 93 insertions(+), 120 deletions(-) diff --git a/README.md b/README.md index b833886..97fe77a 100644 --- a/README.md +++ b/README.md @@ -1,64 +1,7 @@ # Avanade DevOps HOL -These are the hands on labs associated with the Avanade DevOps Practitioners course. This is based to a large part on the [PartsUnlimitedHOL](https://microsoft.github.io/PartsUnlimited/basic/GettingStarted.html) but simplified to use the Visual Studio MVC sample application. - -You can accomplish these labs using Visual Studio 2017 on your local computer, but you may want to consider doing the labs using an Azure VM as the development machine. This not only keeps you from having to make changes to your local environment, but it gives you additional experience using Azure. You can either configure an Azure development environment on your own or an easy way to do this is to use PowerShell ISE and execute the following commands. This will create a new Azure resource group and then configure an Azure VM with Windows 10 and Visual Studio 2017 Community edition. It will also use Chocolatey to install a collection of other tools and applications. **Review and modify the script to suit your own needs before executing such as changing to VS Enterprise and Window Server 2016 (VS-2017-Ent-Latest-WS2016)** - ->**Note:** Sometimes this all works great but other times, the Chocolatey packages do not install when the VM is first created so you may need to run choco install for the individual packages to complete the environment setup. - ->**Note:** Run PowerShell as an administrator. - -```PowerShell -Login-AzureRmAccount -Select-AzureRmSubscription -SubscriptionName andrewmo -$VmName = "DevOpsHOL" -$DnsLabelPrefix = "" -$VmIPName = $VmName+"-ip" -$VmAdminUserName = "" -$VmAdminPassword ="" -$ResourceGroupName = "DevOpsHOL" -$ResourceGroupLocation = "East US 2" -$SecureStringPwd = ConvertTo-SecureString $VmAdminPassword -AsPlainText -Force -New-AzureRmResourceGroup -Name $ResourceGroupName -Location $ResourceGroupLocation -Verbose -Force -New-AzureRmResourceGroupDeployment -ResourceGroupName $ResourceGroupName ` - -TemplateUri "https://raw.githubusercontent.com/nagroma/DevOpsHOL/master/azure-rm/azuredeploy.json" ` - -VmName $VmName ` - -VmSize "Standard_D2s_v3" ` - -VmVisualStudioVersion "VS-2017-Comm-Latest-Win10-N" ` - -VmAdminUserName $VmAdminUserName ` - -VmAdminPassword $SecureStringPwd ` - -DnsLabelPrefix $DnsLabelPrefix ` - -ChocoPackages 'visualstudiocode;notepadplusplus;googlechrome' ` - -Force -Verbose -``` - -Once the script above completes, you can use the following to start the VM and check to see that everything was installed correctly. - -```PowerShell -Start-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $VmName -while((Get-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $VmName -Status | ` - select -ExpandProperty Statuses | ` - ?{ $_.Code -match "PowerState" } | ` - select -ExpandProperty DisplayStatus) -ne "VM running") -{ - Start-Sleep -s 2 -} -Start-Sleep -s 5 ## Give the VM time to come up so it can accept remote requests -$vmip = Get-AzureRmPublicIpAddress -Name $VmIPName -ResourceGroupName $ResourceGroupName -$hostdns = $vmip.IpAddress.ToString() ## $vmip.DnsSettings.Fqdn -cmdkey /generic:TERMSRV/$hostdns /user:"$VmName\$VmAdminUserName" /pass:$VmAdminPassword -Start-Process "mstsc" -ArgumentList "/V:$hostdns /f" ## use /span to use both monitors -``` - -Finally, when you are done, you can use the following scripts to -1. Shut down the VM to minimize Azure charges -```PowerShell -Stop-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $VmName -Force -``` -2. Delete the entire resource group when done with the labs or to start fresh. -```PowerShell -Remove-AzureRmResourceGroup -Name $ResourceGroupName -``` +These are the hands on labs associated with the Avanade DevOps Practitioners course. This is based to a large part on the [PartsUnlimitedHOL](https://microsoft.github.io/PartsUnlimited/basic/GettingStarted.html) but simplified to use the Visual Studio MVC sample application. -Once you have a development environment set up, dive right in to the first [Getting Started](getting-started/README.md) lab. +You can accomplish these labs using Visual Studio 2017 on your local computer, but you may want to consider doing the labs using an Azure VM as the development machine. This not only keeps you from having to make changes to your local environment, but it gives you additional experience using Azure. +To start setting up your environment, make sure to follow the steps in the [Getting Started](getting-started/README.md) lab. \ No newline at end of file diff --git a/getting-started/README.md b/getting-started/README.md index 66c5f21..ec2357b 100644 --- a/getting-started/README.md +++ b/getting-started/README.md @@ -1,62 +1,92 @@ - # Avanade DevOps HOL - Getting Started -In this lab, we will be installing the required development components and verifying that the solution builds and is able to be pushed to VSTS. -## Pre-requisites ## -1. An active Azure subscription
- [Azure Portal](https://portal.azure.com) -2. An active Visual Studio Team Services account.
- [Sign up for Visual Studio Team Services](https://www.visualstudio.com/en-us/docs/setup-admin/team-services/sign-up-for-visual-studio-team-services) - -## Set up your machine ## -1. Install [Visual Studio 2017](http://go.microsoft.com/fwlink/?LinkId=517106)
- Select ASP.NET and web development and Azure development tools on the installer. -2. Install [Azure Power Shell](https://docs.microsoft.com/en-us/powershell/azure/install-azurerm-ps?view=azurermps-4.1.0) - -## Create MVC web application ## -1. Open Visual Studio 2017 - -2. Make sure GIT is the current source control plugin (under Tools -> Options -> Source Control -> Plug-in Selection) - -3. Go to File -> New -> Project... and create a new ASP.NET Core Web Application
- + Name: DevOpsHOL
- + Location: *where ever you put project source*
- + Create Directory for solution: Checked
- + Create new Git repository: Checked
- + Click OK
- + On the next dialog, choose Web Application (Model-View-Controller) as the application type, No Authentication
- + Click OK
- -4. Build and run the solution to make sure everything is OK to this point. - + Debug -> Start Debugging (F5)
- + If application doesn't start the first time, just run again. - + Do a quick smoke test to verify that the solution built and runs correctly.
- + Close browser and stop debugging
- -5. Choose File -> New -> Project... and add a Unit Test Project (.NET Core) project, to the solution *not the .NET Framework unit test project*. - + Name: DevOpsHOL.Tests
- + Solution: Add to solution
- -6. Rename **UnitTest.cs** to **HomeControllerTest.cs** and replace the file contents with the content of this file [HomeControllerTest.cs](../source/tests/HomeControllerTest.cs) - -7. Add the "DevOpsHOL" and "Microsoft.AspNetCore.Mvc.ViewFeatures.dll" as references to the DevOpsHOL.Tests project. Tip: Use quick refactoring. - -8. Build, run unit tests and run the solution to make sure everything is OK to this point. - + Test -> Run -> All Tests (Ctrl+R,A)
- + Debug -> Start Debugging (F5)
- + Do another quick smoke test to verify that the solution built and runs correctly.
- + Close browser and stop debugging
- -9. Add solution to VSTS project (Team Explorer -> Sync -> Publish Git Repo) - + Push to Visual Studio Team Services
- + Repository name: DevOpsHOL
- + Publish repository will create a project in VSTS (NOTE: if you have multiple VSTS accounts, make sure this is published to the correct Team Services Domain).
- -![]() - -9. Create the first commit for your project (Team Explorer -> Changes -> Commit All and Push) - -10. Log in to VSTS with browser and verify that DevOpsHOL project was created and source code is uploaded. - -## Next steps -- [Continuous Integration](../continuous-integration/README.md) +In this lab, we will be installing the required development components to setup your lab environment. + +You can either configure an Azure development environment on your own, or use a simple PowerShell script provided in this document. The script will create a new Azure resource group and then configure an Azure VM with Windows 10 and Visual Studio 2017 Community edition. It will also use Chocolatey to install a collection of other tools and applications. **Review and modify the script to suit your own needs before executing such as changing to VS Enterprise and Windows Server 2016 (VS-2017-Ent-Latest-WS2016)** + +## Prerequisites + +1. An active Azure subscription + - Visit the [Azure Portal](https://portal.azure.com) + +1. An active Visual Studio Team Services account. + - [Sign up for Visual Studio Team Services](https://www.visualstudio.com/en-us/docs/setup-admin/team-services/sign-up-for-visual-studio-team-services) + +1. Install [Azure PowerShell](https://docs.microsoft.com/nl-nl/powershell/azure/install-azurerm-ps) on your local machine + +## Environment requirements + +1. [Visual Studio 2017](http://go.microsoft.com/fwlink/?LinkId=517106) + - Select the following workloads: + - ASP.NET and web development + - Azure development (including PowerShell tools) + - .NET Core cross-platform development + +## Optional: Setup through PowerShell + +In case you chose not to set up your own environment through the Azure Portal, this section is just for you! + +Execute the following steps: + +1. Run PowerShell ISE as an administrator. + +1. Paste the following PowerShell code in the script pane: + + ```PowerShell + Login-AzureRmAccount + Select-AzureRmSubscription -SubscriptionName + $VmName = "DevOpsHOL" + $DnsLabelPrefix = "" + $VmIPName = $VmName+"-ip" + $VmAdminUserName = "" + $VmAdminPassword ="" + $ResourceGroupName = "DevOpsHOL" + $ResourceGroupLocation = "East US 2" + $SecureStringPwd = ConvertTo-SecureString $VmAdminPassword -AsPlainText -Force + New-AzureRmResourceGroup -Name $ResourceGroupName -Location $ResourceGroupLocation -Verbose -Force + New-AzureRmResourceGroupDeployment -ResourceGroupName $ResourceGroupName ` + -TemplateUri "https://raw.githubusercontent.com/Avanade/DevOpsHOL/master/azure-rm/azuredeploy.json" ` + -VmName $VmName ` + -VmSize "Standard_D2s_v3" ` + -VmVisualStudioVersion "VS-2017-Comm-Latest-Win10-N" ` + -VmAdminUserName $VmAdminUserName ` + -VmAdminPassword $SecureStringPwd ` + -DnsLabelPrefix $DnsLabelPrefix ` + -ChocoPackages 'visualstudiocode;googlechrome' ` + -Force -Verbose + ``` + + **Note:** Sometimes this all works great but other times, the Chocolatey packages do not install when the VM is first created so you may need to run choco install for the individual packages to complete the environment setup. + +1. Replace all the \ with your own values and run the script. + +1. Once the script above completes, you can use the following to start the VM and check to see that everything was installed correctly. + + ```PowerShell + Start-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $VmName + while((Get-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $VmName -Status | ` + select -ExpandProperty Statuses | ` + ?{ $_.Code -match "PowerState" } | ` + select -ExpandProperty DisplayStatus) -ne "VM running") + { + Start-Sleep -s 2 + } + Start-Sleep -s 5 ## Give the VM time to come up so it can accept remote requests + $vmip = Get-AzureRmPublicIpAddress -Name $VmIPName -ResourceGroupName $ResourceGroupName + $hostdns = $vmip.IpAddress.ToString() ## $vmip.DnsSettings.Fqdn + cmdkey /generic:TERMSRV/$hostdns /user:"$VmName\$VmAdminUserName" /pass:$VmAdminPassword + Start-Process "mstsc" -ArgumentList "/V:$hostdns /f" ## use /span to use both monitors + ``` + +## Optional: Cleanup resources + +Finally, when you are done, you can use the following code to: + +- Shut down the VM to minimize Azure charges + ```PowerShell + Stop-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $VmName -Force + ``` +- Delete the entire resource group when done with the labs or to start fresh. + ```PowerShell + Remove-AzureRmResourceGroup -Name $ResourceGroupName + ``` \ No newline at end of file From eaa536880d72091dade60b2eb7427eff5a76b695 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Geuze?= Date: Fri, 2 Mar 2018 16:23:35 +0100 Subject: [PATCH 002/168] add first version of new labs --- .../azure-rm}/azuredeploy.json | 0 .../azure-rm}/azuredeploy.parameters.json | 0 .../azure-rm}/scripts/PostDeploy.ps1 | 0 .../azure-rm}/scripts/SetupChocolatey.ps1 | 0 .../continuous-deployment}/README.md | 0 .../continuous-deployment}/media/CD1.png | Bin .../continuous-deployment}/media/CD2.png | Bin .../continuous-deployment}/media/CD3.png | Bin .../continuous-deployment}/media/CD4.png | Bin .../continuous-deployment}/media/CD5.png | Bin .../continuous-deployment}/media/CD6.png | Bin .../continuous-deployment}/media/CD7.png | Bin .../continuous-deployment}/media/CD8.png | Bin .../media/CD_ERROR_FILE_IN_USE.png | Bin .../continuous-integration}/README.md | 0 .../continuous-integration}/media/CI1.png | Bin .../continuous-integration}/media/CI2.png | Bin .../continuous-integration}/media/CI3.png | Bin .../continuous-integration}/media/CI4.png | Bin .../continuous-integration}/media/CI5.png | Bin .../continuous-integration}/media/CI6.png | Bin .../continuous-integration}/media/CI7.png | Bin .../continuous-integration}/media/CI8.png | Bin {extras => backup/extras}/notes | 0 .../feature-flag}/README.md | 0 .../media/add-contact-view-model.PNG | Bin .../feature-flag}/media/add-feature-class.PNG | Bin .../media/add-feature-controller.PNG | Bin .../media/add-feature-manager-folder.PNG | Bin .../media/add-features-index-view.PNG | Bin .../media/add-features-view-model-class.PNG | Bin .../media/add-view-features-folder.PNG | Bin .../media/contact-page-with-map.PNG | Bin .../media/contact-page-without-map.PNG | Bin .../feature-flag}/media/launch-site.PNG | Bin .../feature-flag}/media/switch-feature.png | Bin .../private-agent}/README.md | 0 .../source}/deploy/azuredeploy.json | 0 .../deploy/azuredeploy.parameters.json | 0 .../source}/tests/HomeControllerTest.cs | 0 .../source}/vsts/DevOpsHOL-CI - CD.json | 0 .../source}/vsts/DevOpsHOL-CI.json | 0 {source => backup/source}/vsts/README.md | 0 .../README.md => getting-started.md | 0 getting-started/media/GS1.png | Bin 25439 -> 0 bytes lab-1-azure-devops-project-pipeline.md | 20 +++++++++++ lab-2-multi-stage-deployments.md | 23 +++++++++++++ lab-3-analysis-with-sonarqube.md | 32 ++++++++++++++++++ lab-4-feature-toggle.md | 20 +++++++++++ lab-5-ui-testing.md | 18 ++++++++++ lab-6-smoke-testing.md | 19 +++++++++++ 51 files changed, 132 insertions(+) rename {azure-rm => backup/azure-rm}/azuredeploy.json (100%) rename {azure-rm => backup/azure-rm}/azuredeploy.parameters.json (100%) rename {azure-rm => backup/azure-rm}/scripts/PostDeploy.ps1 (100%) rename {azure-rm => backup/azure-rm}/scripts/SetupChocolatey.ps1 (100%) rename {continuous-deployment => backup/continuous-deployment}/README.md (100%) rename {continuous-deployment => backup/continuous-deployment}/media/CD1.png (100%) rename {continuous-deployment => backup/continuous-deployment}/media/CD2.png (100%) rename {continuous-deployment => backup/continuous-deployment}/media/CD3.png (100%) rename {continuous-deployment => backup/continuous-deployment}/media/CD4.png (100%) rename {continuous-deployment => backup/continuous-deployment}/media/CD5.png (100%) rename {continuous-deployment => backup/continuous-deployment}/media/CD6.png (100%) rename {continuous-deployment => backup/continuous-deployment}/media/CD7.png (100%) rename {continuous-deployment => backup/continuous-deployment}/media/CD8.png (100%) rename {continuous-deployment => backup/continuous-deployment}/media/CD_ERROR_FILE_IN_USE.png (100%) rename {continuous-integration => backup/continuous-integration}/README.md (100%) rename {continuous-integration => backup/continuous-integration}/media/CI1.png (100%) rename {continuous-integration => backup/continuous-integration}/media/CI2.png (100%) rename {continuous-integration => backup/continuous-integration}/media/CI3.png (100%) rename {continuous-integration => backup/continuous-integration}/media/CI4.png (100%) rename {continuous-integration => backup/continuous-integration}/media/CI5.png (100%) rename {continuous-integration => backup/continuous-integration}/media/CI6.png (100%) rename {continuous-integration => backup/continuous-integration}/media/CI7.png (100%) rename {continuous-integration => backup/continuous-integration}/media/CI8.png (100%) rename {extras => backup/extras}/notes (100%) rename {feature-flag => backup/feature-flag}/README.md (100%) rename {feature-flag => backup/feature-flag}/media/add-contact-view-model.PNG (100%) rename {feature-flag => backup/feature-flag}/media/add-feature-class.PNG (100%) rename {feature-flag => backup/feature-flag}/media/add-feature-controller.PNG (100%) rename {feature-flag => backup/feature-flag}/media/add-feature-manager-folder.PNG (100%) rename {feature-flag => backup/feature-flag}/media/add-features-index-view.PNG (100%) rename {feature-flag => backup/feature-flag}/media/add-features-view-model-class.PNG (100%) rename {feature-flag => backup/feature-flag}/media/add-view-features-folder.PNG (100%) rename {feature-flag => backup/feature-flag}/media/contact-page-with-map.PNG (100%) rename {feature-flag => backup/feature-flag}/media/contact-page-without-map.PNG (100%) rename {feature-flag => backup/feature-flag}/media/launch-site.PNG (100%) rename {feature-flag => backup/feature-flag}/media/switch-feature.png (100%) rename {private-agent => backup/private-agent}/README.md (100%) rename {source => backup/source}/deploy/azuredeploy.json (100%) rename {source => backup/source}/deploy/azuredeploy.parameters.json (100%) rename {source => backup/source}/tests/HomeControllerTest.cs (100%) rename {source => backup/source}/vsts/DevOpsHOL-CI - CD.json (100%) rename {source => backup/source}/vsts/DevOpsHOL-CI.json (100%) rename {source => backup/source}/vsts/README.md (100%) rename getting-started/README.md => getting-started.md (100%) delete mode 100644 getting-started/media/GS1.png create mode 100644 lab-1-azure-devops-project-pipeline.md create mode 100644 lab-2-multi-stage-deployments.md create mode 100644 lab-3-analysis-with-sonarqube.md create mode 100644 lab-4-feature-toggle.md create mode 100644 lab-5-ui-testing.md create mode 100644 lab-6-smoke-testing.md diff --git a/azure-rm/azuredeploy.json b/backup/azure-rm/azuredeploy.json similarity index 100% rename from azure-rm/azuredeploy.json rename to backup/azure-rm/azuredeploy.json diff --git a/azure-rm/azuredeploy.parameters.json b/backup/azure-rm/azuredeploy.parameters.json similarity index 100% rename from azure-rm/azuredeploy.parameters.json rename to backup/azure-rm/azuredeploy.parameters.json diff --git a/azure-rm/scripts/PostDeploy.ps1 b/backup/azure-rm/scripts/PostDeploy.ps1 similarity index 100% rename from azure-rm/scripts/PostDeploy.ps1 rename to backup/azure-rm/scripts/PostDeploy.ps1 diff --git a/azure-rm/scripts/SetupChocolatey.ps1 b/backup/azure-rm/scripts/SetupChocolatey.ps1 similarity index 100% rename from azure-rm/scripts/SetupChocolatey.ps1 rename to backup/azure-rm/scripts/SetupChocolatey.ps1 diff --git a/continuous-deployment/README.md b/backup/continuous-deployment/README.md similarity index 100% rename from continuous-deployment/README.md rename to backup/continuous-deployment/README.md diff --git a/continuous-deployment/media/CD1.png b/backup/continuous-deployment/media/CD1.png similarity index 100% rename from continuous-deployment/media/CD1.png rename to backup/continuous-deployment/media/CD1.png diff --git a/continuous-deployment/media/CD2.png b/backup/continuous-deployment/media/CD2.png similarity index 100% rename from continuous-deployment/media/CD2.png rename to backup/continuous-deployment/media/CD2.png diff --git a/continuous-deployment/media/CD3.png b/backup/continuous-deployment/media/CD3.png similarity index 100% rename from continuous-deployment/media/CD3.png rename to backup/continuous-deployment/media/CD3.png diff --git a/continuous-deployment/media/CD4.png b/backup/continuous-deployment/media/CD4.png similarity index 100% rename from continuous-deployment/media/CD4.png rename to backup/continuous-deployment/media/CD4.png diff --git a/continuous-deployment/media/CD5.png b/backup/continuous-deployment/media/CD5.png similarity index 100% rename from continuous-deployment/media/CD5.png rename to backup/continuous-deployment/media/CD5.png diff --git a/continuous-deployment/media/CD6.png b/backup/continuous-deployment/media/CD6.png similarity index 100% rename from continuous-deployment/media/CD6.png rename to backup/continuous-deployment/media/CD6.png diff --git a/continuous-deployment/media/CD7.png b/backup/continuous-deployment/media/CD7.png similarity index 100% rename from continuous-deployment/media/CD7.png rename to backup/continuous-deployment/media/CD7.png diff --git a/continuous-deployment/media/CD8.png b/backup/continuous-deployment/media/CD8.png similarity index 100% rename from continuous-deployment/media/CD8.png rename to backup/continuous-deployment/media/CD8.png diff --git a/continuous-deployment/media/CD_ERROR_FILE_IN_USE.png b/backup/continuous-deployment/media/CD_ERROR_FILE_IN_USE.png similarity index 100% rename from continuous-deployment/media/CD_ERROR_FILE_IN_USE.png rename to backup/continuous-deployment/media/CD_ERROR_FILE_IN_USE.png diff --git a/continuous-integration/README.md b/backup/continuous-integration/README.md similarity index 100% rename from continuous-integration/README.md rename to backup/continuous-integration/README.md diff --git a/continuous-integration/media/CI1.png b/backup/continuous-integration/media/CI1.png similarity index 100% rename from continuous-integration/media/CI1.png rename to backup/continuous-integration/media/CI1.png diff --git a/continuous-integration/media/CI2.png b/backup/continuous-integration/media/CI2.png similarity index 100% rename from continuous-integration/media/CI2.png rename to backup/continuous-integration/media/CI2.png diff --git a/continuous-integration/media/CI3.png b/backup/continuous-integration/media/CI3.png similarity index 100% rename from continuous-integration/media/CI3.png rename to backup/continuous-integration/media/CI3.png diff --git a/continuous-integration/media/CI4.png b/backup/continuous-integration/media/CI4.png similarity index 100% rename from continuous-integration/media/CI4.png rename to backup/continuous-integration/media/CI4.png diff --git a/continuous-integration/media/CI5.png b/backup/continuous-integration/media/CI5.png similarity index 100% rename from continuous-integration/media/CI5.png rename to backup/continuous-integration/media/CI5.png diff --git a/continuous-integration/media/CI6.png b/backup/continuous-integration/media/CI6.png similarity index 100% rename from continuous-integration/media/CI6.png rename to backup/continuous-integration/media/CI6.png diff --git a/continuous-integration/media/CI7.png b/backup/continuous-integration/media/CI7.png similarity index 100% rename from continuous-integration/media/CI7.png rename to backup/continuous-integration/media/CI7.png diff --git a/continuous-integration/media/CI8.png b/backup/continuous-integration/media/CI8.png similarity index 100% rename from continuous-integration/media/CI8.png rename to backup/continuous-integration/media/CI8.png diff --git a/extras/notes b/backup/extras/notes similarity index 100% rename from extras/notes rename to backup/extras/notes diff --git a/feature-flag/README.md b/backup/feature-flag/README.md similarity index 100% rename from feature-flag/README.md rename to backup/feature-flag/README.md diff --git a/feature-flag/media/add-contact-view-model.PNG b/backup/feature-flag/media/add-contact-view-model.PNG similarity index 100% rename from feature-flag/media/add-contact-view-model.PNG rename to backup/feature-flag/media/add-contact-view-model.PNG diff --git a/feature-flag/media/add-feature-class.PNG b/backup/feature-flag/media/add-feature-class.PNG similarity index 100% rename from feature-flag/media/add-feature-class.PNG rename to backup/feature-flag/media/add-feature-class.PNG diff --git a/feature-flag/media/add-feature-controller.PNG b/backup/feature-flag/media/add-feature-controller.PNG similarity index 100% rename from feature-flag/media/add-feature-controller.PNG rename to backup/feature-flag/media/add-feature-controller.PNG diff --git a/feature-flag/media/add-feature-manager-folder.PNG b/backup/feature-flag/media/add-feature-manager-folder.PNG similarity index 100% rename from feature-flag/media/add-feature-manager-folder.PNG rename to backup/feature-flag/media/add-feature-manager-folder.PNG diff --git a/feature-flag/media/add-features-index-view.PNG b/backup/feature-flag/media/add-features-index-view.PNG similarity index 100% rename from feature-flag/media/add-features-index-view.PNG rename to backup/feature-flag/media/add-features-index-view.PNG diff --git a/feature-flag/media/add-features-view-model-class.PNG b/backup/feature-flag/media/add-features-view-model-class.PNG similarity index 100% rename from feature-flag/media/add-features-view-model-class.PNG rename to backup/feature-flag/media/add-features-view-model-class.PNG diff --git a/feature-flag/media/add-view-features-folder.PNG b/backup/feature-flag/media/add-view-features-folder.PNG similarity index 100% rename from feature-flag/media/add-view-features-folder.PNG rename to backup/feature-flag/media/add-view-features-folder.PNG diff --git a/feature-flag/media/contact-page-with-map.PNG b/backup/feature-flag/media/contact-page-with-map.PNG similarity index 100% rename from feature-flag/media/contact-page-with-map.PNG rename to backup/feature-flag/media/contact-page-with-map.PNG diff --git a/feature-flag/media/contact-page-without-map.PNG b/backup/feature-flag/media/contact-page-without-map.PNG similarity index 100% rename from feature-flag/media/contact-page-without-map.PNG rename to backup/feature-flag/media/contact-page-without-map.PNG diff --git a/feature-flag/media/launch-site.PNG b/backup/feature-flag/media/launch-site.PNG similarity index 100% rename from feature-flag/media/launch-site.PNG rename to backup/feature-flag/media/launch-site.PNG diff --git a/feature-flag/media/switch-feature.png b/backup/feature-flag/media/switch-feature.png similarity index 100% rename from feature-flag/media/switch-feature.png rename to backup/feature-flag/media/switch-feature.png diff --git a/private-agent/README.md b/backup/private-agent/README.md similarity index 100% rename from private-agent/README.md rename to backup/private-agent/README.md diff --git a/source/deploy/azuredeploy.json b/backup/source/deploy/azuredeploy.json similarity index 100% rename from source/deploy/azuredeploy.json rename to backup/source/deploy/azuredeploy.json diff --git a/source/deploy/azuredeploy.parameters.json b/backup/source/deploy/azuredeploy.parameters.json similarity index 100% rename from source/deploy/azuredeploy.parameters.json rename to backup/source/deploy/azuredeploy.parameters.json diff --git a/source/tests/HomeControllerTest.cs b/backup/source/tests/HomeControllerTest.cs similarity index 100% rename from source/tests/HomeControllerTest.cs rename to backup/source/tests/HomeControllerTest.cs diff --git a/source/vsts/DevOpsHOL-CI - CD.json b/backup/source/vsts/DevOpsHOL-CI - CD.json similarity index 100% rename from source/vsts/DevOpsHOL-CI - CD.json rename to backup/source/vsts/DevOpsHOL-CI - CD.json diff --git a/source/vsts/DevOpsHOL-CI.json b/backup/source/vsts/DevOpsHOL-CI.json similarity index 100% rename from source/vsts/DevOpsHOL-CI.json rename to backup/source/vsts/DevOpsHOL-CI.json diff --git a/source/vsts/README.md b/backup/source/vsts/README.md similarity index 100% rename from source/vsts/README.md rename to backup/source/vsts/README.md diff --git a/getting-started/README.md b/getting-started.md similarity index 100% rename from getting-started/README.md rename to getting-started.md diff --git a/getting-started/media/GS1.png b/getting-started/media/GS1.png deleted file mode 100644 index 3c8d59180c8854b23aaa3343d706f708173a6e38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25439 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⁡vF%5bt; zOgY*fQ&ih1@mfD!tkfwI*eSC;^g@8LI2~l{Ldn&C>g~VjIpl&0+$%DLV`}%k@@$=_ z-j3R2JD+mYZ0h*?cSpTzk;_E?SrZ`Blr8P}4j@?4F?#&Z0c0*3?(cBS*DjzFElQr;qPtCG$I@#+kfg zWqL2UYF@(a5!5ouN%J|BS+cRF`zAL89*a350t@qjAmEjCpQm~~fWa$tML9H9=q!4; zdS7~L7nq@{qcb{dWvVRQC#iBJx(Q!vyoiJ_YiwakwLU(ueDZ|Z21)0d^9&kE4n58@J9EyBr@0T&=tvW zR3$OI(!tzXF535^dla5i=pZ+^#puIZE+~8#)i(m_b+!_tG^voWw*gQ`C~0z5k5}@H zb0pU{ zHkpr}ET{wbQ`xXKg=1Ih2HCOPxpyBiO{VuAB>$f5KC&bjO~p7Z5LEK6!xT= zqyDA{i?ejre}A1N9Z4L|0ch$O%Bm1!6ybmQv~C&R-seB}`cnJc*lBwTI>wk0LWe}f zIDU%_KJcia|Dtw&>ius*%0t;(Bf|JOIi^4twUnloz-!q3jxisqZRwAc92yH90Ln|MrmIW+U7^nMiz?W6BeR%wInCO z8?^l?W+|@>3y25dIluWXhyDkAy&{GDGt37pS~D%J9*|^**8bU@3Tmb!a2WXKVMUg0 zY2fGMu8mtVxFatlG%Dvw@Oz67W%oZBoc-hbQZ*q0BK^P;A4HxTP@!6&=I61k^K1@^ zQ=if$f{g=eBg|HNEK4?WW>ie#AiI2D}eKQu(RG&I4N`K4iR)sapi%!_%v|6;1 zz~H%6wD`j)dJc0aSNa}2tWJI3wp-13P55}kzv1 z?_h?X2-m${<>hLy=sbY=^_gAUU|TddJJ;G(Axp9@>o3;<`*aTemxTk%6BgcthpKHq z^LFeU!LftVYub{S!Wp6_L;kRaW^@7qGiw?e(v_&SBj5bXM#WR{P`*zXC-d)-AOt`% z6%Z;7{`bO%oVz{&_TXpu`}+r>($55kx$bvRX z-`c+za{Zb4_4d_(oXOQWua~g8{M@qudZ<1Zw`6kCM>u}(T{ezk!qId9)@kC)l9}bc zt0vp-CeFr6XRTv@#r5Y}eh@=BA8AT=^bK0WG8RCdB>Wvc0xIr%y=H*(%Y_022rz

rD*;__^HCEq*N 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.azurewebsites.net + +Use approvals and gates to control your deployment + +1. Add pre deployment gates on work item count + +1. Add pre/post deployment approvals to control promotion to next environments \ No newline at end of file diff --git a/lab-3-analysis-with-sonarqube.md b/lab-3-analysis-with-sonarqube.md new file mode 100644 index 0000000..d3da58c --- /dev/null +++ b/lab-3-analysis-with-sonarqube.md @@ -0,0 +1,32 @@ +# Avanade DevOps HOL - Analysis with SonarQube + +In this lab, we enable SonarQube for analysis of our code. + +Based on: +https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Extension+for+VSTS-TFS + +## Prerequisites + +- Complete [Define your multi-stage continuous deployment process with approvals and gates](lab-2-multi-stage-deployments.md). + +## Tasks + +1. Create a new project in SonarQube and save the project key + +1. Edit build definition + +1. Add task "Prepare analysis on SonarQube" before any Msbuild or VSBuild task + - Install from marketplace if not already in your account + +1. Enter the project key and other details + +1. Add task "Run Code Analysis" and "Publish Analysis Results" to your build + +1. Reorder the tasks to respect the following order: + - Prepare Analysis Configuration task before any MSBuild or Visual Studio Build task. + - Run Code Analysis task after the Visual Studio Test task. + - Publish Analysis Result task after the Run Code Analysis task + +1. Save and Queue the build + +1. Log on to SonarQube and view the results \ No newline at end of file diff --git a/lab-4-feature-toggle.md b/lab-4-feature-toggle.md new file mode 100644 index 0000000..610227c --- /dev/null +++ b/lab-4-feature-toggle.md @@ -0,0 +1,20 @@ +# Avanade DevOps HOL - Feature Toggle + +In this lab, we build a Feature Toggle mechanism in our code. + +Based on: https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-FeatureFlagforWebapps.html + +## Prerequisites + +- Complete [Analysis with SonarQube](lab-3-analysis-with-sonarqube.md). + +## Tasks + +1. Use framework: https://github.com/jason-roberts/FeatureToggle + +1. Example: https://github.com/jason-roberts/FeatureToggle/tree/master/src/Examples/AspDotNetCoreExample + +1. Use config to store feature toggle config + +1. Add page to default MVC project to where you can submit contact information, submit doesn’t do anything. + - Feature toggle is checking for phone number format using reg ex, see https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-FeatureFlagforWebapps.html \ No newline at end of file diff --git a/lab-5-ui-testing.md b/lab-5-ui-testing.md new file mode 100644 index 0000000..cacbfa7 --- /dev/null +++ b/lab-5-ui-testing.md @@ -0,0 +1,18 @@ +# Avanade DevOps HOL - UI Testing + +In this lab, we add ui tests to our test project. + +Based on: https://docs.microsoft.com/en-us/vsts/build-release/test/continuous-test-selenium + +## Prerequisites + +- Complete [Feature Toggle](lab-4-feature-toggle.md). + +## Tasks + +1. Add NuGet packages to the test project: + - Selenium.Support + - Selenium.WebDriver + - Selenium.WebDriver.PhantomJS + +1. Test the submit contact information diff --git a/lab-6-smoke-testing.md b/lab-6-smoke-testing.md new file mode 100644 index 0000000..e41c3fc --- /dev/null +++ b/lab-6-smoke-testing.md @@ -0,0 +1,19 @@ +# Avanade DevOps HOL - Smoke Testing + +In this lab, we add smoke tests to our test project. + +## Prerequisites + +- Complete [UI Testing](lab-5-ui-testing.md). + +## Tasks + +1. Add new class IntegrationTests to the test project + +1. Implement an integration test that checks if your website is up and running + - Hint: WebRequest.CreateHttp + +1. Create a new xml file "local.runsettings" with a configurable website url + +1. Create a new xml file "integration.runsettings" containing a VSTS variable token for the same website url variable + - Set "Copy to output directory" on "Copy if newer" \ No newline at end of file From c0df00c7779a2882159dcdac2349f24e440aa6ec Mon Sep 17 00:00:00 2001 From: andregeuze Date: Mon, 5 Mar 2018 08:34:24 +0100 Subject: [PATCH 003/168] remove old content --- backup/azure-rm/azuredeploy.json | 252 ------- backup/azure-rm/azuredeploy.parameters.json | 12 - backup/azure-rm/scripts/PostDeploy.ps1 | 116 --- backup/azure-rm/scripts/SetupChocolatey.ps1 | 64 -- backup/continuous-deployment/README.md | 156 ---- backup/continuous-deployment/media/CD1.png | Bin 96690 -> 0 bytes backup/continuous-deployment/media/CD2.png | Bin 117466 -> 0 bytes backup/continuous-deployment/media/CD3.png | Bin 50353 -> 0 bytes backup/continuous-deployment/media/CD4.png | Bin 53590 -> 0 bytes backup/continuous-deployment/media/CD5.png | Bin 21670 -> 0 bytes backup/continuous-deployment/media/CD6.png | Bin 14073 -> 0 bytes backup/continuous-deployment/media/CD7.png | Bin 58387 -> 0 bytes backup/continuous-deployment/media/CD8.png | Bin 14516 -> 0 bytes .../media/CD_ERROR_FILE_IN_USE.png | Bin 12536 -> 0 bytes backup/continuous-integration/README.md | 122 ---- backup/continuous-integration/media/CI1.png | Bin 31641 -> 0 bytes backup/continuous-integration/media/CI2.png | Bin 54196 -> 0 bytes backup/continuous-integration/media/CI3.png | Bin 11778 -> 0 bytes backup/continuous-integration/media/CI4.png | Bin 69413 -> 0 bytes backup/continuous-integration/media/CI5.png | Bin 64621 -> 0 bytes backup/continuous-integration/media/CI6.png | Bin 15780 -> 0 bytes backup/continuous-integration/media/CI7.png | Bin 23081 -> 0 bytes backup/continuous-integration/media/CI8.png | Bin 92408 -> 0 bytes backup/extras/notes | 51 -- backup/feature-flag/README.md | 340 --------- .../media/add-contact-view-model.PNG | Bin 15391 -> 0 bytes .../feature-flag/media/add-feature-class.PNG | Bin 13802 -> 0 bytes .../media/add-feature-controller.PNG | Bin 4431 -> 0 bytes .../media/add-feature-manager-folder.PNG | Bin 12356 -> 0 bytes .../media/add-features-index-view.PNG | Bin 15775 -> 0 bytes .../media/add-features-view-model-class.PNG | Bin 14771 -> 0 bytes .../media/add-view-features-folder.PNG | Bin 15441 -> 0 bytes .../media/contact-page-with-map.PNG | Bin 21341 -> 0 bytes .../media/contact-page-without-map.PNG | Bin 8535 -> 0 bytes backup/feature-flag/media/launch-site.PNG | Bin 13056 -> 0 bytes backup/feature-flag/media/switch-feature.png | Bin 8479 -> 0 bytes backup/private-agent/README.md | 35 - backup/source/deploy/azuredeploy.json | 173 ----- .../source/deploy/azuredeploy.parameters.json | 18 - backup/source/tests/HomeControllerTest.cs | 50 -- backup/source/vsts/DevOpsHOL-CI - CD.json | 690 ------------------ backup/source/vsts/DevOpsHOL-CI.json | 550 -------------- backup/source/vsts/README.md | 1 - 43 files changed, 2630 deletions(-) delete mode 100644 backup/azure-rm/azuredeploy.json delete mode 100644 backup/azure-rm/azuredeploy.parameters.json delete mode 100644 backup/azure-rm/scripts/PostDeploy.ps1 delete mode 100644 backup/azure-rm/scripts/SetupChocolatey.ps1 delete mode 100644 backup/continuous-deployment/README.md delete mode 100644 backup/continuous-deployment/media/CD1.png delete mode 100644 backup/continuous-deployment/media/CD2.png delete mode 100644 backup/continuous-deployment/media/CD3.png delete mode 100644 backup/continuous-deployment/media/CD4.png delete mode 100644 backup/continuous-deployment/media/CD5.png delete mode 100644 backup/continuous-deployment/media/CD6.png delete mode 100644 backup/continuous-deployment/media/CD7.png delete mode 100644 backup/continuous-deployment/media/CD8.png delete mode 100644 backup/continuous-deployment/media/CD_ERROR_FILE_IN_USE.png delete mode 100644 backup/continuous-integration/README.md delete mode 100644 backup/continuous-integration/media/CI1.png delete mode 100644 backup/continuous-integration/media/CI2.png delete mode 100644 backup/continuous-integration/media/CI3.png delete mode 100644 backup/continuous-integration/media/CI4.png delete mode 100644 backup/continuous-integration/media/CI5.png delete mode 100644 backup/continuous-integration/media/CI6.png delete mode 100644 backup/continuous-integration/media/CI7.png delete mode 100644 backup/continuous-integration/media/CI8.png delete mode 100644 backup/extras/notes delete mode 100644 backup/feature-flag/README.md delete mode 100644 backup/feature-flag/media/add-contact-view-model.PNG delete mode 100644 backup/feature-flag/media/add-feature-class.PNG delete mode 100644 backup/feature-flag/media/add-feature-controller.PNG delete mode 100644 backup/feature-flag/media/add-feature-manager-folder.PNG delete mode 100644 backup/feature-flag/media/add-features-index-view.PNG delete mode 100644 backup/feature-flag/media/add-features-view-model-class.PNG delete mode 100644 backup/feature-flag/media/add-view-features-folder.PNG delete mode 100644 backup/feature-flag/media/contact-page-with-map.PNG delete mode 100644 backup/feature-flag/media/contact-page-without-map.PNG delete mode 100644 backup/feature-flag/media/launch-site.PNG delete mode 100644 backup/feature-flag/media/switch-feature.png delete mode 100644 backup/private-agent/README.md delete mode 100644 backup/source/deploy/azuredeploy.json delete mode 100644 backup/source/deploy/azuredeploy.parameters.json delete mode 100644 backup/source/tests/HomeControllerTest.cs delete mode 100644 backup/source/vsts/DevOpsHOL-CI - CD.json delete mode 100644 backup/source/vsts/DevOpsHOL-CI.json delete mode 100644 backup/source/vsts/README.md diff --git a/backup/azure-rm/azuredeploy.json b/backup/azure-rm/azuredeploy.json deleted file mode 100644 index 4c60d44..0000000 --- a/backup/azure-rm/azuredeploy.json +++ /dev/null @@ -1,252 +0,0 @@ -{ - "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.1", - "parameters": { - "storageType": { - "type": "string", - "defaultValue": "Premium_LRS", - "allowedValues": [ - "Premium_LRS", - "Standard_LRS" - ], - "metadata": { - "description": "Which type of storage you want to use" - } - }, - "vmName": { - "type": "string", - "defaultValue": "VSVM-choco", - "metadata": { - "description": "Local name for the VM can be whatever you want" - } - }, - "vmAdminUserName": { - "type": "string", - "defaultValue": "andrewmo", - "metadata": { - "description": "VM admin user name" - } - }, - "vmAdminPassword": { - "type": "securestring", - "metadata": { - "description": "VM admin password. The supplied password must be between 8-123 characters long and must satisfy at least 3 of password complexity requirements from the following: 1) Contains an uppercase character 2) Contains a lowercase character 3) Contains a numeric digit 4) Contains a special character." - } - }, - "vmSize": { - "type": "string", - "metadata": { - "description": "Desired Size of the VM. Any valid option accepted but if you choose premium storage type you must choose a DS class VM size." - }, - "defaultValue": "Standard_D2s_v3" - }, - "vmVisualStudioVersion": { - "type": "string", - "defaultValue": "VS-2017-Ent-Latest-Win10-N", - "allowedValues": [ - "VS-2015-Comm-VSU3-AzureSDK-29-Win10-N", - "VS-2015-Comm-VSU3-AzureSDK-29-WS2012R2", - "VS-2015-Ent-VSU3-AzureSDK-29-Win10-N", - "VS-2015-Ent-VSU3-AzureSDK-29-WS2012R2", - "VS-2017-Comm-Latest-Win10-N", - "VS-2017-Comm-Latest-WS2016", - "VS-2017-Comm-Win10-N", - "VS-2017-Comm-WS2016", - "VS-2017-Ent-Latest-Win10-N", - "VS-2017-Ent-Latest-WS2016", - "VS-2017-Ent-Win10-N", - "VS-2017-Ent-WS2016" - ], - "metadata": { - "description": "Which version of Visual Studio you would like to deploy" - } - }, - "dnsLabelPrefix": { - "type": "string", - "defaultValue": "andrewmo-choco", - "metadata": { - "description": "DNS Label for the unique Public IP. Must be lowercase. It should match with the following regular expression: ^[a-z][a-z0-9-]{1,61}[a-z0-9]$ or it will raise an error." - } - }, - "chocoPackages": { - "type": "string", - "defaultValue": "sysinternals;googlechrome", - "metadata": { - "description": "List of Chocolatey packages to install separated by a semi-colon. Can not be empty. eg. nodejs-lts;python2;visualstudiocode;notepadplusplus;googlechrome;dotnetcore --version 1.1.2" - } - }, - "setupChocolateyScriptFileName": { - "type": "string", - "defaultValue": "SetupChocolatey.ps1", - "metadata": { - "description": "PowerShell script name to execute" - } - }, - "setupChocolatelyScriptLocation": { - "type": "string", - "defaultValue": "https://raw.githubusercontent.com/snagrom/azure-rm-templates/master/dev-chocolatey/scripts/", - "metadata": { - "description": "Public uri location of PowerShell Chocolately setup script" - } - } - }, - "variables": { - "storageName": "[concat('stor', uniquestring(resourceGroup().id))]", - "vnet01Prefix": "10.0.0.0/16", - "vnet01Subnet1Name": "Subnet-1", - "vnet01Subnet1Prefix": "10.0.0.0/24", - "vmImagePublisher": "MicrosoftVisualStudio", - "vmImageOffer": "VisualStudio", - "vmOSDiskName": "VMOSDisk", - "vmVnetName": "[concat(parameters('VMName'), '-net')]", - "vmVnetID": "[resourceId('Microsoft.Network/virtualNetworks', variables('vmVnetName'))]", - "vmSubnetRef": "[concat(variables('vmVnetID'), '/subnets/', variables('Vnet01Subnet1Name'))]", - "vmStorageAccountContainerName": "vhds", - "vmNicName": "[concat(parameters('vmName'), '-nic')]", - "vmIP01Name": "[concat(parameters('vmName'), '-ip')]" - }, - "resources": [ - { - "name": "[variables('storageName')]", - "type": "Microsoft.Storage/storageAccounts", - "location": "[resourceGroup().location]", - "apiVersion": "2015-06-15", - "dependsOn": [ ], - "tags": { - "displayName": "Storage01" - }, - "properties": { - "accountType": "[parameters('storageType')]" - } - }, - { - "name": "[variables('vmVnetName')]", - "type": "Microsoft.Network/virtualNetworks", - "location": "[resourceGroup().location]", - "apiVersion": "2015-06-15", - "dependsOn": [ ], - "properties": { - "addressSpace": { - "addressPrefixes": [ - "[variables('vnet01Prefix')]" - ] - }, - "subnets": [ - { - "name": "[variables('vnet01Subnet1Name')]", - "properties": { - "addressPrefix": "[variables('vnet01Subnet1Prefix')]" - } - } - ] - } - }, - { - "name": "[variables('vmNicName')]", - "type": "Microsoft.Network/networkInterfaces", - "location": "[resourceGroup().location]", - "apiVersion": "2015-06-15", - "dependsOn": [ - "[concat('Microsoft.Network/virtualNetworks/', variables('vmVnetName'))]", - "[concat('Microsoft.Network/publicIPAddresses/', variables('vmIP01Name'))]" - ], - "properties": { - "ipConfigurations": [ - { - "name": "ipconfig1", - "properties": { - "privateIPAllocationMethod": "Dynamic", - "subnet": { - "id": "[variables('vmSubnetRef')]" - }, - "publicIPAddress": { - "id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('vmIP01Name'))]" - } - } - } - ] - } - }, - { - "name": "[parameters('vmName')]", - "type": "Microsoft.Compute/virtualMachines", - "location": "[resourceGroup().location]", - "apiVersion": "2015-06-15", - "dependsOn": [ - "[concat('Microsoft.Storage/storageAccounts/', variables('storageName'))]", - "[concat('Microsoft.Network/networkInterfaces/', variables('vmNicName'))]" - ], - "properties": { - "hardwareProfile": { - "vmSize": "[parameters('vmSize')]" - }, - "osProfile": { - "computerName": "[parameters('vmName')]", - "adminUsername": "[parameters('vmAdminUsername')]", - "adminPassword": "[parameters('vmAdminPassword')]" - }, - "storageProfile": { - "imageReference": { - "publisher": "[variables('vmImagePublisher')]", - "offer": "[variables('vmImageOffer')]", - "sku": "[parameters('vmVisualStudioVersion')]", - "version": "latest" - }, - "osDisk": { - "name": "VMOSDisk", - "vhd": { - "uri": "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('storageName')), '2015-06-15').primaryEndpoints.blob, variables('vmStorageAccountContainerName'), '/', variables('vmOSDiskName'), '.vhd')]" - }, - "caching": "ReadWrite", - "createOption": "FromImage" - } - }, - "networkProfile": { - "networkInterfaces": [ - { - "id": "[resourceId('Microsoft.Network/networkInterfaces', variables('vmNicName'))]" - } - ] - } - }, - "resources": [ - { - "type": "extensions", - "name": "CustomScriptExtension", - "apiVersion": "2015-06-15", - "location": "[resourceGroup().location]", - "dependsOn": [ - "[parameters('vmName')]" - ], - "properties": { - "publisher": "Microsoft.Compute", - "type": "CustomScriptExtension", - "typeHandlerVersion": "1.8", - "autoUpgradeMinorVersion": true, - "settings": { - "fileUris": [ - "[concat(parameters('setupChocolatelyScriptLocation'),parameters('setupChocolateyScriptFileName'))]" - ], - "commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -File ',parameters('setupChocolateyScriptFileName'),' -chocoPackages ',parameters('chocoPackages'))]" - } - } - } - ] - }, - { - "name": "[variables('vmIP01Name')]", - "type": "Microsoft.Network/publicIPAddresses", - "location": "[resourceGroup().location]", - "apiVersion": "2015-06-15", - "dependsOn": [ ], - "properties": { - "publicIPAllocationMethod": "Dynamic", - "dnsSettings": { - "domainNameLabel": "[parameters('dnsLabelPrefix')]" - } - } - } - ], - "outputs": { } - } - \ No newline at end of file diff --git a/backup/azure-rm/azuredeploy.parameters.json b/backup/azure-rm/azuredeploy.parameters.json deleted file mode 100644 index 5137947..0000000 --- a/backup/azure-rm/azuredeploy.parameters.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "adminUsername": { - "value": "andrewmo" - }, - "adminPassword": { - "value": "TopSecretPassword123#$" - } - } -} \ No newline at end of file diff --git a/backup/azure-rm/scripts/PostDeploy.ps1 b/backup/azure-rm/scripts/PostDeploy.ps1 deleted file mode 100644 index d9d0dfd..0000000 --- a/backup/azure-rm/scripts/PostDeploy.ps1 +++ /dev/null @@ -1,116 +0,0 @@ -Param( - [string]$ChocoPackages, - [bool]$PartsUnlimited, - [bool]$Extras, - [string]$VmAdminUserName, - [Security.SecureString]$VmAdminPassword -) - -cls -function buildVS -{ - param - ( - [parameter(Mandatory=$true)] - [String] $path, - - [parameter(Mandatory=$false)] - [bool] $nuget = $true, - - [parameter(Mandatory=$false)] - [bool] $clean = $true - ) - process - { - $msBuildExe = 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\msbuild.exe' - - if ($nuget) { - Write-Host "Restoring NuGet packages" -foregroundcolor green - nuget restore "$($path)" - } - - if ($clean) { - Write-Host "Cleaning $($path)" -foregroundcolor green - & "$($msBuildExe)" "$($path)" /t:Clean /m - } - - Write-Host "Building $($path)" -foregroundcolor green - & "$($msBuildExe)" "$($path)" /t:Build /m - } -} - -New-Item "c:\choco" -type Directory -force | Out-Null -$LogFile = "c:\choco\Script.log" -$ChocoPackages | Out-File $LogFile -Append -$PartsUnlimited | Out-File $LogFile -Append -$Extras | Out-File $LogFile -Append -$VmAdminUserName | Out-File $LogFile -Append -$VmAdminPassword | Out-File $LogFile -Append - -$secPassword = ConvertTo-SecureString $VmAdminPassword -AsPlainText -Force -$credential = New-Object System.Management.Automation.PSCredential("$env:COMPUTERNAME\$($VmAdminUserName)", $secPassword) - -# Ensure that current process can run scripts. -"Enabling remoting" | Out-File $LogFile -Append -Enable-PSRemoting -Force -SkipNetworkProfileCheck - -"Changing ExecutionPolicy" | Out-File $LogFile -Append -Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force - -#"Install each Chocolatey Package" -if (-not [String]::IsNullOrWhiteSpace($ChocoPackages)){ - $ChocoPackages.Split(";") | ForEach { - $command = "cinst " + $_ + " -y -force" - $command | Out-File $LogFile -Append - $sb = [scriptblock]::Create("$command") - - # Use the current user profile - Invoke-Command -ScriptBlock $sb -ArgumentList $ChocoPackages -ComputerName $env:COMPUTERNAME -Credential $credential | Out-Null - } -} - -if ($PartsUnlimited){ - "Configuring PartsUnlimitedHOL" | Out-File $LogFile -Append - Invoke-Command -ScriptBlock { - $slnPath = "$env:userprofile\Desktop\PartsUnlimitedHOL" - "slnPath: $slnPath" - npm install bower -g - npm install grunt-cli -g - Copy-Item C:\Python27\python.exe C:\Python27\python2.exe - New-Item $slnPath -type directory -force - git clone https://github.com/Microsoft/PartsUnlimited.git $slnPath # The error message "CategoryInfo : NotSpecified: (Switched to branch..." is a documented issues but no workaround. This still works fine. - #Sometimes the \AppData\Roaming\npm gets added to the path and some times it doesn't. This makes sure. - "Adding $env:userprofile\AppData\Roaming\npm to path" - $AddedLocation ="$env:userprofile\AppData\Roaming\npm" - $Reg = "Registry::HKLM\System\CurrentControlSet\Control\Session Manager\Environment" - $OldPath = (Get-ItemProperty -Path "$Reg" -Name PATH).Path - "OldPath: $OldPath" - if(-Not $OldPath.Contains($AddedLocation)) { - $NewPath= $OldPath + ';' + $AddedLocation - Set-ItemProperty -Path "$Reg" -Name PATH -Value $NewPath - $UpdatedPath = (Get-ItemProperty -Path "$Reg" -Name PATH).Path - "UpdatedPath: $UpdatedPath" - } - - refreshenv - buildVS "$slnPath\PartsUnlimited.sln" -nuget $true -clean $false - Remove-Item $slnPath\src\PartsUnlimitedWebsite\node_modules -Force -Recurse - buildVS "$slnPath\PartsUnlimited.sln" -nuget $true -clean $true - } -ComputerName $env:COMPUTERNAME -Credential $credential | Out-File $LogFile -Append -} - -#A few more settings that I like but are not required for the PartsUnlimitedHOL -if ($Extras){ - "Configuring Extras" | Out-File $LogFile -Append - Invoke-Command -ScriptBlock { - # Show file extensions (have to restart Explorer for this to take effect if run maually - Stop-Process -processName: Explorer -force) - Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name HideFileExt -Value "0" - - Set-TimeZone -Name "Eastern Standard Time" - - Enable-WindowsOptionalFeature –online –featurename IIS-WebServerRole - - } -ComputerName $env:COMPUTERNAME -Credential $credential | Out-File $LogFile -Append -} - -Disable-PSRemoting -Force diff --git a/backup/azure-rm/scripts/SetupChocolatey.ps1 b/backup/azure-rm/scripts/SetupChocolatey.ps1 deleted file mode 100644 index 139124e..0000000 --- a/backup/azure-rm/scripts/SetupChocolatey.ps1 +++ /dev/null @@ -1,64 +0,0 @@ -param([Parameter(Mandatory=$true)][string]$chocoPackages) -Write-Output $chocoPackages -cls - -New-Item "c:\choco" -type Directory -force | Write-Output -$LogFile = "c:\choco\Script.log" -$chocoPackages | Out-File $LogFile -Append - -# Get username/password & machine name -$userName = "artifactInstaller" -[Reflection.Assembly]::LoadWithPartialName("System.Web") | Out-Null -$password = $([System.Web.Security.Membership]::GeneratePassword(12,4)) -$cn = [ADSI]"WinNT://$env:ComputerName" - -# Create new user -$user = $cn.Create("User", $userName) -$user.SetPassword($password) -$user.SetInfo() -$user.description = "Choco artifact installer" -$user.SetInfo() - -# Add user to the Administrators group -$group = [ADSI]"WinNT://$env:ComputerName/Administrators,group" -$group.add("WinNT://$env:ComputerName/$userName") - -# Create pwd and new $creds for remoting -$secPassword = ConvertTo-SecureString $password -AsPlainText -Force -$credential = New-Object System.Management.Automation.PSCredential("$env:COMPUTERNAME\$($username)", $secPassword) - -# Ensure that current process can run scripts. -"Enabling remoting" | Write-Output -"Enabling remoting" | Out-File $LogFile -Append -Enable-PSRemoting -Force -SkipNetworkProfileCheck - -#"Changing ExecutionPolicy" | Out-File $LogFile -Append -Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force - -# Install Choco -"Installing Chocolatey" | Out-File $LogFile -Append -$sb = { iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1')) } -Invoke-Command -ScriptBlock $sb -ComputerName $env:COMPUTERNAME -Credential $credential | Out-Null - -"Disabling UAC" | Out-File $LogFile -Append -$sb = { Set-ItemProperty -path HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System -name EnableLua -value 0 } -Invoke-Command -ScriptBlock $sb -ComputerName $env:COMPUTERNAME -Credential $credential - -#"Install each Chocolatey Package" -$chocoPackages.Split(";") | ForEach { - $command = "cinst " + $_ + " -y -force" - $command | Out-File $LogFile -Append - $sb = [scriptblock]::Create("$command") - - "Installing $_" | Out-File $LogFile -Append - # Use the current user profile - Invoke-Command -ScriptBlock $sb -ArgumentList $chocoPackages -ComputerName $env:COMPUTERNAME -Credential $credential | Out-Null -} - -Disable-PSRemoting -Force - -# Delete the artifactInstaller user -$cn.Delete("User", $userName) - -# Delete the artifactInstaller user profile -gwmi win32_userprofile | where { $_.LocalPath -like "*$userName*" } | foreach { $_.Delete() } \ No newline at end of file diff --git a/backup/continuous-deployment/README.md b/backup/continuous-deployment/README.md deleted file mode 100644 index 53a3df9..0000000 --- a/backup/continuous-deployment/README.md +++ /dev/null @@ -1,156 +0,0 @@ -Avanade DevOps HOL - Continuous Deployment with Visual Studio Release Management -==================================================================================== -In this lab, you have an example MVC application, committed to a Git repository in Visual Studio Team Services (VSTS) and a Continuous Integration build that builds the app and runs unit tests whenever code is pushed to the master branch. Now you want to set up Release Management (a feature of Visual Studio Team Services) to be able continuously deploy the application to an Azure Web App. Initially the app will be deployed to a dev deployment slot. The staging slot will require and approver before the app is deployed into it. Once an approver approves the staging slot, the app will be deployed to the production site. - -### Pre-requisites: ### -- Complete [Continuous Integration](../continuous-integration/README.md) lab. - - -### Tasks Overview: ### - -**1. Add ARM Template to Solution:** In this step, add a deployment project to the solution. This will create an ARM template which will be used to create the App Service and web site in Azure for deploying the solution into. - -**2. Create Service Endpoint:** In this step, create a service endpoint in VSTS that will allow you to connect to the Azure subscription and use ARM templates to create the deployment environments. - -**3. Create a VSTS Release:** In this step, the release will be created that will configure the deployment environment in Azure and deploy the website to multiple environments. - - -### I. Add ARM Template to Solution -1. Open the DevOpsHOL solution, that was created in the [Getting Started](../getting-started/README.md) lab, in Visual Studio. Right click on the solution in Solution Explorer and choose **Add project...** - -![]() - -2. Choose a Cloud -> Azure Resource Group project type and name it DevOpsHOL.Deployment. On the next dialog, choose the **Web App** template. - -![]() - -3. This will create a new project in the solution that contains the files for deployment to Azure. The **Website.json** file will be used to create the deployment environments in task III below.
-NOTE: There are a number of ways that the ARM template could have been created and added to the solution. However, since a deployment project also automatically creates a PowerShell script for deployment and a template parameters file, this can also be used to manually deploy the solution if desired (but not in this lab). - -4. Open the **WebSite.json** file and replace the contents with the content of(https://raw.githubusercontent.com/nagroma/DevOpsHOL/master/source/deploy/azuredeploy.json). This adds additional features to the deployment such as deployment slots which will be used later in the lab. - -5. Open the **WebSite.parameters.json** file and replace the contents with the content of(https://raw.githubusercontent.com/nagroma/DevOpsHOL/master/source/deploy/azuredeploy.parameters.json). This matches the parameters with the azuredeploy.json file. - -4. Check in the solution and push to VSTS (Team Explorer -> Changes -> Commit All and Push). This checks in the ARM template into source control both locally and in the VSTS repository. This will also trigger a new build (check to make sure this happened and was successful). - -### II. Create Service Endpoint -1. Go to your **account’s homepage**: - https://\.visualstudio.com -2. Select the DevOpsHOL team project that was created in the [Getting Started](../getting-started/README.md) lab. -This will take you to the project dashboard page. Click on the Setting icon (gear) in the project menu bar and select Services. Choose **New Service Endpoint** and select **Azure Resource Manager** from the drop down. - -![]() - -3. This will open the **Add Azure Resource Manager Service Endpoint** dialog. Set the Connection Name to "DevOpsHOLDeployment", choose your subscription and click **OK**.
-**NOTE:** You will need to allow popups in the browser, otherwise the popup to authenticate to Azure will fail to appear. - -![]() - -4. Next sign in to your Azure account to complete the endpoint creation process. - -### III. Create Release -1. In the DevOpsHOL project in VSTS, navigate to **Build and Release** -> **Releases** and choose the + icon to create a new release definition. - -![]() - -2. Near the top of the **Select a Template** panel, choose **Empty process**. As in the previous lab, you normally would choose a template that closely matches the type of deployment you are doing (or import an existing template), but for this lab we are building it from scratch to see more of the process. - -3. Near the top of the page next to **New Release Definition**, click on the pencil icon and rename the release to **DevOpsHOL-CI - CD** - -4. On the **Environment** panel, rename the environment to Dev (this will be the development integration environment). - -5. Click on the Artifacts +Add link and select the DevOpsHOL-CI as the Source. Leave the version at "Latest" so the release will deploy the latest build. Click Add button to add the build to the release artifacts list. - -6. In the Environments box, click on the 1 phase, 0 task link under the Dev environment name. This will open a panel to allow adding of tasks to the release. - -6. Click on the **Agent phase** accordion item and review the options for this phase of the release. Leave these settings as is for now. Click on the + icon to the right of Agent phase and add the following two tasks: **Azure Resource Group Deployment** and **Azure App Service Deploy**. - -7. Click on the **Azure Deployment:Create Or Update Resource Group...** accordion and fill out the settings as follows: ->+ Azure Subscription: DevOpsHOLDeployment ->>+ this is the service endpoint set up earlier ->+ Resource Group: $(ResourceGroupName) ->>+ this is a variable set up in the next step ->+ Location: $(SiteLocation) ->+ Template: $(System.DefaultWorkingDirectory)/DevOpsHOL-CI/drop/DevOpsHOL.Deployment/WebSite.json ->+ Override Template Parameters: Click on the ellipsis to the right of the edit box and enter the following names and values:
-NOTE: ARM parameters are case sensitive so the name much match the case of the parameters in the ARM template. -```PowerShell -appServicePlanName $(AppServicePlan) -siteName $(WebSiteName) -siteLocation $(SiteLocation) -workerSize "0" -``` - -![]() - ->>+ You will shortly define the values for each parameter, like `$(siteName)`, in the Environment variables. ->>+ **Note**: If you open the WebSite.parameters.json file, you will see placeholders for these parameters. You could hard code values in the file instead of specifying them as "overrides". Either way is valid. If you do specify values in the parameters file, remember that in order to change values, you would have to edit the file, commit and create a new build in order for the Release to have access the new values. - -8. Click on the **Azure App Service Deploy:** accordion and fill out the settings as follows: ->+ Azure Subscription: DevOpsHOLDeployment ->>+ The name of the endpoint created earlier ->+ App Service name: $(WebSiteName) ->+ Deploy to slot: Checked ->+ Resource group: $(ResourceGroupName) ->+ Slot: Dev - -9. Click **Variables** link and add the following variables and values. - * **AppServicePlan**: DevOpsHOL *(or any name you would like)* - * **ResourceGroupName**: DevOpsHOL *(or any name you would like)* - * **SiteLocation**: *Choose a valid Azure location such as "centralus"* - * **WebsiteName**: *Unique name of the website in Azure* - - > **Note**: Use a unique value for your WebsiteName by adding something custom at the end like your initials. Example for WebsiteName : devopshol-am - -10. Click **Save** and then click **Release -> Create Release**, click **Create**. Inside the Green notification bar, click on the *Release-1* link to be taken to a page to show the release progress. If this page doesn't refresh automatically, periodically refresh the page until the release succeeds (if the release fails, review the error message and go back and make adjustments and re-release). - -11. Open a browser page and navigate to the website in Azure. The url will depend on the $(WebsiteName). For example, if the $(WebsiteName) was devopshol-am, then navigate to https://devopshol-am-dev.azurewebsites.net/.
-NOTE: The website address can be seen on the Azure portal on the WebApp - -![]() - -12. Once the initial deployment has been verified, go back and edit the release to add staging and production releases. ->+ Navigate to Build and Release -> Releases ->+ Hover over the **DevOpsHOL-CI - CD** Release Definition and right click on the ellipse (...) and select the Edit menu option. ->+ Hover over the **Dev** environment and select the **Clone** link. - -![]() - ->+ Rename **Copy of Dev** to **Stage** ->+ Click on the **1 phase, 2 tasks** link in the Stage environment. ->+ Remove the **Azure Deployment:Create Or Update Resource Group** task (no need to re-run the ARM template) ->+ Click on the **Azure App Service Deploy: $(WebSiteName)** task and edit the Slot to change **Dev** to **Staging**. ->+ Save ->+ Click on the **Pipeline** link and repeat the above steps to create a clone of **Staging** called **Prod** ->>+ Un-check the **Deploy to slot** which will make the release deploy to the production slot. ->+ Save ->+ Release -> Create Release -> Create ->>+ This wil create a release that is deployed to Dev, Stage and Prod -13. Once the release completes successfully to all three environments, verify that the application has been deployed to all three environments ->+ https://\-dev.azurewebsites.net/ ->+ https://\-staging.azurewebsites.net/ ->+ https://\.azurewebsites.net/ -14. By default, the Release process is manual. Go back to the **Pipeline** tab and click on the lightning bolt icon in the Artifacts panel and enable the Continuous deployment trigger -15. Now go back into Visual Studio and make a change to the code that will be visible in the application. Observe the status of the Build and Release and verify that all the items configured in the CI and CD labs complete successfully.
-NOTE: If the Release fails with error "ERROR_FILE_IN_USE", execute [these steps](#errors). - -# Next steps - -In this lab you created a series of environments using an Azure ARM template and automatically deployed to each of these environments. - -1. Next do the [Feature Flag](../feature-flag/README.md) lab - -2. Explore other options. Here are some additional tasks that you may want to try to expand your knowledge further. ->+ By default, the releases automatically move from environment to environment upon successful deployment to the previous deployment. Go back to the release definition -and modify the settings to require approvals prior to deploying to the next environment. ->+ Modify the ARM template (Website.json) to modify some of the properties (e.g. change the worker size or tier; modify the app settings per slot) ->+ Add additional variables to the build or release to make them more dynamic (i.e. less dependent on hard coded names) ->+ Use the ARM template and the Visual Studio deployment and publish process to create an individual Azure environment in addition to the Dev, Stage and production environments. ->+ Delete the DevOpsHOL resource group and re-release the same build to make sure that the environments can be dynamically re-created. ->+ Export the build and release definitions. Check them into source control. Delete these definitions and restore from the source files. - -# Common errors and solutions - -- ERROR_FILE_IN_USE: Web Deploy cannot modify the file 'DevOpsHOL.dll' on the destination because it is locked by an external program. - > Solution: Open the Release definition Editor and go to the Additional Deployment Options for every environment (Dev/Stage/Prod). Change the values to the following:
- ![]() \ No newline at end of file diff --git a/backup/continuous-deployment/media/CD1.png b/backup/continuous-deployment/media/CD1.png deleted file mode 100644 index 5e8e3ba1c755cd77b09b480cb371fbf4582868db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96690 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

dd&sbFWEcHxlAAYE(i`^gFZ+74Z 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 diff --git a/backup/continuous-deployment/media/CD3.png b/backup/continuous-deployment/media/CD3.png deleted file mode 100644 index bc3b0ce34f42fad84f9677ccfa02e37703dd9d41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50353 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 P;73+cQKC}JAmIN21Xz@Y diff --git a/backup/continuous-deployment/media/CD4.png b/backup/continuous-deployment/media/CD4.png deleted file mode 100644 index 555d816648b082a0097810bd0265bc3bd83d7f03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53590 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 F{{x*@npgk; diff --git a/backup/continuous-deployment/media/CD5.png b/backup/continuous-deployment/media/CD5.png deleted file mode 100644 index 58cb337eca10b43c3623e0f65755d7f0f423dab7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21670 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 QzvBexXc$7O)Srd@4{nZvg#Z8m diff --git a/backup/continuous-deployment/media/CD6.png b/backup/continuous-deployment/media/CD6.png deleted file mode 100644 index 07ba9a72cb00b84d4cfff7b5cd9949cff350d2a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14073 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 diff --git a/backup/continuous-deployment/media/CD7.png b/backup/continuous-deployment/media/CD7.png deleted file mode 100644 index 27a1c84957fb056ae4b272d77b4a9d811f7fb588..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58387 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

2#h0= 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 U3fmORLc-SxMOB5jNAz$1Kbz^ZH~;_u diff --git a/backup/continuous-deployment/media/CD8.png b/backup/continuous-deployment/media/CD8.png deleted file mode 100644 index a86f73eaf25f72376791ac4fd299aaa151c3211b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14516 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 diff --git a/backup/continuous-deployment/media/CD_ERROR_FILE_IN_USE.png b/backup/continuous-deployment/media/CD_ERROR_FILE_IN_USE.png deleted file mode 100644 index 098987c170ceb5577cf93370f6845cee675ec795..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12536 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 - [Sign up for Visual Studio Team Services](https://www.visualstudio.com/en-us/docs/setup-admin/team-services/sign-up-for-visual-studio-team-services) - - -## Tasks Overview: ## - -**1. Create Continuous Integration Build:** In this step, you will create a build definition that will be triggered every time a commit is pushed to your repository in Visual Studio Team Services. - -**2. Test the CI Trigger in Visual Studio Team Services:** In this step, test the Continuous Integration build (CI) build we created by changing code in the Parts Unlimited project with Visual Studio Team Services. - - -## I. Create Continuous Integration Build - -A continuous integration build will give us the ability check whether the code -we checked in can compile and will successfully pass any automated tests that we -have created against it. - -1. Go to your **account’s homepage**: - https://\.visualstudio.com -2. Select the DevOpsHOL team project that was created in the [Getting Started](../getting-started/README.md) lab. -This will take you to the project dashboard page. Click on "Set up Build". - -![]() - -3. Select the **Empty process** link near the top to create a build definition. ->**Note:** Normally you would just select one of the available templates that is closest to the type of solution you are -deploying but for this lab we want to walk through a few extra steps to allow you to become more familiar with the process. - - -4. After clicking the **Empty process** link you'll need to fill out the build definition starting with the Process task and it's children. ->- Process
- Name: **DevOpsHOL-CI**
- Agent queue: **Hosted VS2017**
-> **Note:** This will use a hosted (i.e. built in) build server. -For more flexibility in the build (and for a more in depth learning experience), a private agent can be configured and used following the steps in the [Private Agent](../private-agent/README.md) lab. This is not necessary for this lab, but you can do this if you are up for the adventure. ->- Process -> Get Sources
- From: This project
- Repository: DevOpsHOL -5. To the right of the **Phase 1** item click on the + sign and add the following tasks:
- For each of the tasks, the settings for that task (if different than the default) are listed below
- (*Hint: use the search box to filter in order to find the tasks in the list*) ->- NuGet Tool Installer (Use NuGet 4.3.0) ->- NuGet (NuGet restore) ->- Visual Studio Build
- MSBuild Arguments: /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\\\"
- Platform: $(BuildPlatform)
- Configuration: $(BuildConfiguration) ->- .NET Core
- Display name: Test Assemblies
- Command: test
- Project(s): **/\*test\*.csproj
- Arguments: -l "trx"
- Continue on error: Checked
->- Publish Test Results
- Display name: Publish Test Result
- Test result format: VSTest
- Test results files: **\\*.trx
- Search folder: $(System.DefaultWorkingDirectory)
->- Publish Build Artifacts
- Path to publish: $(build.artifactstagingdirectory)
- Artifact name: drop
- -![]() - -6. Click on the **Variables** tab and add the following Variables: ->- **BuildConfiguration** with a value of **release** ->- **BuildPlatform** with a value of **any cpu** -7. Click on the **Triggers** tab and verify that the **Continuous integration (CI)** option is selected to build the solution every time a change is checked in. Also make sure the filter includes the appropriate branch (in this case **master** and **Batch Changes** checkbox is unchecked -8. Click on the **Options** tab and change the following settings ->- Build number format: $(date:yyyyMMdd)$(rev:.r) ->- Automatically link new work in this build: Enabled -9. Choose **Save & queue** to save the build definition and manually trigger the build. - -![]() - -10. Click on the **Build Number**, and you should get the build in progress. Here you can also see the commands being logged to console and the current steps that the build is on. - -![]() - - -## II. Test the CI Trigger in Visual Studio Team Services - -We will now test the **Continuous Integration build (CI)** build we created by changing code in the project with Visual Studio. - -1. Go back to the DevOpsHOL solution in Visual Studio and navigate to the **/Controllers** open the **HomeController.cs** file for editing. -2. Find the ViewBag.Message within the About() method and change the string to something different such as "My description page.". - -![]() - -3. Build and test the solution locally. - -![]() - -4. Once you have validated the change locally, **Commit All and Push**. This will check in the changes to the local Git repository and push the change to the VSTS Git repository. - -![]() - -5. Go back to the VSTS DevOpsHOL project and verify that another build has been automatically started. Once the build is complete, check the build status and review the results. If the build failed on the Test step, it might have been because you didn't run and fix the unit tests before checking in. Go back and get the unit tests working and retry. - -![]() - -## Next steps ## ----------- - -In this lab, you learned how to push new code to Visual Studio Team Services, setup a Git repo and create a Continuous -Integration build that runs when new commits are pushed to the master branch. -This allows you to get feedback as to whether your changes made breaking syntax -changes, or if they broke one or more automated tests, or if your changes are a okay. - -Next do the [Continuous Deployment](../continuous-deployment/README.md) lab \ No newline at end of file diff --git a/backup/continuous-integration/media/CI1.png b/backup/continuous-integration/media/CI1.png deleted file mode 100644 index e96bc09ac9775e432dde6ab4172c047be6b0f2e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31641 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
ea`2PQ9xu)GKBFYkLU4>`X7 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 bR9fiJ?Tgw>{{XoL4UL+z*3+^lmhb-!ixW`E diff --git a/backup/continuous-integration/media/CI2.png b/backup/continuous-integration/media/CI2.png deleted file mode 100644 index b4d0d181e29307428e28a14e6420096f71f758e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54196 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

KV@AsSMEUdwa>mjutR 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 ok$4 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 diff --git a/backup/continuous-integration/media/CI3.png b/backup/continuous-integration/media/CI3.png deleted file mode 100644 index 7f31ddd0d050f27e01d1a411ad1c14d1faac5661..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11778 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 diff --git a/backup/continuous-integration/media/CI4.png b/backup/continuous-integration/media/CI4.png deleted file mode 100644 index 9588adf4187e3611ad3756be4553446fb187f5db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69413 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 bZ%}C7JC8;KWuLsh2Q-xz>I&fJ=I{R>seBfx diff --git a/backup/continuous-integration/media/CI6.png b/backup/continuous-integration/media/CI6.png deleted file mode 100644 index 8be2eb34818901e16ceec973dea7254ad6cdb105..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15780 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 JijO8i{|8)o{l)+Q diff --git a/backup/continuous-integration/media/CI7.png b/backup/continuous-integration/media/CI7.png deleted file mode 100644 index 03752dd65e5b48c4e987a6dfaf664e7e84f30142..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23081 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ν-Cl17t^jkjpN{)+6a&u}NSn{+CMg6Fbn*#1 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 Zr5L=ToF1*O1EBz#mb&hpVuWSb{{SNJgrWcd diff --git a/backup/extras/notes b/backup/extras/notes deleted file mode 100644 index 5ae4b6d..0000000 --- a/backup/extras/notes +++ /dev/null @@ -1,51 +0,0 @@ -To add Application Settings to a web app in an ARM template add - -To add the ability to change the "Traffic Routing" (used to be called "Testing in Production") percentage of requests, add the following to the Microsoft.Web/sites slotselement - - "properties":{ - "serverFarmId":"[parameters('hostingPlanName')]", - "siteConfig": { - "appSettings": [ - { "name": "Foo", "value": "abc" }, - { "name": "Bar", "value": "122" } - ] - }, - }, - "resources":[ - { - "apiVersion": "2015-04-01", - "name": "slotconfignames", - "type": "config", - "dependsOn": [ - "[resourceId('Microsoft.Web/Sites', parameters('siteName'))]" - ], - "properties": { - "connectionStringNames": [ "ConnString1" ], - "appSettingNames": [ "Foo" ] - } - } - ] - -More information on this can be found at [A/B Testing and Testing In Production with Azure Web Apps](https://www.hanselman.com/blog/ABTestingAndTestingInProductionWithAzureWebApps.aspx) - "resources": [ - { - "apiVersion":"2015-04-01", - "name":"web", - "type":"config", - "dependsOn":[ - "[resourceId('Microsoft.Web/Sites/Slots', parameters('siteName'), 'Staging')]" - ], - "properties":{ - "experiments": { - "rampUpRules": [ - { - "actionHostName": "deploydemo778.azurewebsites.net", - "reroutePercentage": 33, - "name": "production" - } - ] - }, - "autoSwapSlotName": "production" - } - } - ] diff --git a/backup/feature-flag/README.md b/backup/feature-flag/README.md deleted file mode 100644 index 9e02a07..0000000 --- a/backup/feature-flag/README.md +++ /dev/null @@ -1,340 +0,0 @@ -Avanade DevOps HOL - Feature Flag for Web Application -==================================================================================== -Feature flags provide the ability to turn features of your application on and off at a moments notice, no code deployments required. In this lab, we will add code to the project to demonstrate the use of feature flags to allow selectively turning on and off features to expose functionality. - -## Pre-requisites: ## -- Complete [Getting Started](../getting-started/README.md) hands on lab. - -## Tasks Overview ## -**1. Add the backend code required for feature flags** - in this task we will add in the required code to enable feature flags for our application. - -**2. Create a new page to enable/disable features** - in this task we will add a page for users to opt in for specific features. - -**3. Update the website to use the feature flags** - in this task we will add new features to the website and leverage the feature flags - -**4. Try it out!** - in this task we will try out our feature flag to ensure it's working as expected. - -## I: Add the backend code required for feature flags ### - -**1.** Open the DevOpsHOL solution created previously from [Getting Started](../getting-started/README.md) hands on lab. - -**2.** Create a folder for feature flag related classes. Right click **DevOpsHOL project** -> **Add** -> **New Folder**, named **'FeatureFlag'**. - -![]() - -**3.** Create a feature flag class, this will represent a feature flag in the application. Right click on the newly created **FeatureFlag** folder -> **'Add'** -> **'Class...'**, name the new class **'Feature.cs'** - -![]() - -Add the following properties for the Feature.cs class - -```csharp -public class Feature -{ - public string Key { get; set; } - public string Description { get; set; } - public bool Active { get; set; } -} -``` -- **Key** is the unique identifier for that particular feature flag. -- **Description** is a brief description of what the feature flag is for. -- **Active** is the current state for the feature flag. - -**4** Create a simple feature manager class. This will be used later on to toggle features on and off. Under the same **FeatureFlag** folder create a new class called **FeatureManager.cs** - -```csharp -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DevOpsHOL.FeatureFlag -{ - public class FeatureFlag - { - public const string ContactMap = "Contact-Map"; - public const string FeatureX = "FeatureX"; - } - public class FeatureManager - { - public static IEnumerable Features = new List - { - new Feature - { - Description = "Hide/Show Map on Contact Page", - Key = FeatureFlag.ContactMap, - Active = true - }, - new Feature - { - Description = "Hide/Show Feature X", - Key = FeatureFlag.FeatureX, - Active = false - } - }; - - public static bool GetStatusByKey(string key) - { - if (string.IsNullOrEmpty(key)) - throw new ArgumentNullException(nameof(key)); - - Feature feature = Features.First(f => f.Key == key); - - if (feature == null) - throw new MissingFieldException(nameof(key)); - - return feature.Active; - } - - public static async Task ChangeFeatureToggles(string[] selectedItems) - { - if (selectedItems == null) - throw new ArgumentNullException(nameof(selectedItems)); - - foreach (Feature feature in Features) - { - feature.Active = selectedItems.Contains(feature.Key); - } - } - - } -} -``` -- **Features** is a list of features used with the application. In this case, to Hide/Show Map on Contact Page -- **GetStatusByKey** is a method used to get the current status for a given user for a particular feature key. -- **ChangeFeatureToggles** takes in a list of selected feature toggles. If the key presents that status will be turned on. - -*Note: In a real world implementation, these flags will be stored in a database. For simplicity's sake these are stored in memory. This also gives the ability to extenalize the on/off switch for features* - -## II. Create a new page to enable/disable features ## -Now we need to create an administration view to toggle these features on and off from the site. - -**1.** In order to create a new page on the site, we need to create a ViewModel that will represent the data used on that page. - -Under the **Models** folder, create a new class called **FeaturesViewModel.cs** - -![]() - -```csharp -using DevOpsHOL.FeatureFlag; -using System.Collections.Generic; - -namespace DevOpsHOL.Models -{ - public class FeaturesViewModel - { - public IEnumerable AvailableFeatures { get; set; } - } -} -``` -- **AvailableFeatures** is the list of features used with the application. - -**2.** Right click **Controllers** folder -> click **Add** -> click **Controller...** -> select **MVC Controller - Empty** -> enter Controller Name: **FeaturesController** then click **Add** -```csharp -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using DevOpsHOL.Models; -using DevOpsHOL.FeatureFlag; - -namespace DevOpsHOL.Controllers -{ - public class FeaturesController : Controller - { - public IActionResult Index() - { - return View(new FeaturesViewModel { AvailableFeatures = FeatureManager.Features }); - } - - [ValidateAntiForgeryToken] - [HttpPost] - public async Task SaveFeatureToggles(string[] selectedItems) - { - await FeatureManager.ChangeFeatureToggles(selectedItems); - - return RedirectToAction("Features", "Home"); - } - } -} -``` - -**3:** Under **'Views'** folder, create a new folder called **'Features'** - -![]() - -**4:** Create a new View under **'Features'** , named **'Index'**, specify Template, Model class, and layout page. - -![]() - -**5.** Update the newly created Views->Features->Index.cshtml file with the following content. - -```csharp -@model DevOpsHOL.Models.FeaturesViewModel - -@{ - ViewData["Title"] = "Features"; - Layout = "~/Views/Shared/_Layout.cshtml"; -} - -

Features

- -
- -@using (Html.BeginForm("SaveFeatureToggles", "Features", FormMethod.Post)) -{ - - - - - - - - - @foreach (var item in Model.AvailableFeatures) - { - - - - - - } -
-

Description

-
-

Key

-
-

Active

-
- @item.Description - - @item.Key - -
- @Html.AntiForgeryToken() - -
-
- -
-} - -
- -@section Scripts { - @{await Html.RenderPartialAsync("_ValidationScriptsPartial");} -} -``` - -**6.** Write unit tests to validate the newly added Features functionality. - -**7.** Build and test the solution and verify that it compiles without error.
- - -## III. Update the website to use the feature flags ## -Now that we have the basics of feature management. Let's add a new feature to display a map section on Contact page, and using the feature flag to control the display. - -**1:** Create a ViewModel that will represent the data used on the Contact page. - -Under the **'Models'** folder, create a new class called **'ContactViewModel.cs'** - -![]() - -```csharp -namespace DevOpsHOL.Models -{ - public class ContactViewModel - { - public bool IsMapFeatureActive { get; set; } - } -} -``` -- **IsMapFeatureActive** is the feature flag used to control display of the new feature. - -**2:** Open **HomeController.cs** under **'Controllers'** folder, add a using statement for **DevOpsHOL.FeatureFlag** and update the **Contact()** method to pass **ContactViewModel** to the view - -```csharp -using DevOpsHOL.FeatureFlag; - - - public IActionResult Contact() - { - ViewData["Message"] = "Your contact page."; - - return View(new ContactViewModel { IsMapFeatureActive = FeatureManager.GetStatusByKey(FeatureFlag.FeatureFlag.ContactMap) }); - } -``` - -**3:** Open **'Contact.cshtml'** under folder **'Views'** -> **'Home'**, add new features to the page with flag for toggling. - -```csharp -@model ContactViewModel -@{ - ViewData["Title"] = "Contact"; -} -

@ViewData["Title"]

-

@ViewData["Message"]

- -
- One Microsoft Way
- Redmond, WA 98052-6399
- P: - 425.555.0100 -
-@if (Model.IsMapFeatureActive) -{ -

- Map -

-
- - - - -} -
- Support: Support@example.com
- Marketing: Marketing@example.com -
- - -Toggle Features -``` -- It adds the newly created **ContactViewModel** to make the feature flag accessible in the view -- Uses the **Model.IsMapFeatureActive** to toggle the display of the map -- Adds a link to the Features page for demonstration purpose. In a real world implementation, this is usually part of the admin function. - - -### IV. Try it out! ### - -The scenario demonstrates a broken change introduced by the new map feature. This would often require code rollback in production. Thanks to the feature flag, we can simply go to the features page to turn off the feature, to minimize the impact to end user, and the turn it back once fixed. - -**1:** Now launch the site. You can do this but pressing F5 or hitting the button shown below in Visual Studio. - -![]() - -**2:** Navigate to Contact page, to observe newly added Map feature, and a error in display the map. - -![]() - -**3:** Navigate to Features page by click on the **Toggle Features** link on **Contact** page, and switch off the - -![]() - -Note: This would be part of admin function in real life. - -**4:** Navigate back to Contact page, and refresh the page to observe the map is no longer displayed on the page. - -![]() - - - - - diff --git a/backup/feature-flag/media/add-contact-view-model.PNG b/backup/feature-flag/media/add-contact-view-model.PNG deleted file mode 100644 index d53ff1e9835223376b6b1990e077a5aa8cdce318..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15391 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 AuK)l5 diff --git a/backup/feature-flag/media/add-feature-class.PNG b/backup/feature-flag/media/add-feature-class.PNG deleted file mode 100644 index 7e93743f105b725af7281e536b4a0ed32630cc27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13802 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 diff --git a/backup/feature-flag/media/add-features-index-view.PNG b/backup/feature-flag/media/add-features-index-view.PNG deleted file mode 100644 index 8e09080da92f1487dccdadfa371a13b44097c8e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15775 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 T!URz2Kp@Tgx@x5=w$J|;)sn5S diff --git a/backup/feature-flag/media/add-features-view-model-class.PNG b/backup/feature-flag/media/add-features-view-model-class.PNG deleted file mode 100644 index a6bc6d45a03190a089c6912ecfd10c3231df41d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14771 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 diff --git a/backup/feature-flag/media/launch-site.PNG b/backup/feature-flag/media/launch-site.PNG deleted file mode 100644 index 1307a1d279a29b2e0703449000c11e73e7d748ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13056 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 diff --git a/backup/feature-flag/media/switch-feature.png b/backup/feature-flag/media/switch-feature.png deleted file mode 100644 index bf89b70a06f13fbb10354164b9acf052fcda9915..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8479 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 diff --git a/backup/private-agent/README.md b/backup/private-agent/README.md deleted file mode 100644 index 3355c3c..0000000 --- a/backup/private-agent/README.md +++ /dev/null @@ -1,35 +0,0 @@ -Avanade DevOps HOL - Private Agent configuration with Visual Studio Team Services -==================================================================================== -In this lab we configure a private agent for use in building the solution created in the [Continuous Integration](../continuous-integration/README.md) lab. -For more information on using private agents for VSTS builds, see the [Build and Release Agents](https://docs.microsoft.com/en-us/vsts/build-release/concepts/agents/agents) documentation. - -### Pre-requisites: ### -- Complete [Getting Started](../getting-started/README.md) task. -- An active Visual Studio Team Services account.
- [Sign up for Visual Studio Team Services](https://www.visualstudio.com/en-us/docs/setup-admin/team-services/sign-up-for-visual-studio-team-services) - - -### I. Configure Private Build Agent - -When choosing the Agent Queue for the build process (such as from the [Continuous Integration](../continuous-integration/README.md) lab), click on the **Manage** link above the **Agent queue** dropdown. -Otherwise, you can click on the Settings (gear) icon and choose **Agent Queues** to get to the Agent Queues page for the project.
->Note: Private build agents need to be accessible from VSTS so it is recommended to install them on a "build" VM within Azure. For the HOL, if you are using an Azure VM for the development environment, then this same VM can be used for running the private build agent. - 1. Open your VSTS portal (https://*\*.visualstudio.com) in another browser tab. - 2. Navigate to the DevOpsHOL project created earlier. - 3. Navigate to Personal access tokens (select your account picture, then Security, or navigate to https://youralias.visualstudio.com/_details/security/tokens) - 4. Create a new token with description **DevOpsTraining**, and copy the personal access token somewhere for use later. - 5. Return to the previous Agent Queue browser tab. Click on **Download agent**. - Once the Agent zip file is downloaded, follow the instructions on the agent download page to unzip and configure the agent on the target machine using the configuration options below. - >+ Enter server URL > https://*\*.visualstudio.com - >+ Enter authentication type (press enter for PAT) > - >+ Enter personal access token > *use the access token saved earlier* - >+ Enter agent pool (press enter for default) > - >+ Enter agent name > DevOpsBuildDeploy *(or use the default which is the computer name)* - >+ Enter work folder (press enter for _work) > - >+ Enter run agent as service? (Y/N) (press enter for N) > Y - >+ Enter User account to use for the service (press enter for NT AUTHORITY\NETWORK SERVICE) > *admin account on target computer* - >+ Enter Password for the account > *admin account password* - 6. Return to the build definition and choose the Default Agent Queue instead of Hosted VS2107. - - - diff --git a/backup/source/deploy/azuredeploy.json b/backup/source/deploy/azuredeploy.json deleted file mode 100644 index 847628f..0000000 --- a/backup/source/deploy/azuredeploy.json +++ /dev/null @@ -1,173 +0,0 @@ -{ - "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "siteName": { - "type": "string" - }, - "appServicePlanName": { - "type": "string" - }, - "siteLocation": { - "type": "string" - }, - "workerSize": { - "type": "string", - "allowedValues": [ - "0", - "1", - "2" - ], - "defaultValue": "0" - }, - }, - "resources": [ - { - "apiVersion": "2015-08-01", - "name": "[parameters('appServicePlanName')]", - "type": "Microsoft.Web/serverfarms", - "location": "[parameters('siteLocation')]", - "sku": { - "name": "S1", - "tier": "Standard", - "capacity": 1 - }, - "properties": { - "name": "[parameters('appServicePlanName')]" - } - }, - { - "apiVersion": "2015-08-01", - "name": "[parameters('siteName')]", - "type": "Microsoft.Web/sites", - "location": "[parameters('siteLocation')]", - "dependsOn": [ - "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]" - ], - "properties": { - "serverFarmId": "[parameters('appServicePlanName')]" - }, - "resources": [ - { - "apiVersion": "2015-08-01", - "name": "web", - "type": "config", - "dependsOn": [ - "[resourceId('Microsoft.Web/Sites', parameters('siteName'))]" - ], - "properties": { - "phpVersion": "5.5", - "netFrameworkVersion": "v4.0", - "use32BitWorkerProcess": false, /* 64-bit platform */ - "webSocketsEnabled": true, - "alwaysOn": true, - "remoteDebuggingEnabled": true, - "remoteDebuggingVersion": "VS2013", - - "defaultDocuments": [ - "index.html", - "hostingstart.html" - ] - } - }, - { - "apiVersion": "2015-08-01", - "name": "appsettings", - "type": "config", - "dependsOn": [ - "[resourceId('Microsoft.Web/Sites', parameters('siteName'))]" - ], - "properties": { - "AppSettingKey1": "Some value" - } - }, - { - "apiVersion": "2015-08-01", - "name": "logs", - "type": "config", - "dependsOn": [ - "[resourceId('Microsoft.Web/Sites', parameters('siteName'))]" - ], - "properties": { - "applicationLogs": { - "fileSystem": { - "level": "Warning" - } - }, - "httpLogs": { - "fileSystem": { - "retentionInMb": 40, - "enabled": true - } - }, - "failedRequestsTracing": { - "enabled": true - }, - "detailedErrorMessages": { - "enabled": true - } - } - }, - { - "apiVersion": "2015-08-01", - "name": "slotconfignames", - "type": "config", - "dependsOn": [ - "[resourceId('Microsoft.Web/Sites', parameters('siteName'))]" - ], - "properties": { - "appSettingNames": [ "AppSettingKey1" ] - } - }, - { - "apiVersion": "2015-08-01", - "name": "Dev", - "type": "slots", - "location": "[parameters('siteLocation')]", - "dependsOn": [ - "[resourceId('Microsoft.Web/Sites', parameters('siteName'))]" - ], - "properties": { - }, - "resources": [ - { - "apiVersion": "2015-08-01", - "name": "appsettings", - "type": "config", - "dependsOn": [ - "[resourceId('Microsoft.Web/Sites/Slots', parameters('siteName'), 'Dev')]" - ], - "properties": { - "AppSettingKey1": "Some development value" - } - } - ] - }, - { - "apiVersion": "2015-08-01", - "name": "Staging", - "type": "slots", - "location": "[parameters('siteLocation')]", - "dependsOn": [ - "[resourceId('Microsoft.Web/Sites', parameters('siteName'))]" - ], - "properties": { - }, - "resources": [ - { - "apiVersion": "2015-08-01", - "name": "appsettings", - "type": "config", - "dependsOn": [ - "[resourceId('Microsoft.Web/Sites/Slots', parameters('siteName'), 'Staging')]" - ], - "properties": { - "AppSettingKey1": "Some staging value" - } - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/backup/source/deploy/azuredeploy.parameters.json b/backup/source/deploy/azuredeploy.parameters.json deleted file mode 100644 index 2173032..0000000 --- a/backup/source/deploy/azuredeploy.parameters.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "siteName": { - "value": "DevOpsHOL-site" - }, - "siteLocation": { - "value": "Central US" - }, - "workerSize": { - "value": "0" - }, - "appServicePlanName": { - "value": "DevOpsHOL-as" - } - } - } \ No newline at end of file diff --git a/backup/source/tests/HomeControllerTest.cs b/backup/source/tests/HomeControllerTest.cs deleted file mode 100644 index cc4a0fb..0000000 --- a/backup/source/tests/HomeControllerTest.cs +++ /dev/null @@ -1,50 +0,0 @@ -using DevOpsHOL.Controllers; -using Microsoft.AspNetCore.Mvc; -using Microsoft.VisualStudio.TestTools.UnitTesting; - -namespace DevOpsHOL.Tests -{ - [TestClass] - public class HomeControllerTest - { - [TestMethod] - public void Index() - { - // Arrange - HomeController controller = new HomeController(); - - // Act - ViewResult result = controller.Index() as ViewResult; - - // Assert - Assert.IsNotNull(result); - } - - [TestMethod] - public void About() - { - // Arrange - HomeController controller = new HomeController(); - - // Act - ViewResult result = controller.About() as ViewResult; - - // Assert - Assert.IsNotNull(result); - Assert.AreEqual("Your application description page.", result.ViewData["Message"]); - } - - [TestMethod] - public void Contact() - { - // Arrange - HomeController controller = new HomeController(); - - // Act - ViewResult result = controller.Contact() as ViewResult; - - // Assert - Assert.IsNotNull(result); - } - } -} diff --git a/backup/source/vsts/DevOpsHOL-CI - CD.json b/backup/source/vsts/DevOpsHOL-CI - CD.json deleted file mode 100644 index 0393194..0000000 --- a/backup/source/vsts/DevOpsHOL-CI - CD.json +++ /dev/null @@ -1,690 +0,0 @@ -{ - "source":2, - "id":6, - "revision":2, - "name":"DevOpsHOL-CI - CD", - "description":null, - "createdBy":{ - "id":"652d04a6-da7e-4ce3-b365-8cfed2574a7d", - "displayName":"Andrew Morgan", - "uniqueName":"nagroma@hotmail.com", - "url":"https://app.vssps.visualstudio.com/A94cbef75-cc36-4962-a500-fe681327dee5/_apis/Identities/652d04a6-da7e-4ce3-b365-8cfed2574a7d", - "imageUrl":"https://nagroma.visualstudio.com/_api/_common/identityImage?id=652d04a6-da7e-4ce3-b365-8cfed2574a7d&t=00000000-0000-0000-5056-df8f442cd508" - }, - "createdOn":"2017-11-15T19:42:25.530Z", - "modifiedBy":{ - "id":"652d04a6-da7e-4ce3-b365-8cfed2574a7d", - "displayName":"Andrew Morgan", - "uniqueName":"nagroma@hotmail.com", - "url":"https://app.vssps.visualstudio.com/A94cbef75-cc36-4962-a500-fe681327dee5/_apis/Identities/652d04a6-da7e-4ce3-b365-8cfed2574a7d", - "imageUrl":"https://nagroma.visualstudio.com/_api/_common/identityImage?id=652d04a6-da7e-4ce3-b365-8cfed2574a7d&t=00000000-0000-0000-5056-df8f442cd508" - }, - "modifiedOn":"2017-11-15T19:45:38.497Z", - "isDeleted":false, - "path":"\\", - "variables":{ - "AppServicePlan":{ - "value":"DevOpsHOL2" - }, - "ResourceGroupName":{ - "value":"DevOpsHOL2" - }, - "SiteLocation":{ - "value":"eastus" - }, - "WebsiteName":{ - "value":"devopshol-am2" - } - }, - "variableGroups":[ - - ], - "environments":[ - { - "id":10, - "name":"Dev", - "rank":1, - "owner":{ - "id":"652d04a6-da7e-4ce3-b365-8cfed2574a7d", - "displayName":"Andrew Morgan", - "uniqueName":"nagroma@hotmail.com", - "url":"https://app.vssps.visualstudio.com/A94cbef75-cc36-4962-a500-fe681327dee5/_apis/Identities/652d04a6-da7e-4ce3-b365-8cfed2574a7d", - "imageUrl":"https://nagroma.visualstudio.com/_api/_common/identityImage?id=652d04a6-da7e-4ce3-b365-8cfed2574a7d&t=00000000-0000-0000-5056-df8f442cd508" - }, - "variables":{ - - }, - "variableGroups":[ - - ], - "preDeployApprovals":{ - "approvals":[ - { - "rank":1, - "isAutomated":true, - "isNotificationOn":false, - "id":28 - } - ] - }, - "deployStep":{ - "tasks":[ - - ], - "id":33 - }, - "postDeployApprovals":{ - "approvals":[ - { - "rank":1, - "isAutomated":true, - "isNotificationOn":false, - "id":34 - } - ] - }, - "deployPhases":[ - { - "deploymentInput":{ - "parallelExecution":{ - "parallelExecutionType":"none" - }, - "skipArtifactsDownload":false, - "artifactsDownloadInput":{ - "downloadInputs":[ - - ] - }, - "queueId":20, - "demands":[ - - ], - "enableAccessToken":false, - "timeoutInMinutes":0, - "jobCancelTimeoutInMinutes":1, - "condition":"succeeded()", - "overrideInputs":{ - - } - }, - "rank":1, - "phaseType":1, - "name":"Agent phase", - "workflowTasks":[ - { - "taskId":"94a74903-f93f-4075-884f-dc11f34058b4", - "version":"2.*", - "name":"Azure Deployment:Create Or Update Resource Group action on $(ResourceGroupName)", - "refName":"AzureResourceGroupDeployment3", - "enabled":true, - "alwaysRun":false, - "continueOnError":false, - "timeoutInMinutes":0, - "definitionType":"task", - "overrideInputs":{ - - }, - "condition":"succeeded()", - "inputs":{ - "ConnectedServiceName":"cdd20c8a-52e8-4775-8fb6-37f0e9c0cae7", - "action":"Create Or Update Resource Group", - "resourceGroupName":"$(ResourceGroupName)", - "location":"$(SiteLocation)", - "templateLocation":"Linked artifact", - "csmFileLink":"", - "csmParametersFileLink":"", - "csmFile":"$(System.DefaultWorkingDirectory)/**/WebSite.json", - "csmParametersFile":"", - "overrideParameters":"-appServicePlanName $(AppServicePlan) -siteName $(WebSiteName) -siteLocation $(SiteLocation) -workerSize \"0\"", - "deploymentMode":"Incremental", - "enableDeploymentPrerequisites":"None", - "deploymentGroupEndpoint":"", - "project":"", - "deploymentGroupName":"", - "copyAzureVMTags":"true", - "outputVariable":"" - } - }, - { - "taskId":"497d490f-eea7-4f2b-ab94-48d9c1acdcb1", - "version":"3.*", - "name":"Azure App Service Deploy: $(WebSiteName)", - "refName":"AzureRmWebAppDeployment2", - "enabled":true, - "alwaysRun":false, - "continueOnError":false, - "timeoutInMinutes":0, - "definitionType":"task", - "overrideInputs":{ - - }, - "condition":"succeeded()", - "inputs":{ - "ConnectedServiceName":"cdd20c8a-52e8-4775-8fb6-37f0e9c0cae7", - "WebAppName":"$(WebSiteName)", - "WebAppKind":"app", - "DeployToSlotFlag":"true", - "ImageSource":"Registry", - "ResourceGroupName":"$(ResourceGroupName)", - "SlotName":"Dev", - "AzureContainerRegistry":"", - "AzureContainerRegistryLoginServer":"", - "AzureContainerRegistryImage":"", - "AzureContainerRegistryTag":"", - "DockerRepositoryAccess":"public", - "RegistryConnectedServiceName":"", - "PrivateRegistryImage":"", - "PrivateRegistryTag":"", - "DockerNamespace":"", - "DockerRepository":"", - "DockerImageTag":"", - "VirtualApplication":"", - "Package":"$(System.DefaultWorkingDirectory)/**/*.zip", - "BuiltinLinuxPackage":"$(System.DefaultWorkingDirectory)/**/*.zip", - "RuntimeStack":"node|4.4", - "StartupCommand":"", - "WebAppUri":"", - "ScriptType":"", - "InlineScript":":: You can provide your deployment commands here. One command per line.", - "ScriptPath":"", - "GenerateWebConfig":"false", - "WebConfigParameters":"", - "AppSettings":"", - "TakeAppOfflineFlag":"false", - "UseWebDeploy":"false", - "SetParametersFile":"", - "RemoveAdditionalFilesFlag":"false", - "ExcludeFilesFromAppDataFlag":"false", - "AdditionalArguments":"", - "RenameFilesFlag":"false", - "XmlTransformation":"false", - "XmlVariableSubstitution":"false", - "JSONFiles":"" - } - } - ] - } - ], - "environmentOptions":{ - "emailNotificationType":"OnlyOnFailure", - "emailRecipients":"release.environment.owner;release.creator", - "skipArtifactsDownload":false, - "timeoutInMinutes":0, - "enableAccessToken":false, - "publishDeploymentStatus":true - }, - "demands":[ - - ], - "conditions":[ - { - "name":"ReleaseStarted", - "conditionType":1, - "value":"" - } - ], - "executionPolicy":{ - "concurrencyCount":0, - "queueDepthCount":0 - }, - "schedules":[ - - ], - "retentionPolicy":{ - "daysToKeep":30, - "releasesToKeep":3, - "retainBuild":true - }, - "processParameters":{ - - }, - "properties":{ - - }, - "preDeploymentGates":{ - "id":0, - "gatesOptions":null, - "gates":[ - - ] - }, - "postDeploymentGates":{ - "id":0, - "gatesOptions":null, - "gates":[ - - ] - } - }, - { - "id":11, - "name":"Stage", - "rank":2, - "owner":{ - "id":"652d04a6-da7e-4ce3-b365-8cfed2574a7d", - "displayName":"Andrew Morgan", - "uniqueName":"nagroma@hotmail.com", - "url":"https://app.vssps.visualstudio.com/A94cbef75-cc36-4962-a500-fe681327dee5/_apis/Identities/652d04a6-da7e-4ce3-b365-8cfed2574a7d", - "imageUrl":"https://nagroma.visualstudio.com/_api/_common/identityImage?id=652d04a6-da7e-4ce3-b365-8cfed2574a7d&t=00000000-0000-0000-5056-df8f442cd508" - }, - "variables":{ - - }, - "variableGroups":[ - - ], - "preDeployApprovals":{ - "approvals":[ - { - "rank":1, - "isAutomated":true, - "isNotificationOn":false, - "id":29 - } - ] - }, - "deployStep":{ - "tasks":[ - - ], - "id":32 - }, - "postDeployApprovals":{ - "approvals":[ - { - "rank":1, - "isAutomated":true, - "isNotificationOn":false, - "id":35 - } - ] - }, - "deployPhases":[ - { - "deploymentInput":{ - "parallelExecution":{ - "parallelExecutionType":"none" - }, - "skipArtifactsDownload":false, - "artifactsDownloadInput":{ - "downloadInputs":[ - - ] - }, - "queueId":20, - "demands":[ - - ], - "enableAccessToken":false, - "timeoutInMinutes":0, - "jobCancelTimeoutInMinutes":1, - "condition":"succeeded()", - "overrideInputs":{ - - } - }, - "rank":1, - "phaseType":1, - "name":"Agent phase", - "workflowTasks":[ - { - "taskId":"497d490f-eea7-4f2b-ab94-48d9c1acdcb1", - "version":"3.*", - "name":"Azure App Service Deploy: $(WebSiteName)", - "refName":"AzureRmWebAppDeployment2", - "enabled":true, - "alwaysRun":false, - "continueOnError":false, - "timeoutInMinutes":0, - "definitionType":"task", - "overrideInputs":{ - - }, - "condition":"succeeded()", - "inputs":{ - "ConnectedServiceName":"cdd20c8a-52e8-4775-8fb6-37f0e9c0cae7", - "WebAppName":"$(WebSiteName)", - "WebAppKind":"app", - "DeployToSlotFlag":"true", - "ImageSource":"Registry", - "ResourceGroupName":"$(ResourceGroupName)", - "SlotName":"Staging", - "AzureContainerRegistry":"", - "AzureContainerRegistryLoginServer":"", - "AzureContainerRegistryImage":"", - "AzureContainerRegistryTag":"", - "DockerRepositoryAccess":"public", - "RegistryConnectedServiceName":"", - "PrivateRegistryImage":"", - "PrivateRegistryTag":"", - "DockerNamespace":"", - "DockerRepository":"", - "DockerImageTag":"", - "VirtualApplication":"", - "Package":"$(System.DefaultWorkingDirectory)/**/*.zip", - "BuiltinLinuxPackage":"$(System.DefaultWorkingDirectory)/**/*.zip", - "RuntimeStack":"node|4.4", - "StartupCommand":"", - "WebAppUri":"", - "ScriptType":"", - "InlineScript":":: You can provide your deployment commands here. One command per line.", - "ScriptPath":"", - "GenerateWebConfig":"false", - "WebConfigParameters":"", - "AppSettings":"", - "TakeAppOfflineFlag":"false", - "UseWebDeploy":"false", - "SetParametersFile":"", - "RemoveAdditionalFilesFlag":"false", - "ExcludeFilesFromAppDataFlag":"false", - "AdditionalArguments":"", - "RenameFilesFlag":"false", - "XmlTransformation":"false", - "XmlVariableSubstitution":"false", - "JSONFiles":"" - } - } - ] - } - ], - "environmentOptions":{ - "emailNotificationType":"OnlyOnFailure", - "emailRecipients":"release.environment.owner;release.creator", - "skipArtifactsDownload":false, - "timeoutInMinutes":0, - "enableAccessToken":false, - "publishDeploymentStatus":true - }, - "demands":[ - - ], - "conditions":[ - { - "name":"Dev", - "conditionType":2, - "value":"4" - } - ], - "executionPolicy":{ - "concurrencyCount":0, - "queueDepthCount":0 - }, - "schedules":[ - - ], - "retentionPolicy":{ - "daysToKeep":30, - "releasesToKeep":3, - "retainBuild":true - }, - "processParameters":{ - - }, - "properties":{ - - }, - "preDeploymentGates":{ - "id":0, - "gatesOptions":null, - "gates":[ - - ] - }, - "postDeploymentGates":{ - "id":0, - "gatesOptions":null, - "gates":[ - - ] - } - }, - { - "id":12, - "name":"Prod", - "rank":3, - "owner":{ - "id":"652d04a6-da7e-4ce3-b365-8cfed2574a7d", - "displayName":"Andrew Morgan", - "uniqueName":"nagroma@hotmail.com", - "url":"https://app.vssps.visualstudio.com/A94cbef75-cc36-4962-a500-fe681327dee5/_apis/Identities/652d04a6-da7e-4ce3-b365-8cfed2574a7d", - "imageUrl":"https://nagroma.visualstudio.com/_api/_common/identityImage?id=652d04a6-da7e-4ce3-b365-8cfed2574a7d&t=00000000-0000-0000-5056-df8f442cd508" - }, - "variables":{ - - }, - "variableGroups":[ - - ], - "preDeployApprovals":{ - "approvals":[ - { - "rank":1, - "isAutomated":true, - "isNotificationOn":false, - "id":30 - } - ] - }, - "deployStep":{ - "tasks":[ - - ], - "id":31 - }, - "postDeployApprovals":{ - "approvals":[ - { - "rank":1, - "isAutomated":true, - "isNotificationOn":false, - "id":36 - } - ] - }, - "deployPhases":[ - { - "deploymentInput":{ - "parallelExecution":{ - "parallelExecutionType":"none" - }, - "skipArtifactsDownload":false, - "artifactsDownloadInput":{ - "downloadInputs":[ - - ] - }, - "queueId":20, - "demands":[ - - ], - "enableAccessToken":false, - "timeoutInMinutes":0, - "jobCancelTimeoutInMinutes":1, - "condition":"succeeded()", - "overrideInputs":{ - - } - }, - "rank":1, - "phaseType":1, - "name":"Agent phase", - "workflowTasks":[ - { - "taskId":"497d490f-eea7-4f2b-ab94-48d9c1acdcb1", - "version":"3.*", - "name":"Azure App Service Deploy: $(WebSiteName)", - "refName":"AzureRmWebAppDeployment2", - "enabled":true, - "alwaysRun":false, - "continueOnError":false, - "timeoutInMinutes":0, - "definitionType":"task", - "overrideInputs":{ - - }, - "condition":"succeeded()", - "inputs":{ - "ConnectedServiceName":"cdd20c8a-52e8-4775-8fb6-37f0e9c0cae7", - "WebAppName":"$(WebSiteName)", - "WebAppKind":"app", - "DeployToSlotFlag":"false", - "ImageSource":"Registry", - "ResourceGroupName":"$(ResourceGroupName)", - "SlotName":"Staging", - "AzureContainerRegistry":"", - "AzureContainerRegistryLoginServer":"", - "AzureContainerRegistryImage":"", - "AzureContainerRegistryTag":"", - "DockerRepositoryAccess":"public", - "RegistryConnectedServiceName":"", - "PrivateRegistryImage":"", - "PrivateRegistryTag":"", - "DockerNamespace":"", - "DockerRepository":"", - "DockerImageTag":"", - "VirtualApplication":"", - "Package":"$(System.DefaultWorkingDirectory)/**/*.zip", - "BuiltinLinuxPackage":"$(System.DefaultWorkingDirectory)/**/*.zip", - "RuntimeStack":"node|4.4", - "StartupCommand":"", - "WebAppUri":"", - "ScriptType":"", - "InlineScript":":: You can provide your deployment commands here. One command per line.", - "ScriptPath":"", - "GenerateWebConfig":"false", - "WebConfigParameters":"", - "AppSettings":"", - "TakeAppOfflineFlag":"false", - "UseWebDeploy":"false", - "SetParametersFile":"", - "RemoveAdditionalFilesFlag":"false", - "ExcludeFilesFromAppDataFlag":"false", - "AdditionalArguments":"", - "RenameFilesFlag":"false", - "XmlTransformation":"false", - "XmlVariableSubstitution":"false", - "JSONFiles":"" - } - } - ] - } - ], - "environmentOptions":{ - "emailNotificationType":"OnlyOnFailure", - "emailRecipients":"release.environment.owner;release.creator", - "skipArtifactsDownload":false, - "timeoutInMinutes":0, - "enableAccessToken":false, - "publishDeploymentStatus":true - }, - "demands":[ - - ], - "conditions":[ - { - "name":"Stage", - "conditionType":2, - "value":"4" - } - ], - "executionPolicy":{ - "concurrencyCount":0, - "queueDepthCount":0 - }, - "schedules":[ - - ], - "retentionPolicy":{ - "daysToKeep":30, - "releasesToKeep":3, - "retainBuild":true - }, - "processParameters":{ - - }, - "properties":{ - - }, - "preDeploymentGates":{ - "id":0, - "gatesOptions":null, - "gates":[ - - ] - }, - "postDeploymentGates":{ - "id":0, - "gatesOptions":null, - "gates":[ - - ] - } - } - ], - "artifacts":[ - { - "sourceId":"e58a4fcf-1085-4dc6-a88c-8d0a3dc5c49a:5", - "type":"Build", - "alias":"DevOpsHOL-CI", - "definitionReference":{ - "artifactSourceDefinitionUrl":{ - "id":"https://nagroma.visualstudio.com/_permalink/_build/index?collectionId=d3e7f117-361e-4266-8c86-e766ad01a100&projectId=e58a4fcf-1085-4dc6-a88c-8d0a3dc5c49a&definitionId=5", - "name":"" - }, - "defaultVersionBranch":{ - "id":"", - "name":"" - }, - "defaultVersionSpecific":{ - "id":"", - "name":"" - }, - "defaultVersionTags":{ - "id":"", - "name":"" - }, - "defaultVersionType":{ - "id":"latestType", - "name":"Latest" - }, - "definition":{ - "id":"5", - "name":"DevOpsHOL-CI" - }, - "project":{ - "id":"e58a4fcf-1085-4dc6-a88c-8d0a3dc5c49a", - "name":"DevOpsHOL" - } - }, - "isPrimary":true - } - ], - "triggers":[ - { - "artifactAlias":"DevOpsHOL-CI", - "triggerConditions":[ - - ], - "triggerType":1 - } - ], - "releaseNameFormat":"Release-$(rev:r)", - "url":"https://nagroma.vsrm.visualstudio.com/e58a4fcf-1085-4dc6-a88c-8d0a3dc5c49a/_apis/Release/definitions/6", - "_links":{ - "self":{ - "href":"https://nagroma.vsrm.visualstudio.com/e58a4fcf-1085-4dc6-a88c-8d0a3dc5c49a/_apis/Release/definitions/6" - }, - "web":{ - "href":"https://nagroma.visualstudio.com/e58a4fcf-1085-4dc6-a88c-8d0a3dc5c49a/_release?definitionId=6" - } - }, - "tags":[ - - ], - "properties":{ - "DefinitionCreationSource":{ - "$type":"System.String", - "$value":"ReleaseImport" - } - } -} \ No newline at end of file diff --git a/backup/source/vsts/DevOpsHOL-CI.json b/backup/source/vsts/DevOpsHOL-CI.json deleted file mode 100644 index 994588f..0000000 --- a/backup/source/vsts/DevOpsHOL-CI.json +++ /dev/null @@ -1,550 +0,0 @@ -{ - "options":[ - { - "enabled":true, - "definition":{ - "id":"5d58cc01-7c75-450c-be18-a388ddb129ec" - }, - "inputs":{ - "branchFilters":"[\"+refs/heads/*\"]", - "additionalFields":"{}" - } - }, - { - "enabled":false, - "definition":{ - "id":"a9db38f9-9fdc-478c-b0f9-464221e58316" - }, - "inputs":{ - "workItemType":"362937", - "assignToRequestor":"true", - "additionalFields":"{}" - } - }, - { - "enabled":false, - "definition":{ - "id":"57578776-4c22-4526-aeb0-86b6da17ee9c" - }, - "inputs":{ - - } - } - ], - "triggers":[ - { - "branchFilters":[ - "+refs/heads/master" - ], - "pathFilters":[ - - ], - "batchChanges":false, - "maxConcurrentBuildsPerBranch":1, - "pollingInterval":0, - "triggerType":2 - } - ], - "variables":{ - "BuildConfiguration":{ - "value":"release", - "allowOverride":true - }, - "BuildPlatform":{ - "value":"any cpu", - "allowOverride":true - }, - "system.debug":{ - "value":"false", - "allowOverride":true - } - }, - "retentionRules":[ - { - "branches":[ - "+refs/heads/*" - ], - "artifacts":[ - - ], - "artifactTypesToDelete":[ - "FilePath", - "SymbolStore" - ], - "daysToKeep":10, - "minimumToKeep":1, - "deleteBuildRecord":true, - "deleteTestResults":true - } - ], - "metrics":[ - { - "name":"CurrentBuildsInQueue", - "scope":"refs/heads/master", - "intValue":0 - }, - { - "name":"CurrentBuildsInProgress", - "scope":"refs/heads/master", - "intValue":0 - }, - { - "name":"CanceledBuilds", - "scope":"refs/heads/master", - "intValue":0, - "date":"2017-11-15T00:00:00.000Z" - }, - { - "name":"FailedBuilds", - "scope":"refs/heads/master", - "intValue":0, - "date":"2017-11-15T00:00:00.000Z" - }, - { - "name":"PartiallySuccessfulBuilds", - "scope":"refs/heads/master", - "intValue":0, - "date":"2017-11-15T00:00:00.000Z" - }, - { - "name":"SuccessfulBuilds", - "scope":"refs/heads/master", - "intValue":3, - "date":"2017-11-15T00:00:00.000Z" - }, - { - "name":"TotalBuilds", - "scope":"refs/heads/master", - "intValue":3, - "date":"2017-11-15T00:00:00.000Z" - }, - { - "name":"CanceledBuilds", - "scope":"refs/heads/master", - "intValue":0, - "date":"2017-11-14T00:00:00.000Z" - }, - { - "name":"FailedBuilds", - "scope":"refs/heads/master", - "intValue":0, - "date":"2017-11-14T00:00:00.000Z" - }, - { - "name":"PartiallySuccessfulBuilds", - "scope":"refs/heads/master", - "intValue":0, - "date":"2017-11-14T00:00:00.000Z" - }, - { - "name":"SuccessfulBuilds", - "scope":"refs/heads/master", - "intValue":5, - "date":"2017-11-14T00:00:00.000Z" - }, - { - "name":"TotalBuilds", - "scope":"refs/heads/master", - "intValue":5, - "date":"2017-11-14T00:00:00.000Z" - }, - { - "name":"CanceledBuilds", - "scope":"refs/heads/master", - "intValue":0, - "date":"2017-11-13T00:00:00.000Z" - }, - { - "name":"FailedBuilds", - "scope":"refs/heads/master", - "intValue":0, - "date":"2017-11-13T00:00:00.000Z" - }, - { - "name":"PartiallySuccessfulBuilds", - "scope":"refs/heads/master", - "intValue":0, - "date":"2017-11-13T00:00:00.000Z" - }, - { - "name":"SuccessfulBuilds", - "scope":"refs/heads/master", - "intValue":1, - "date":"2017-11-13T00:00:00.000Z" - }, - { - "name":"TotalBuilds", - "scope":"refs/heads/master", - "intValue":1, - "date":"2017-11-13T00:00:00.000Z" - }, - { - "name":"CanceledBuilds", - "scope":"refs/heads/master", - "intValue":2, - "date":"2017-11-12T00:00:00.000Z" - }, - { - "name":"FailedBuilds", - "scope":"refs/heads/master", - "intValue":0, - "date":"2017-11-12T00:00:00.000Z" - }, - { - "name":"PartiallySuccessfulBuilds", - "scope":"refs/heads/master", - "intValue":0, - "date":"2017-11-12T00:00:00.000Z" - }, - { - "name":"SuccessfulBuilds", - "scope":"refs/heads/master", - "intValue":3, - "date":"2017-11-12T00:00:00.000Z" - }, - { - "name":"TotalBuilds", - "scope":"refs/heads/master", - "intValue":5, - "date":"2017-11-12T00:00:00.000Z" - } - ], - "_links":{ - "self":{ - "href":"https://nagroma.visualstudio.com/e58a4fcf-1085-4dc6-a88c-8d0a3dc5c49a/_apis/build/Definitions/4" - }, - "web":{ - "href":"https://nagroma.visualstudio.com/_permalink/_build/index?collectionId=d3e7f117-361e-4266-8c86-e766ad01a100&projectId=e58a4fcf-1085-4dc6-a88c-8d0a3dc5c49a&definitionId=4" - }, - "editor":{ - "href":"https://nagroma.visualstudio.com/_permalink/_build/definitionEditor?collectionId=d3e7f117-361e-4266-8c86-e766ad01a100&projectId=e58a4fcf-1085-4dc6-a88c-8d0a3dc5c49a&definitionId=4" - } - }, - "buildNumberFormat":"$(date:yyyyMMdd)$(rev:.r)", - "jobAuthorizationScope":1, - "jobTimeoutInMinutes":60, - "jobCancelTimeoutInMinutes":5, - "process":{ - "phases":[ - { - "dependencies":[ - - ], - "steps":[ - { - "environment":{ - - }, - "enabled":true, - "continueOnError":false, - "alwaysRun":false, - "displayName":"Use NuGet 4.3.0", - "timeoutInMinutes":0, - "refName":"NuGetToolInstaller1", - "task":{ - "id":"2c65196a-54fd-4a02-9be8-d9d1837b7c5d", - "versionSpec":"0.*", - "definitionType":"task" - }, - "inputs":{ - "versionSpec":"4.3.0", - "checkLatest":"false" - } - }, - { - "environment":{ - - }, - "enabled":true, - "continueOnError":false, - "alwaysRun":false, - "displayName":"NuGet restore", - "timeoutInMinutes":0, - "refName":"NuGetCommand2", - "task":{ - "id":"333b11bd-d341-40d9-afcf-b32d5ce6f23b", - "versionSpec":"2.*", - "definitionType":"task" - }, - "inputs":{ - "command":"restore", - "solution":"$(Parameters.solution)", - "selectOrConfig":"select", - "feedRestore":"", - "includeNuGetOrg":"true", - "nugetConfigPath":"", - "externalEndpoints":"", - "noCache":"false", - "packagesDirectory":"", - "verbosityRestore":"Detailed", - "searchPatternPush":"$(Build.ArtifactStagingDirectory)/*.nupkg", - "nuGetFeedType":"internal", - "feedPublish":"", - "allowPackageConflicts":"false", - "externalEndpoint":"", - "verbosityPush":"Detailed", - "searchPatternPack":"**/*.csproj", - "configurationToPack":"$(BuildConfiguration)", - "outputDir":"$(Build.ArtifactStagingDirectory)", - "versioningScheme":"off", - "includeReferencedProjects":"false", - "versionEnvVar":"", - "requestedMajorVersion":"1", - "requestedMinorVersion":"0", - "requestedPatchVersion":"0", - "packTimezone":"utc", - "includeSymbols":"false", - "buildProperties":"", - "verbosityPack":"Detailed", - "arguments":"" - } - }, - { - "environment":{ - - }, - "enabled":true, - "continueOnError":false, - "alwaysRun":false, - "displayName":"Build solution", - "timeoutInMinutes":0, - "refName":"VSBuild3", - "task":{ - "id":"71a9a2d3-a98a-4caa-96ab-affca411ecda", - "versionSpec":"1.*", - "definitionType":"task" - }, - "inputs":{ - "solution":"$(Parameters.solution)", - "vsVersion":"latest", - "msbuildArgs":"/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=\"$(build.artifactstagingdirectory)\\\\\"", - "platform":"$(BuildPlatform)", - "configuration":"$(BuildConfiguration)", - "clean":"false", - "maximumCpuCount":"false", - "restoreNugetPackages":"false", - "msbuildArchitecture":"x86", - "logProjectEvents":"true", - "createLogFile":"false" - } - }, - { - "environment":{ - - }, - "enabled":true, - "continueOnError":false, - "alwaysRun":false, - "displayName":"Test Assemblies", - "timeoutInMinutes":0, - "refName":"VSTest4", - "task":{ - "id":"ef087383-ee5e-42c7-9a53-ab56c98420f9", - "versionSpec":"2.*", - "definitionType":"task" - }, - "inputs":{ - "testSelector":"testAssemblies", - "testAssemblyVer2":"**\\$(BuildConfiguration)\\*test*.dll\n!**\\obj\\**", - "testPlan":"", - "testSuite":"", - "testConfiguration":"", - "tcmTestRun":"$(test.RunId)", - "searchFolder":"$(System.DefaultWorkingDirectory)", - "testFiltercriteria":"", - "runOnlyImpactedTests":"False", - "runAllTestsAfterXBuilds":"50", - "uiTests":"false", - "vstestLocationMethod":"version", - "vsTestVersion":"latest", - "vstestLocation":"", - "runSettingsFile":"", - "overrideTestrunParameters":"", - "pathtoCustomTestAdapters":"", - "runInParallel":"False", - "runTestsInIsolation":"False", - "codeCoverageEnabled":"False", - "otherConsoleOptions":"", - "distributionBatchType":"basedOnTestCases", - "batchingBasedOnAgentsOption":"autoBatchSize", - "customBatchSizeValue":"10", - "batchingBasedOnExecutionTimeOption":"autoBatchSize", - "customRunTimePerBatchValue":"60", - "dontDistribute":"False", - "testRunTitle":"", - "platform":"$(BuildPlatform)", - "configuration":"$(BuildConfiguration)", - "publishRunAttachments":"true" - } - }, - { - "environment":{ - - }, - "enabled":true, - "continueOnError":true, - "alwaysRun":false, - "displayName":"Publish symbols path", - "timeoutInMinutes":0, - "refName":"PublishSymbols5", - "task":{ - "id":"0675668a-7bba-4ccb-901d-5ad6554ca653", - "versionSpec":"1.*", - "definitionType":"task" - }, - "inputs":{ - "SymbolsPath":"", - "SearchPattern":"**\\bin\\**\\*.pdb", - "SymbolsFolder":"", - "SkipIndexing":"false", - "TreatNotIndexedAsWarning":"false", - "SymbolsMaximumWaitTime":"", - "SymbolsProduct":"", - "SymbolsVersion":"", - "SymbolsArtifactName":"Symbols_$(BuildConfiguration)" - } - }, - { - "environment":{ - - }, - "enabled":true, - "continueOnError":false, - "alwaysRun":false, - "displayName":"Publish Artifact", - "timeoutInMinutes":0, - "refName":"PublishBuildArtifacts6", - "task":{ - "id":"2ff763a7-ce83-4e1f-bc89-0ae63477cebe", - "versionSpec":"1.*", - "definitionType":"task" - }, - "inputs":{ - "PathtoPublish":"$(build.artifactstagingdirectory)", - "ArtifactName":"$(Parameters.ArtifactName)", - "ArtifactType":"Container", - "TargetPath":"\\\\my\\share\\$(Build.DefinitionName)\\$(Build.BuildNumber)", - "Parallel":"false", - "ParallelCount":"8" - } - } - ], - "variables":{ - - }, - "name":"Phase 1", - "target":{ - "demands":[ - - ], - "executionOptions":{ - "type":0 - }, - "allowScriptsAuthAccessOption":false, - "type":1 - }, - "jobAuthorizationScope":"projectCollection", - "jobCancelTimeoutInMinutes":1 - } - ], - "type":1 - }, - "repository":{ - "properties":{ - "cleanOptions":"0", - "labelSources":"0", - "labelSourcesFormat":"$(build.buildNumber)", - "reportBuildStatus":"true", - "gitLfsSupport":"false", - "skipSyncSource":"false", - "checkoutNestedSubmodules":"false", - "fetchDepth":"0" - }, - "id":"b01b3ac1-5cff-4fbd-8f94-73fcad882df9", - "type":"TfsGit", - "name":"DevOpsHOL", - "url":"https://nagroma.visualstudio.com/_git/DevOpsHOL", - "defaultBranch":"refs/heads/master", - "clean":"false", - "checkoutSubmodules":false - }, - "processParameters":{ - "inputs":[ - { - "aliases":[ - - ], - "options":{ - - }, - "properties":{ - - }, - "name":"solution", - "label":"Path to solution or packages.config", - "defaultValue":"**\\*.sln", - "required":true, - "type":"filePath", - "helpMarkDown":"The path to the Visual Studio solution file or NuGet packages.config", - "visibleRule":"", - "groupName":"" - }, - { - "aliases":[ - - ], - "options":{ - - }, - "properties":{ - - }, - "name":"ArtifactName", - "label":"Artifact Name", - "defaultValue":"drop", - "required":true, - "type":"string", - "helpMarkDown":"The name of the artifact to create.", - "visibleRule":"", - "groupName":"" - } - ] - }, - "quality":1, - "authoredBy":{ - "id":"652d04a6-da7e-4ce3-b365-8cfed2574a7d", - "displayName":"Andrew Morgan", - "uniqueName":"nagroma@hotmail.com", - "url":"https://app.vssps.visualstudio.com/A94cbef75-cc36-4962-a500-fe681327dee5/_apis/Identities/652d04a6-da7e-4ce3-b365-8cfed2574a7d", - "imageUrl":"https://nagroma.visualstudio.com/_api/_common/identityImage?id=652d04a6-da7e-4ce3-b365-8cfed2574a7d&t=00000000-0000-0000-5056-df8f442cd508" - }, - "drafts":[ - - ], - "queue":{ - "id":20, - "name":"Hosted VS2017", - "pool":{ - "id":4, - "name":"Hosted VS2017", - "isHosted":true - } - }, - "id":4, - "name":"DevOpsHOL-CI", - "url":"https://nagroma.visualstudio.com/e58a4fcf-1085-4dc6-a88c-8d0a3dc5c49a/_apis/build/Definitions/4", - "uri":"vstfs:///Build/Definition/4", - "path":"\\", - "type":2, - "queueStatus":0, - "revision":4, - "createdDate":"2017-11-15T15:13:09.657Z", - "project":{ - "id":"e58a4fcf-1085-4dc6-a88c-8d0a3dc5c49a", - "name":"DevOpsHOL", - "url":"https://nagroma.visualstudio.com/_apis/projects/e58a4fcf-1085-4dc6-a88c-8d0a3dc5c49a", - "state":"wellFormed", - "revision":48, - "visibility":0 - } -} \ No newline at end of file diff --git a/backup/source/vsts/README.md b/backup/source/vsts/README.md deleted file mode 100644 index 5a77bcf..0000000 --- a/backup/source/vsts/README.md +++ /dev/null @@ -1 +0,0 @@ -These two files are the export from the VSTS build definiton (DevOpsHOL-CI.json) and release definition (). These can be imported into the VSTS project to configure the build and release and skip all the steps in the labs :). \ No newline at end of file From 022bd9b4525ba6ba31645a95afdcbf0762f565c2 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Mon, 5 Mar 2018 14:11:09 +0100 Subject: [PATCH 004/168] add links to labs --- lab-1-azure-devops-project-pipeline.md | 6 +++++- lab-2-multi-stage-deployments.md | 10 +++++++--- lab-3-analysis-with-sonarqube.md | 10 +++++++--- lab-4-feature-toggle.md | 10 +++++++--- lab-5-ui-testing.md | 8 ++++++-- lab-6-smoke-testing.md | 10 +++++++--- 6 files changed, 39 insertions(+), 15 deletions(-) diff --git a/lab-1-azure-devops-project-pipeline.md b/lab-1-azure-devops-project-pipeline.md index ef0a9c7..6669d15 100644 --- a/lab-1-azure-devops-project-pipeline.md +++ b/lab-1-azure-devops-project-pipeline.md @@ -1,4 +1,4 @@ -# Avanade DevOps HOL - Create a CI/CD pipeline for .NET with the Azure DevOps Project +# Avanade DevOps HOL - Lab 1 - Create a CI/CD pipeline for .NET with the Azure DevOps Project In this lab, we create our own application in Visual Studio with Unit Tests. @@ -18,3 +18,7 @@ In this lab, we create our own application in Visual Studio with Unit Tests. 1. Configure unit test in build with argument !Integration - Stretch: what should be added is ARM which can be reverse engineered. + +## Next steps + +Continue with [Lab 2 - Define your multi-stage continuous deployment process with approvals and gates](lab-2-multi-stage-deployments.md). \ No newline at end of file diff --git a/lab-2-multi-stage-deployments.md b/lab-2-multi-stage-deployments.md index bfde802..e8c4ce6 100644 --- a/lab-2-multi-stage-deployments.md +++ b/lab-2-multi-stage-deployments.md @@ -1,10 +1,10 @@ -# Avanade DevOps HOL - Define your multi-stage continuous deployment process with approvals and gates +# Avanade DevOps HOL - Lab 2 - Define your multi-stage continuous deployment process with approvals and gates In this lab, we setup our multi-stage continuous deployment process by adding approvals and gates. ## Prerequisites -- Complete [Create a CI/CD pipeline for .NET with the Azure DevOps Project](lab-1-azure-devops-project-pipeline.md). +- Complete [Lab 1 - Create a CI/CD pipeline for .NET with the Azure DevOps Project](lab-1-azure-devops-project-pipeline.md). ## Tasks @@ -20,4 +20,8 @@ Use approvals and gates to control your deployment 1. Add pre deployment gates on work item count -1. Add pre/post deployment approvals to control promotion to next environments \ No newline at end of file +1. Add pre/post deployment approvals to control promotion to next environments + +## Next steps + +Continue with [Lab 3 - Analysis with SonarQube](lab-3-analysis-with-sonarqube.md). \ No newline at end of file diff --git a/lab-3-analysis-with-sonarqube.md b/lab-3-analysis-with-sonarqube.md index d3da58c..d6dac5b 100644 --- a/lab-3-analysis-with-sonarqube.md +++ b/lab-3-analysis-with-sonarqube.md @@ -1,4 +1,4 @@ -# Avanade DevOps HOL - Analysis with SonarQube +# Avanade DevOps HOL - Lab 3 - Analysis with SonarQube In this lab, we enable SonarQube for analysis of our code. @@ -7,7 +7,7 @@ https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Extension+for+V ## Prerequisites -- Complete [Define your multi-stage continuous deployment process with approvals and gates](lab-2-multi-stage-deployments.md). +- Complete [Lab 2 - Define your multi-stage continuous deployment process with approvals and gates](lab-2-multi-stage-deployments.md). ## Tasks @@ -29,4 +29,8 @@ https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Extension+for+V 1. Save and Queue the build -1. Log on to SonarQube and view the results \ No newline at end of file +1. Log on to SonarQube and view the results + +## Next steps + +Continue with [Lab 4 - Feature Toggle](lab-4-feature-toggle.md). \ No newline at end of file diff --git a/lab-4-feature-toggle.md b/lab-4-feature-toggle.md index 610227c..3bb6d83 100644 --- a/lab-4-feature-toggle.md +++ b/lab-4-feature-toggle.md @@ -1,4 +1,4 @@ -# Avanade DevOps HOL - Feature Toggle +# Avanade DevOps HOL - Lab 4 - Feature Toggle In this lab, we build a Feature Toggle mechanism in our code. @@ -6,7 +6,7 @@ Based on: https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-FeatureFlagf ## Prerequisites -- Complete [Analysis with SonarQube](lab-3-analysis-with-sonarqube.md). +- Complete [Lab 3 - Analysis with SonarQube](lab-3-analysis-with-sonarqube.md). ## Tasks @@ -17,4 +17,8 @@ Based on: https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-FeatureFlagf 1. Use config to store feature toggle config 1. Add page to default MVC project to where you can submit contact information, submit doesn’t do anything. - - Feature toggle is checking for phone number format using reg ex, see https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-FeatureFlagforWebapps.html \ No newline at end of file + - Feature toggle is checking for phone number format using reg ex, see https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-FeatureFlagforWebapps.html + +## Next steps + +Continue with [Lab 5 - UI Testing](lab-5-ui-testing.md). \ No newline at end of file diff --git a/lab-5-ui-testing.md b/lab-5-ui-testing.md index cacbfa7..262ac6b 100644 --- a/lab-5-ui-testing.md +++ b/lab-5-ui-testing.md @@ -1,4 +1,4 @@ -# Avanade DevOps HOL - UI Testing +# Avanade DevOps HOL - Lab 5 - UI Testing In this lab, we add ui tests to our test project. @@ -6,7 +6,7 @@ Based on: https://docs.microsoft.com/en-us/vsts/build-release/test/continuous-te ## Prerequisites -- Complete [Feature Toggle](lab-4-feature-toggle.md). +- Complete [Lab 4 - Feature Toggle](lab-4-feature-toggle.md). ## Tasks @@ -16,3 +16,7 @@ Based on: https://docs.microsoft.com/en-us/vsts/build-release/test/continuous-te - Selenium.WebDriver.PhantomJS 1. Test the submit contact information + +## Next steps + +Continue with [Lab 6 - Smoke Testing](lab-6-smoke-testing.md). \ No newline at end of file diff --git a/lab-6-smoke-testing.md b/lab-6-smoke-testing.md index e41c3fc..03a6f9d 100644 --- a/lab-6-smoke-testing.md +++ b/lab-6-smoke-testing.md @@ -1,10 +1,10 @@ -# Avanade DevOps HOL - Smoke Testing +# Avanade DevOps HOL - Lab 6 - Smoke Testing In this lab, we add smoke tests to our test project. ## Prerequisites -- Complete [UI Testing](lab-5-ui-testing.md). +- Complete [Lab 5 - UI Testing](lab-5-ui-testing.md). ## Tasks @@ -16,4 +16,8 @@ In this lab, we add smoke tests to our test project. 1. Create a new xml file "local.runsettings" with a configurable website url 1. Create a new xml file "integration.runsettings" containing a VSTS variable token for the same website url variable - - Set "Copy to output directory" on "Copy if newer" \ No newline at end of file + - Set "Copy to output directory" on "Copy if newer" + +## Next steps + +Done! \ No newline at end of file From 19015d35f0f7ccd095d8d6a0bc75db689d4a8a46 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Mon, 5 Mar 2018 14:13:09 +0100 Subject: [PATCH 005/168] update link to getting started --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 97fe77a..b025866 100644 --- a/README.md +++ b/README.md @@ -4,4 +4,4 @@ These are the hands on labs associated with the Avanade DevOps Practitioners cou You can accomplish these labs using Visual Studio 2017 on your local computer, but you may want to consider doing the labs using an Azure VM as the development machine. This not only keeps you from having to make changes to your local environment, but it gives you additional experience using Azure. -To start setting up your environment, make sure to follow the steps in the [Getting Started](getting-started/README.md) lab. \ No newline at end of file +To start setting up your environment, make sure to follow the steps in the [Getting Started](getting-started.md) lab. \ No newline at end of file From 617f4fac59c3d09d7a60eb5c73703c934c088909 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Mon, 5 Mar 2018 16:53:57 +0100 Subject: [PATCH 006/168] add example unit test code --- lab-1-azure-devops-project-pipeline.md | 48 ++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/lab-1-azure-devops-project-pipeline.md b/lab-1-azure-devops-project-pipeline.md index 6669d15..4ee3140 100644 --- a/lab-1-azure-devops-project-pipeline.md +++ b/lab-1-azure-devops-project-pipeline.md @@ -13,6 +13,54 @@ In this lab, we create our own application in Visual Studio with Unit Tests. 1. Create project in visual studio 1. Create unit test project + unit test + -
Click here to expand the example code + + ```csharp + [TestClass] + public class HomeControllerTest + { + [TestMethod] + public void Index() + { + // Arrange + HomeController controller = new HomeController(); + + // Act + ViewResult result = controller.Index() as ViewResult; + + // Assert + Assert.IsNotNull(result); + } + + [TestMethod] + public void About() + { + // Arrange + HomeController controller = new HomeController(); + + // Act + ViewResult result = controller.About() as ViewResult; + + // Assert + Assert.IsNotNull(result); + Assert.AreEqual("Your application description page.", result.ViewData["Message"]); + } + + [TestMethod] + public void Contact() + { + // Arrange + HomeController controller = new HomeController(); + + // Act + ViewResult result = controller.Contact() as ViewResult; + + // Assert + Assert.IsNotNull(result); + } + } + ``` +
1. Use Azure DevOps project From 917bf63a045abd9f15c95a7ca5606f5dbce3be6f Mon Sep 17 00:00:00 2001 From: andregeuze Date: Tue, 6 Mar 2018 18:58:55 +0100 Subject: [PATCH 007/168] update lab 1 --- lab-1-azure-devops-project-pipeline.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lab-1-azure-devops-project-pipeline.md b/lab-1-azure-devops-project-pipeline.md index 4ee3140..b9afad9 100644 --- a/lab-1-azure-devops-project-pipeline.md +++ b/lab-1-azure-devops-project-pipeline.md @@ -1,6 +1,8 @@ # Avanade DevOps HOL - Lab 1 - Create a CI/CD pipeline for .NET with the Azure DevOps Project -In this lab, we create our own application in Visual Studio with Unit Tests. +In this lab, we create our own application in Visual Studio with Unit Tests and setup a DevOps Project in Azure to create our CI/CD pipeline. + +Based on [this](https://docs.microsoft.com/en-us/vsts/build-release/apps/cd/azure/azure-devops-project-aspnetcore) tutorial. ## Prerequisites @@ -8,12 +10,11 @@ In this lab, we create our own application in Visual Studio with Unit Tests. ## Tasks -1. Follow the steps in [this](https://docs.microsoft.com/en-us/vsts/build-release/apps/cd/azure/azure-devops-project-aspnetcore) tutorial. - -1. Create project in visual studio +1. Create a new project in visual studio: + - ASP.NET Core 2.0 Web Application (MVC) -1. Create unit test project + unit test - -
Click here to expand the example code +1. Add new Unit Test Project (.NET Core) + unit test + -
Click here to expand the sample unit test code ```csharp [TestClass] @@ -62,6 +63,8 @@ In this lab, we create our own application in Visual Studio with Unit Tests. ```
+1. Build your solution and run the unit tests. Make sure that the tests pass. + 1. Use Azure DevOps project 1. Configure unit test in build with argument !Integration From 7265764547a91fea91f4e5191fa63abb04ba1220 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Wed, 7 Mar 2018 09:29:05 +0100 Subject: [PATCH 008/168] updated steps on lab 1 --- lab-1-azure-devops-project-pipeline.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lab-1-azure-devops-project-pipeline.md b/lab-1-azure-devops-project-pipeline.md index b9afad9..6d1ab95 100644 --- a/lab-1-azure-devops-project-pipeline.md +++ b/lab-1-azure-devops-project-pipeline.md @@ -63,12 +63,17 @@ Based on [this](https://docs.microsoft.com/en-us/vsts/build-release/apps/cd/azur ```
-1. Build your solution and run the unit tests. Make sure that the tests pass. +1. Build your solution and run the unit tests. Make sure that the tests pass -1. Use Azure DevOps project +1. Commit your code to your favourite git provider (GitHub / VSTS / etc.) + +1. Go to your Azure Portal and create a new DevOps Project. Make sure it meets the following demands: + - Using your own code + - WebApp on Windows + - Linked to your VSTS account 1. Configure unit test in build with argument !Integration - - Stretch: what should be added is ARM which can be reverse engineered. + - Stretch: what should be added is ARM which can be reverse engineered ## Next steps From 03a4539a37b9950b8f4db3f679e569c88651c398 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Wed, 7 Mar 2018 13:36:13 +0100 Subject: [PATCH 009/168] add stretch goals to lab 1 --- lab-1-azure-devops-project-pipeline.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lab-1-azure-devops-project-pipeline.md b/lab-1-azure-devops-project-pipeline.md index 6d1ab95..f57adcf 100644 --- a/lab-1-azure-devops-project-pipeline.md +++ b/lab-1-azure-devops-project-pipeline.md @@ -72,8 +72,15 @@ Based on [this](https://docs.microsoft.com/en-us/vsts/build-release/apps/cd/azur - WebApp on Windows - Linked to your VSTS account +1. When the azure resources are created, go to your VSTS account and make sure that your first Build and Release are successful. If any errors occur, try and fix them by yourself or team up with your neighbour + +## Stretch goals + +1. Configure Application Insights on your Web App through the Azure Portal + +1. Export the ARM template to set up the Web App in Azure, integrate it in your Release definition + 1. Configure unit test in build with argument !Integration - - Stretch: what should be added is ARM which can be reverse engineered ## Next steps From 602238eeb934a470c25b6289b4d0d536ba9838ff Mon Sep 17 00:00:00 2001 From: andregeuze Date: Wed, 7 Mar 2018 13:57:09 +0100 Subject: [PATCH 010/168] add tutorial source, change order of approvals/gates --- lab-2-multi-stage-deployments.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lab-2-multi-stage-deployments.md b/lab-2-multi-stage-deployments.md index e8c4ce6..66dec60 100644 --- a/lab-2-multi-stage-deployments.md +++ b/lab-2-multi-stage-deployments.md @@ -2,6 +2,8 @@ In this lab, we setup our multi-stage continuous deployment process by adding approvals and gates. +Based on [this](https://docs.microsoft.com/en-us/vsts/build-release/actions/define-multistage-release-process) tutorial. + ## Prerequisites - Complete [Lab 1 - Create a CI/CD pipeline for .NET with the Azure DevOps Project](lab-1-azure-devops-project-pipeline.md). @@ -18,9 +20,9 @@ First, let's define the QA environment: Use approvals and gates to control your deployment -1. Add pre deployment gates on work item count +1. Add pre deployment approval to control promotion from QA to Production -1. Add pre/post deployment approvals to control promotion to next environments +1. Add gate on 'Active Bugs' = 0 ## Next steps From 73588b7e54f9106cd95ec8f8a4451cfef8fa3e31 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Wed, 7 Mar 2018 14:08:17 +0100 Subject: [PATCH 011/168] updated introduction with link to tutorial --- lab-3-analysis-with-sonarqube.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lab-3-analysis-with-sonarqube.md b/lab-3-analysis-with-sonarqube.md index d6dac5b..18992ba 100644 --- a/lab-3-analysis-with-sonarqube.md +++ b/lab-3-analysis-with-sonarqube.md @@ -2,8 +2,7 @@ In this lab, we enable SonarQube for analysis of our code. -Based on: -https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Extension+for+VSTS-TFS +Based on [this](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Extension+for+VSTS-TFS) tutorial. ## Prerequisites From 6dfd771b52cef303658bd2bf03bac607d6ed9a91 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Wed, 7 Mar 2018 17:03:10 +0100 Subject: [PATCH 012/168] lab 3 update --- lab-3-analysis-with-sonarqube.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/lab-3-analysis-with-sonarqube.md b/lab-3-analysis-with-sonarqube.md index 18992ba..9fde60a 100644 --- a/lab-3-analysis-with-sonarqube.md +++ b/lab-3-analysis-with-sonarqube.md @@ -12,12 +12,8 @@ Based on [this](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube 1. Create a new project in SonarQube and save the project key -1. Edit build definition - -1. Add task "Prepare analysis on SonarQube" before any Msbuild or VSBuild task - - Install from marketplace if not already in your account - -1. Enter the project key and other details +1. Edit your build definition and add task "Prepare analysis on SonarQube" before any Msbuild or VSBuild task + - Install from marketplace if the task is not already in your account 1. Add task "Run Code Analysis" and "Publish Analysis Results" to your build @@ -28,7 +24,7 @@ Based on [this](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube 1. Save and Queue the build -1. Log on to SonarQube and view the results +1. Log on to SonarQube and review the results ## Next steps From 128aa261ac5574ee673064cf67b41673c3513461 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Fri, 9 Mar 2018 16:32:47 +0100 Subject: [PATCH 013/168] lab 3 and 4 updated --- lab-3-analysis-with-sonarqube.md | 26 ++++++++++++++++++++------ lab-4-feature-toggle.md | 9 ++++++--- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/lab-3-analysis-with-sonarqube.md b/lab-3-analysis-with-sonarqube.md index 9fde60a..920c90b 100644 --- a/lab-3-analysis-with-sonarqube.md +++ b/lab-3-analysis-with-sonarqube.md @@ -10,21 +10,35 @@ Based on [this](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube ## Tasks -1. Create a new project in SonarQube and save the project key +1. Go to your SonarQube site and start the tutorial for creating a new project. Make sure you save the Project Key somewhere safe for later use in VSTS 1. Edit your build definition and add task "Prepare analysis on SonarQube" before any Msbuild or VSBuild task - - Install from marketplace if the task is not already in your account + - Install SonarQube extension from marketplace if the task is not yet available on your VSTS account + - Enter the Project Key and make up a name for your Project + +1. Let the SonarQube scanner use the following additional properties: + - sonar.exclusions=wwwroot/lib/** + - d:sonar.login="\" 1. Add task "Run Code Analysis" and "Publish Analysis Results" to your build 1. Reorder the tasks to respect the following order: - - Prepare Analysis Configuration task before any MSBuild or Visual Studio Build task. - - Run Code Analysis task after the Visual Studio Test task. + - Prepare Analysis Configuration task before any MSBuild or Visual Studio Build task + - Run Code Analysis task after the Visual Studio Test task - Publish Analysis Result task after the Run Code Analysis task -1. Save and Queue the build +1. Save the build, do not queue it. Now edit your Web Application csproj file and add a ProjectGuid. Commit this change to queue the next build. (The dotnet build task will come up with the following warning: The project does not have a valid ProjectGuid. Analysis results for this project will not be uploaded to SonarQube) + -
Click here for an example + + ```xml + + netcoreapp2.0 + c1182fc3-8c56-4d10-b550-965843e9e9b4 + + ``` +
-1. Log on to SonarQube and review the results +1. When the build passes, view the detailed SonarQube report ## Next steps diff --git a/lab-4-feature-toggle.md b/lab-4-feature-toggle.md index 3bb6d83..58aaeec 100644 --- a/lab-4-feature-toggle.md +++ b/lab-4-feature-toggle.md @@ -2,7 +2,7 @@ In this lab, we build a Feature Toggle mechanism in our code. -Based on: https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-FeatureFlagforWebapps.html +Based on [this](https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-FeatureFlagforWebapps.html) article and [this](https://github.com/jason-roberts/FeatureToggle/tree/master/src/Examples/AspDotNetCoreExample) example. ## Prerequisites @@ -10,9 +10,12 @@ Based on: https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-FeatureFlagf ## Tasks -1. Use framework: https://github.com/jason-roberts/FeatureToggle +1. Add the following package to your Web Application: + - FeatureToggle (by Jason Roberts) -1. Example: https://github.com/jason-roberts/FeatureToggle/tree/master/src/Examples/AspDotNetCoreExample +1. Apply the following modifications to your Web Application: + - Add feature class "CheckPhoneNumberFeature" + - Add model class "Contact" 1. Use config to store feature toggle config From effdbfb391e4f8bfbf46c62ecf7bf99677b02a73 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Mon, 12 Mar 2018 10:29:53 +0100 Subject: [PATCH 014/168] renamed getting started, processed feedback on lab 1-2-3 --- README.md | 2 +- lab-1-azure-devops-project-pipeline.md | 4 ++-- lab-2-multi-stage-deployments.md | 10 +++++++--- lab-3-analysis-with-sonarqube.md | 2 +- getting-started.md => prerequisites.md | 2 +- 5 files changed, 12 insertions(+), 8 deletions(-) rename getting-started.md => prerequisites.md (99%) diff --git a/README.md b/README.md index b025866..f699fc0 100644 --- a/README.md +++ b/README.md @@ -4,4 +4,4 @@ These are the hands on labs associated with the Avanade DevOps Practitioners cou You can accomplish these labs using Visual Studio 2017 on your local computer, but you may want to consider doing the labs using an Azure VM as the development machine. This not only keeps you from having to make changes to your local environment, but it gives you additional experience using Azure. -To start setting up your environment, make sure to follow the steps in the [Getting Started](getting-started.md) lab. \ No newline at end of file +To start setting up your environment, make sure to follow the steps in the [Prerequisites](prerequisites.md) lab. \ No newline at end of file diff --git a/lab-1-azure-devops-project-pipeline.md b/lab-1-azure-devops-project-pipeline.md index f57adcf..626f018 100644 --- a/lab-1-azure-devops-project-pipeline.md +++ b/lab-1-azure-devops-project-pipeline.md @@ -6,7 +6,7 @@ Based on [this](https://docs.microsoft.com/en-us/vsts/build-release/apps/cd/azur ## Prerequisites -- Complete [Getting Started](getting-started.md). +- Complete the [Prerequisites](prerequisites.md) lab. ## Tasks @@ -84,4 +84,4 @@ Based on [this](https://docs.microsoft.com/en-us/vsts/build-release/apps/cd/azur ## Next steps -Continue with [Lab 2 - Define your multi-stage continuous deployment process with approvals and gates](lab-2-multi-stage-deployments.md). \ No newline at end of file +Continue with [Lab 2 - Add QA environment and define your multi-stage continuous deployment process with approvals and gates](lab-2-multi-stage-deployments.md). \ No newline at end of file diff --git a/lab-2-multi-stage-deployments.md b/lab-2-multi-stage-deployments.md index 66dec60..a0172b0 100644 --- a/lab-2-multi-stage-deployments.md +++ b/lab-2-multi-stage-deployments.md @@ -1,8 +1,10 @@ -# Avanade DevOps HOL - Lab 2 - Define your multi-stage continuous deployment process with approvals and gates +# Avanade DevOps HOL - Lab 2 - Add QA environment and define your multi-stage continuous deployment process with approvals and gates -In this lab, we setup our multi-stage continuous deployment process by adding approvals and gates. +In this lab, we introduce a QA environment and setup our multi-stage continuous deployment process by adding approvals and gates. -Based on [this](https://docs.microsoft.com/en-us/vsts/build-release/actions/define-multistage-release-process) tutorial. +Based on the following tutorials: +- [Set up staging environments in Azure App Service](https://docs.microsoft.com/en-us/azure/app-service/web-sites-staged-publishing) +- [Define your multi-stage continuous deployment (CD) process](https://docs.microsoft.com/en-us/vsts/build-release/actions/define-multistage-release-process) ## Prerequisites @@ -12,6 +14,8 @@ Based on [this](https://docs.microsoft.com/en-us/vsts/build-release/actions/defi First, let's define the QA environment: +1. Add a QA slot to your App Service in Azure + 1. Add QA environment in VSTS, configure for QA slot in the same App Service 1. Run a new Release diff --git a/lab-3-analysis-with-sonarqube.md b/lab-3-analysis-with-sonarqube.md index 920c90b..14298fa 100644 --- a/lab-3-analysis-with-sonarqube.md +++ b/lab-3-analysis-with-sonarqube.md @@ -6,7 +6,7 @@ Based on [this](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube ## Prerequisites -- Complete [Lab 2 - Define your multi-stage continuous deployment process with approvals and gates](lab-2-multi-stage-deployments.md). +- Complete [Lab 2 - Add QA environment and define your multi-stage continuous deployment process with approvals and gates](lab-2-multi-stage-deployments.md). ## Tasks diff --git a/getting-started.md b/prerequisites.md similarity index 99% rename from getting-started.md rename to prerequisites.md index ec2357b..4572b71 100644 --- a/getting-started.md +++ b/prerequisites.md @@ -1,4 +1,4 @@ -# Avanade DevOps HOL - Getting Started +# Avanade DevOps HOL - Prerequisites In this lab, we will be installing the required development components to setup your lab environment. From 478a619a5ce456c63857dffcd94d839c53e5c018 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Mon, 12 Mar 2018 11:53:03 +0100 Subject: [PATCH 015/168] add (stretch) lab-7 --- lab-6-smoke-testing.md | 2 +- lab-7-security-verification-tests.md | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 lab-7-security-verification-tests.md diff --git a/lab-6-smoke-testing.md b/lab-6-smoke-testing.md index 03a6f9d..4aae6f2 100644 --- a/lab-6-smoke-testing.md +++ b/lab-6-smoke-testing.md @@ -20,4 +20,4 @@ In this lab, we add smoke tests to our test project. ## Next steps -Done! \ No newline at end of file +Continue with [Lab 7 - Security Verification Tests in your CD pipeline](lab-7-security-verification-tests.md). \ No newline at end of file diff --git a/lab-7-security-verification-tests.md b/lab-7-security-verification-tests.md new file mode 100644 index 0000000..09ae3e3 --- /dev/null +++ b/lab-7-security-verification-tests.md @@ -0,0 +1,17 @@ +# Avanade DevOps HOL - Lab 7 - Security Verification Tests in your CD pipeline + +This lab focuses on adding Security Verification Tests to your existing CD pipeline. + +Based on [this](https://github.com/azsdk/azsdk-docs/blob/master/03-Security-In-CICD/Readme.md#enable-azsk-extension-for-your-vsts) tutorial. + +## Prerequisites + +- Complete [Lab 6 - Smoke Testing](lab-6-smoke-testing.md). + +## Tasks + +1. Follow the tutorial to set up Security Verification Tests + +## Next steps + +Done! \ No newline at end of file From 05209bceaa21fb7a4e3be60e4cfe567866c9877b Mon Sep 17 00:00:00 2001 From: andregeuze Date: Mon, 12 Mar 2018 12:40:45 +0100 Subject: [PATCH 016/168] update lab 3 with stretch goals --- lab-3-analysis-with-sonarqube.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lab-3-analysis-with-sonarqube.md b/lab-3-analysis-with-sonarqube.md index 14298fa..e074987 100644 --- a/lab-3-analysis-with-sonarqube.md +++ b/lab-3-analysis-with-sonarqube.md @@ -27,7 +27,7 @@ Based on [this](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube - Run Code Analysis task after the Visual Studio Test task - Publish Analysis Result task after the Run Code Analysis task -1. Save the build, do not queue it. Now edit your Web Application csproj file and add a ProjectGuid. Commit this change to queue the next build. (The dotnet build task will come up with the following warning: The project does not have a valid ProjectGuid. Analysis results for this project will not be uploaded to SonarQube) +1. Save the build, do not queue it. Now edit your Web Application csproj file and add a ProjectGuid. Commit this change to queue the next build. (This is a workaround for the SonarQube runner to work with dotnet core projects, because the dotnet build task will come up with the following warning: The project does not have a valid ProjectGuid. Analysis results for this project will not be uploaded to SonarQube) -
Click here for an example ```xml @@ -40,6 +40,12 @@ Based on [this](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube 1. When the build passes, view the detailed SonarQube report +## Stretch goals + +1. Set up own SonarQube server to use in this lab + +1. Resolve technical debt or issues reported by SonarQube + ## Next steps Continue with [Lab 4 - Feature Toggle](lab-4-feature-toggle.md). \ No newline at end of file From 31c0e9f6dec1c4f9c523e062b604bb9596b003b5 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Tue, 13 Mar 2018 09:31:18 +0100 Subject: [PATCH 017/168] add code examples to lab 4, add local test steps --- lab-4-feature-toggle.md | 177 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 169 insertions(+), 8 deletions(-) diff --git a/lab-4-feature-toggle.md b/lab-4-feature-toggle.md index 58aaeec..d6140d2 100644 --- a/lab-4-feature-toggle.md +++ b/lab-4-feature-toggle.md @@ -1,6 +1,6 @@ # Avanade DevOps HOL - Lab 4 - Feature Toggle -In this lab, we build a Feature Toggle mechanism in our code. +In this lab, we add a Feature Toggle mechanism to our web application. The toggle will be enabled by json config and tested locally. Based on [this](https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-FeatureFlagforWebapps.html) article and [this](https://github.com/jason-roberts/FeatureToggle/tree/master/src/Examples/AspDotNetCoreExample) example. @@ -10,17 +10,178 @@ Based on [this](https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-Featur ## Tasks -1. Add the following package to your Web Application: +1. Add the following NuGet package to your Web Application project: - FeatureToggle (by Jason Roberts) -1. Apply the following modifications to your Web Application: - - Add feature class "CheckPhoneNumberFeature" - - Add model class "Contact" +1. Apply the following code changes to your Web Application: -1. Use config to store feature toggle config + -
Add the feature class "CheckPhoneNumber" in a folder named "Feature" -1. Add page to default MVC project to where you can submit contact information, submit doesn’t do anything. - - Feature toggle is checking for phone number format using reg ex, see https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-FeatureFlagforWebapps.html + ```csharp + using FeatureToggle; + + namespace MyDevOpsApp.Features + { + public class CheckPhoneNumber : SimpleFeatureToggle { } + } + ``` +
+ + -
Add a model class "ContactViewModel", which will be used to bring the Feature Toggle setting to the Contact page + + ```csharp + using FeatureToggle; + + namespace MyDevOpsApp.Models + { + public class ContactViewModel + { + public IFeatureToggle CheckPhoneNumber { get; set; } + + public string Name { get; set; } + + public int PhoneNumber { get; set; } + } + } + ``` +
+ + -
Modify "Controllers/HomeController" to bind the new viewmodel to the Contact page + + ```csharp + ... + + private readonly CheckPhoneNumber _checkPhoneNumber; + + public HomeController(CheckPhoneNumber checkPhoneNumber) + { + _checkPhoneNumber = checkPhoneNumber; + } + + ... + + public IActionResult Contact() + { + ViewData["Message"] = "Your contact page."; + + return View(new ContactViewModel { CheckPhoneNumber = _checkPhoneNumber }); + } + + ... + ``` +
+ + -
Modify "Views/Home/Contact" + + ```csharp + @model MyDevOpsApp.Models.ContactViewModel + + ... + +
+
+
+ + + +
+
+ + + @if (Model.CheckPhoneNumber.FeatureEnabled) + { + @Html.TextBoxFor(m => m.PhoneNumber, new { @class = "form-control", placeholder = "555-555-5555", type = "tel", pattern = "\\d{3}[\\-]\\d{3}[\\-]\\d{4}", id = "phone" }) + } + else + { + @Html.TextBoxFor(m => m.PhoneNumber, new { @class = "form-control", placeholder = "Phone Number", id = "phone" }) + } + + +
+
+ +
+
+ ``` +
+ + -
Modify "Startup" + + ```csharp + public class Startup + { + public Startup(IHostingEnvironment env) + { + var builder = new ConfigurationBuilder() + .SetBasePath(env.ContentRootPath) + .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) + .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) + .AddEnvironmentVariables(); + Configuration = builder.Build(); + } + + public IConfigurationRoot Configuration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + // Set provider config so file is read from content root path + var provider = new AppSettingsProvider { Configuration = Configuration }; + + // Add your feature here + services.AddSingleton(new CheckPhoneNumber { ToggleValueProvider = provider }); + + services.AddMvc(); + } + + ... + } + + ``` +
+ + -
Modify Unit Tests + + Change every occurrence of: + ```csharp + HomeController controller = new HomeController(); + ``` + + to: + ```csharp + HomeController controller = new HomeController(new CheckPhoneNumber()); + ``` +
+ + +1. Use a json config file to store the feature toggle setting + + -
Add config file "appsettings.json" with the feature toggle activated + + ```json + { + "FeatureToggle": { + "CheckPhoneNumber": true + }, + "Logging": { + "IncludeScopes": false, + "LogLevel": { + "Default": "Warning" + } + } + } + ``` +
+ +1. Run the web application locally and test the new Contact form: + 1. Disable the feature by editing the config, reload the page: + 1. Enter any phone number. Notice how no validation error is given + 1. Enable the feature, reload the page: + 1. Enter phone number 0123456789, hit submit, and notice the validation error + 1. Enter phone number 123-123-5678, submit and notice the page refreshes without error + +1. Commit your code changes and let your pipeline do it's job ## Next steps From b3a489fd07898990615b5d7641e99761dd575f25 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Thu, 15 Mar 2018 12:52:49 +0100 Subject: [PATCH 018/168] lab 5 update --- lab-5-ui-testing.md | 136 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 131 insertions(+), 5 deletions(-) diff --git a/lab-5-ui-testing.md b/lab-5-ui-testing.md index 262ac6b..ea0dd23 100644 --- a/lab-5-ui-testing.md +++ b/lab-5-ui-testing.md @@ -2,20 +2,146 @@ In this lab, we add ui tests to our test project. -Based on: https://docs.microsoft.com/en-us/vsts/build-release/test/continuous-test-selenium +Based on the following tutorials: + +- [Get started with Selenium testing in a CD pipeline](https://docs.microsoft.com/en-us/vsts/build-release/test/continuous-test-selenium) +- Documentation on [dotnet vstest](https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-vstest) ## Prerequisites - Complete [Lab 4 - Feature Toggle](lab-4-feature-toggle.md). -## Tasks +## Tasks for local UI Testing 1. Add NuGet packages to the test project: - - Selenium.Support - - Selenium.WebDriver + - Selenium.Support (Includes Selenium.WebDriver) - Selenium.WebDriver.PhantomJS -1. Test the submit contact information +1. Add new class UITests. The test method FillContactInformation will fill out the form in a PhantomJS browser and take screenshots while doing so +
Click here to view the code + + ```csharp + using Microsoft.VisualStudio.TestTools.UnitTesting; + using OpenQA.Selenium.PhantomJS; + using OpenQA.Selenium.Remote; + using System; + using System.IO; + + [TestClass] + public class UITests + { + public TestContext TestContext { get; set; } + + private RemoteWebDriver _driver; + private string _siteUrl; + + [TestInitialize()] + public void MyTestInitialize() + { + if (TestContext.Properties.ContainsKey("siteUrl")) + { + _siteUrl = TestContext.Properties["siteUrl"].ToString(); + } + + _driver = new PhantomJSDriver(Directory.GetCurrentDirectory()); + _driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30); + } + + [TestMethod] + [TestCategory("UI")] + [Priority(1)] + [Owner("PhantomJS")] + + public void FillContactInformation() + { + // Go to the website + _driver.Navigate().GoToUrl(_siteUrl); + _driver.FindElementById("phone").Clear(); + + // Fill in a phone number + _driver.FindElementById("phone").SendKeys("555-555-5555"); + SaveAsImage(_driver.GetScreenshot(), "FillContactInformation-filled.png"); + + // Submit the form + _driver.FindElementById("submit").Click(); + SaveAsImage(_driver.GetScreenshot(), "FillContactInformation-submitted.png"); + + // Assert that the form has been reset to the default value + Assert.AreEqual("0", _driver.FindElementById("phone").GetAttribute("value")); + } + + [TestCleanup()] + public void MyTestCleanup() + { + _driver.Quit(); + } + + private void SaveAsImage(OpenQA.Selenium.Screenshot screenshot, string fileName) + { + if (File.Exists(fileName)) File.Delete(fileName); + + using (var stream = new FileStream(fileName, FileMode.CreateNew)) + using (var w = new BinaryWriter(stream)) + { + w.Write(screenshot.AsByteArray); + } + } + } + ``` +
+ +1. Add new file local.runsettings +
Click here to view the contents + + ```xml + + + + + + + ``` +
+ +1. Configure Visual Studio to [use the runsettings](https://docs.microsoft.com/en-us/visualstudio/test/configure-unit-tests-by-using-a-dot-runsettings-file) file + +1. Run all unit tests and make sure that all succeed + +## Tasks for UI Testing in the QA environment + +1. Edit your Build Definition (save, do not queue) + 1. Change the Test task by adding the following argument: --filter TestCategory!=UI + 1. Add task "Publish build artifact" with the following settings: + - Path: MyUnitTests/bin/$(BuildConfiguration)/netcoreapp2.0 + - Artifact name: tests + - Location: VSTS + +1. Edit your Release Definition + 1. Add task: Visual Studio Test Platform Installer + 1. Add task: .Net Core, custom command + - Command: vstest + - Arguments: MyUnitTests.dll --Logger:trx --Settings:vsts.runsettings --ResultsDirectory:.. --TestCaseFilter:TestCategory=UI --Framework:NETCoreApp,Version=v2.0 + - Working directory: $(System.DefaultWorkingDirectory)/Drop/tests + 1. Add variable "SiteUrl" with Scope "QA" and url "\-qa.azurewebsites.net/Home/Contact" + +1. Add new file vsts.runsettings with "Copy to Output directory" set to "Copy always" +
Click here to view the contents + + ```xml + + + + + + + ``` +
+ +1. dotnet vstest \.dll --Logger:console;verbosity="normal" --Settings:vsts.runsettings --ResultsDirectory:.. --TestCaseFilter:TestCategory=UI --Framework:FrameworkCore10 + +## Stretch goals + +1. Add the screenshots to the test results and upload it to VSTS ## Next steps From fd867c49ab7a303028b9048ee35c05a24dd91898 Mon Sep 17 00:00:00 2001 From: Sander Trijssenaar Date: Fri, 16 Mar 2018 10:20:47 +0100 Subject: [PATCH 019/168] Added SonarLint as stretch --- lab-3-analysis-with-sonarqube.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lab-3-analysis-with-sonarqube.md b/lab-3-analysis-with-sonarqube.md index e074987..df16abf 100644 --- a/lab-3-analysis-with-sonarqube.md +++ b/lab-3-analysis-with-sonarqube.md @@ -43,8 +43,11 @@ Based on [this](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube ## Stretch goals 1. Set up own SonarQube server to use in this lab - -1. Resolve technical debt or issues reported by SonarQube +2. Install 'SonarLint for Visual Studio 2017' via 'Tools/Extensions and Updates...' +3. Configure your Sonar server via Team Explorer/SonarQube +4. Build your application and see the Sonar issues appear in the Error List of Visaul Studio +5. Mark an issue in SonarQube as false positive and rebuild your application +3. Resolve technical debt or issues reported by SonarQube ## Next steps From 6bfcf909d1caedbbdfb09b9d61e0f81b7ff25a5b Mon Sep 17 00:00:00 2001 From: Eric Laan Date: Mon, 19 Mar 2018 14:13:30 +0100 Subject: [PATCH 020/168] added code coverage as stretch for lab 1 --- lab-1-azure-devops-project-pipeline.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lab-1-azure-devops-project-pipeline.md b/lab-1-azure-devops-project-pipeline.md index 626f018..7356f61 100644 --- a/lab-1-azure-devops-project-pipeline.md +++ b/lab-1-azure-devops-project-pipeline.md @@ -76,6 +76,8 @@ Based on [this](https://docs.microsoft.com/en-us/vsts/build-release/apps/cd/azur ## Stretch goals +1. Configure Code Coverage in the build. Update the Visual Studio Test task, queue a build, download the code coverage file and see what code is covered and what is not. + 1. Configure Application Insights on your Web App through the Azure Portal 1. Export the ARM template to set up the Web App in Azure, integrate it in your Release definition From 137b13234b648da4307b95c63f5ff0d42212c400 Mon Sep 17 00:00:00 2001 From: Eric Laan Date: Mon, 19 Mar 2018 14:38:05 +0100 Subject: [PATCH 021/168] Updated order of stretch goals for lab3 --- lab-3-analysis-with-sonarqube.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lab-3-analysis-with-sonarqube.md b/lab-3-analysis-with-sonarqube.md index df16abf..316ce51 100644 --- a/lab-3-analysis-with-sonarqube.md +++ b/lab-3-analysis-with-sonarqube.md @@ -42,12 +42,12 @@ Based on [this](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube ## Stretch goals -1. Set up own SonarQube server to use in this lab -2. Install 'SonarLint for Visual Studio 2017' via 'Tools/Extensions and Updates...' -3. Configure your Sonar server via Team Explorer/SonarQube -4. Build your application and see the Sonar issues appear in the Error List of Visaul Studio -5. Mark an issue in SonarQube as false positive and rebuild your application -3. Resolve technical debt or issues reported by SonarQube +1. Install 'SonarLint for Visual Studio 2017' via 'Tools/Extensions and Updates...' +2. Configure your Sonar server via Team Explorer/SonarQube +3. Build your application and see the Sonar issues appear in the Error List of Visaul Studio +4. Mark an issue in SonarQube as false positive and rebuild your application +5. Resolve technical debt or issues reported by SonarQube +6. Set up own SonarQube server to use in this lab using Bitname ## Next steps From e2d04387ee79c18b50944cf6b623c47f2db59c28 Mon Sep 17 00:00:00 2001 From: tomdebas <37583475+tomdebas@users.noreply.github.com> Date: Tue, 20 Mar 2018 15:38:48 +0100 Subject: [PATCH 022/168] location change and comment Changed the resourcegroup location to West Europe because that's closer to where the course is being held. Maybe its an idea to add in a prerequisite for setting up a git provider (GitHub / VSTS / etc.) considering you need it for lab 1 --- prerequisites.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prerequisites.md b/prerequisites.md index 4572b71..125a7f6 100644 --- a/prerequisites.md +++ b/prerequisites.md @@ -41,7 +41,7 @@ Execute the following steps: $VmAdminUserName = "" $VmAdminPassword ="" $ResourceGroupName = "DevOpsHOL" - $ResourceGroupLocation = "East US 2" + $ResourceGroupLocation = "West Europe" $SecureStringPwd = ConvertTo-SecureString $VmAdminPassword -AsPlainText -Force New-AzureRmResourceGroup -Name $ResourceGroupName -Location $ResourceGroupLocation -Verbose -Force New-AzureRmResourceGroupDeployment -ResourceGroupName $ResourceGroupName ` From bb21c3f4ad8e248c6fd91ee86b3a5e168b670009 Mon Sep 17 00:00:00 2001 From: tomdebas <37583475+tomdebas@users.noreply.github.com> Date: Tue, 20 Mar 2018 17:20:56 +0100 Subject: [PATCH 023/168] Personal AD required If your azure subscription is on the Avanade AD the creation of the devops project will fail due to insufficient permissions. This is fixed by having your own AD and moving the subscription there. --- prerequisites.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prerequisites.md b/prerequisites.md index 125a7f6..a4cb88e 100644 --- a/prerequisites.md +++ b/prerequisites.md @@ -6,7 +6,7 @@ You can either configure an Azure development environment on your own, or use a ## Prerequisites -1. An active Azure subscription +1. An active Azure subscription on a personal AD (Not the Avanade AD). - Visit the [Azure Portal](https://portal.azure.com) 1. An active Visual Studio Team Services account. From 8dd6e9706a68f016ac5948491e96561816344837 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Fri, 23 Mar 2018 11:38:48 +0100 Subject: [PATCH 024/168] reorder some tasks for lab 1, based on feedback --- lab-1-azure-devops-project-pipeline.md | 28 ++++++++++++++------------ 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/lab-1-azure-devops-project-pipeline.md b/lab-1-azure-devops-project-pipeline.md index 7356f61..8cf4a05 100644 --- a/lab-1-azure-devops-project-pipeline.md +++ b/lab-1-azure-devops-project-pipeline.md @@ -1,6 +1,6 @@ # Avanade DevOps HOL - Lab 1 - Create a CI/CD pipeline for .NET with the Azure DevOps Project -In this lab, we create our own application in Visual Studio with Unit Tests and setup a DevOps Project in Azure to create our CI/CD pipeline. +In this lab, we setup our DevOps Project in Azure to create our CI/CD pipeline. This will provide us with a standard code base to work with. Based on [this](https://docs.microsoft.com/en-us/vsts/build-release/apps/cd/azure/azure-devops-project-aspnetcore) tutorial. @@ -10,10 +10,19 @@ Based on [this](https://docs.microsoft.com/en-us/vsts/build-release/apps/cd/azur ## Tasks -1. Create a new project in visual studio: - - ASP.NET Core 2.0 Web Application (MVC) +1. Go to your Azure Portal and create a new DevOps Project. Make sure it meets the following demands: + - ASP.NET Core Web App on Windows + - Linked to your existing VSTS account + +1. When the azure resources are created, go to your VSTS account and make sure that: + - The first Build and Release are successful + - The App is deployed and accessable + +1. Clone your code repository to your development environment and edit your solution in Visual Studio: + - Upgrade the project to ASP.NET Core 2.0 + - Update all NuGet packages to their 2.x counterparts -1. Add new Unit Test Project (.NET Core) + unit test +1. Add a new Unit Test Project (.NET Core) + unit test -
Click here to expand the sample unit test code ```csharp @@ -65,14 +74,9 @@ Based on [this](https://docs.microsoft.com/en-us/vsts/build-release/apps/cd/azur 1. Build your solution and run the unit tests. Make sure that the tests pass -1. Commit your code to your favourite git provider (GitHub / VSTS / etc.) +1. In VSTS, edit your build definition to support .NET Core 2.0 -1. Go to your Azure Portal and create a new DevOps Project. Make sure it meets the following demands: - - Using your own code - - WebApp on Windows - - Linked to your VSTS account - -1. When the azure resources are created, go to your VSTS account and make sure that your first Build and Release are successful. If any errors occur, try and fix them by yourself or team up with your neighbour +1. Commit your code to trigger a build/release ## Stretch goals @@ -82,8 +86,6 @@ Based on [this](https://docs.microsoft.com/en-us/vsts/build-release/apps/cd/azur 1. Export the ARM template to set up the Web App in Azure, integrate it in your Release definition -1. Configure unit test in build with argument !Integration - ## Next steps Continue with [Lab 2 - Add QA environment and define your multi-stage continuous deployment process with approvals and gates](lab-2-multi-stage-deployments.md). \ No newline at end of file From ccc00c6273e81a1cfbf9f536565e7fa1cf7b109b Mon Sep 17 00:00:00 2001 From: andregeuze Date: Fri, 23 Mar 2018 13:23:36 +0100 Subject: [PATCH 025/168] lab 4 update; startup code cleanup --- lab-4-feature-toggle.md | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/lab-4-feature-toggle.md b/lab-4-feature-toggle.md index d6140d2..1602224 100644 --- a/lab-4-feature-toggle.md +++ b/lab-4-feature-toggle.md @@ -111,17 +111,7 @@ Based on [this](https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-Featur ```csharp public class Startup { - public Startup(IHostingEnvironment env) - { - var builder = new ConfigurationBuilder() - .SetBasePath(env.ContentRootPath) - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) - .AddEnvironmentVariables(); - Configuration = builder.Build(); - } - - public IConfigurationRoot Configuration { get; } + ... // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) @@ -157,7 +147,7 @@ Based on [this](https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-Featur 1. Use a json config file to store the feature toggle setting - -
Add config file "appsettings.json" with the feature toggle activated + -
Modify config file "appsettings.json" with the feature toggle activated ```json { From 693d9f3d75f4705c78e978f09248183e5a44e03d Mon Sep 17 00:00:00 2001 From: andregeuze Date: Fri, 23 Mar 2018 14:29:03 +0100 Subject: [PATCH 026/168] lab 5 updated with working UI test steps --- lab-5-ui-testing.md | 218 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 169 insertions(+), 49 deletions(-) diff --git a/lab-5-ui-testing.md b/lab-5-ui-testing.md index ea0dd23..36018f6 100644 --- a/lab-5-ui-testing.md +++ b/lab-5-ui-testing.md @@ -13,19 +13,136 @@ Based on the following tutorials: ## Tasks for local UI Testing -1. Add NuGet packages to the test project: +1. Add a new Unit Test Project (.NET Framework 4.7.1) + unit test and add the following NuGet packages: - Selenium.Support (Includes Selenium.WebDriver) - Selenium.WebDriver.PhantomJS + - (optional)Selenium.WebDriver.IEDriver + - (optional)Selenium.Chrome.WebDriver -1. Add new class UITests. The test method FillContactInformation will fill out the form in a PhantomJS browser and take screenshots while doing so +1. Add new file local.runsettings +
Click here to view the contents + + ```xml + + + + + + + ``` +
+ +1. Add folder PageObjects and add classes for all the pages + -
Code for BasePage + + ```csharp + abstract class BasePage + { + protected readonly IWebDriver Driver; + protected readonly string BaseUrl; + + protected BasePage(IWebDriver driver, string baseUrl) + { + Driver = driver; + BaseUrl = baseUrl; + } + + public HomePage GoToHomePage() + { + var home = Driver.FindElement(By.LinkText("Home")); + home.Click(); + return new HomePage(Driver, BaseUrl); + } + + public AboutPage GoToAboutPage() + { + var about = Driver.FindElement(By.LinkText("About")); + about.Click(); + return new AboutPage(Driver, BaseUrl); + } + + public ContactPage GoToContactPage() + { + var contact = Driver.FindElement(By.LinkText("Contact")); + contact.Click(); + return new ContactPage(Driver, BaseUrl); + } + } + ``` +
+ + -
Code for Home page + + ```csharp + class HomePage : BasePage + { + public HomePage(IWebDriver driver, string baseUrl) : base(driver, baseUrl) + { + } + + public string Title { get; set; } + + public void GoToPage() + { + Driver.Navigate().GoToUrl($"{BaseUrl}"); + } + } + ``` +
+ + -
Code for About page + + ```csharp + class AboutPage : BasePage + { + public AboutPage(IWebDriver driver, string baseUrl) : base(driver, baseUrl) + { + } + + [FindsBy(How = How.ClassName, Using = "fusion-main-menu-icon")] + private IWebElement searchIcon; + + public void GoToPage() + { + Driver.Navigate().GoToUrl($"{BaseUrl}/Home/About"); + } + } + ``` +
+ + -
Code for Contact page + + ```csharp + class ContactPage : BasePage + { + public ContactPage(IWebDriver driver, string baseUrl) : base(driver, baseUrl) + { + } + + [FindsBy(How = How.ClassName, Using = "fusion-main-menu-icon")] + private IWebElement searchIcon; + + public void GoToPage() + { + Driver.Navigate().GoToUrl($"{BaseUrl}/Home/Contact"); + } + } + ``` +
+ + +1. Add new class UITests
Click here to view the code ```csharp using Microsoft.VisualStudio.TestTools.UnitTesting; + using OpenQA.Selenium; using OpenQA.Selenium.PhantomJS; using OpenQA.Selenium.Remote; using System; + using System.Drawing; using System.IO; + using UITests.PageObjects; [TestClass] public class UITests @@ -38,13 +155,25 @@ Based on the following tutorials: [TestInitialize()] public void MyTestInitialize() { - if (TestContext.Properties.ContainsKey("siteUrl")) + if (TestContext.Properties.Contains("siteUrl")) { _siteUrl = TestContext.Properties["siteUrl"].ToString(); } + // PhantomJS _driver = new PhantomJSDriver(Directory.GetCurrentDirectory()); - _driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30); + + // Chrome + //var options =new ChromeOptions(); + //options.AddArguments("headless"); + //_driver = new ChromeDriver(Directory.GetCurrentDirectory(),options); + + // Internet Explorer + //_driver = new InternetExplorerDriver(Directory.GetCurrentDirectory()); + + // Shared driver settings + _driver.Manage().Window.Size = new Size(1920, 1080); + _driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(10); } [TestMethod] @@ -52,22 +181,23 @@ Based on the following tutorials: [Priority(1)] [Owner("PhantomJS")] - public void FillContactInformation() + public void Test() { - // Go to the website - _driver.Navigate().GoToUrl(_siteUrl); - _driver.FindElementById("phone").Clear(); - - // Fill in a phone number - _driver.FindElementById("phone").SendKeys("555-555-5555"); - SaveAsImage(_driver.GetScreenshot(), "FillContactInformation-filled.png"); - - // Submit the form - _driver.FindElementById("submit").Click(); - SaveAsImage(_driver.GetScreenshot(), "FillContactInformation-submitted.png"); - - // Assert that the form has been reset to the default value - Assert.AreEqual("0", _driver.FindElementById("phone").GetAttribute("value")); + try + { + var page = new HomePage(_driver, _siteUrl); + page.GoToPage(); + SaveAsImage(_driver.GetScreenshot(), "Home.png"); + page.GoToContactPage(); + SaveAsImage(_driver.GetScreenshot(), "Contact.png"); + page.GoToAboutPage(); + SaveAsImage(_driver.GetScreenshot(), "About.png"); + } + catch (NoSuchElementException) + { + SaveAsImage(_driver.GetScreenshot(), "Error.png"); + throw; + } } [TestCleanup()] @@ -76,8 +206,10 @@ Based on the following tutorials: _driver.Quit(); } - private void SaveAsImage(OpenQA.Selenium.Screenshot screenshot, string fileName) + private void SaveAsImage(OpenQA.Selenium.Screenshot screenshot, string name) { + var timestamp = DateTime.UtcNow.ToString("yyyyMMdd-HHmmss.fff"); + var fileName = $"{timestamp} {name}"; if (File.Exists(fileName)) File.Delete(fileName); using (var stream = new FileStream(fileName, FileMode.CreateNew)) @@ -85,63 +217,51 @@ Based on the following tutorials: { w.Write(screenshot.AsByteArray); } + TestContext.AddResultFile(Path.Combine(Directory.GetCurrentDirectory(), fileName)); } } ```
-1. Add new file local.runsettings +1. Configure Visual Studio to [use the local.runsettings](https://docs.microsoft.com/en-us/visualstudio/test/configure-unit-tests-by-using-a-dot-runsettings-file) file + +1. Run all unit tests and make sure that all succeed + +## Tasks for UI Testing in the QA environment + +1. Add new file vsts.runsettings with "Copy to Output directory" set to "Copy always"
Click here to view the contents ```xml - + ```
-1. Configure Visual Studio to [use the runsettings](https://docs.microsoft.com/en-us/visualstudio/test/configure-unit-tests-by-using-a-dot-runsettings-file) file - -1. Run all unit tests and make sure that all succeed - -## Tasks for UI Testing in the QA environment - 1. Edit your Build Definition (save, do not queue) 1. Change the Test task by adding the following argument: --filter TestCategory!=UI 1. Add task "Publish build artifact" with the following settings: - - Path: MyUnitTests/bin/$(BuildConfiguration)/netcoreapp2.0 + - Path: UITests/bin/$(BuildConfiguration) - Artifact name: tests - Location: VSTS -1. Edit your Release Definition +1. Edit your Release Definition, QA environment 1. Add task: Visual Studio Test Platform Installer - 1. Add task: .Net Core, custom command - - Command: vstest - - Arguments: MyUnitTests.dll --Logger:trx --Settings:vsts.runsettings --ResultsDirectory:.. --TestCaseFilter:TestCategory=UI --Framework:NETCoreApp,Version=v2.0 - - Working directory: $(System.DefaultWorkingDirectory)/Drop/tests + 1. Add task: Visual Studio Test + - Search folder: $(System.DefaultWorkingDirectory)/tests + - Settings file: vsts.runsettings + - Test filter criteria: TestCategory=UI 1. Add variable "SiteUrl" with Scope "QA" and url "\-qa.azurewebsites.net/Home/Contact" -1. Add new file vsts.runsettings with "Copy to Output directory" set to "Copy always" -
Click here to view the contents - - ```xml - - - - - - - ``` -
- -1. dotnet vstest \.dll --Logger:console;verbosity="normal" --Settings:vsts.runsettings --ResultsDirectory:.. --TestCaseFilter:TestCategory=UI --Framework:FrameworkCore10 +1. Commit your code to trigger a build and release ## Stretch goals -1. Add the screenshots to the test results and upload it to VSTS +1. Run the same UI test with a different driver (Chrome, Internet Explorer) ## Next steps From 8b7c87c026251b7ad62bad77fa29f006f327a609 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Fri, 23 Mar 2018 14:30:36 +0100 Subject: [PATCH 027/168] minor text fix on lab 1 and 5 --- lab-1-azure-devops-project-pipeline.md | 2 +- lab-5-ui-testing.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lab-1-azure-devops-project-pipeline.md b/lab-1-azure-devops-project-pipeline.md index 8cf4a05..67c5606 100644 --- a/lab-1-azure-devops-project-pipeline.md +++ b/lab-1-azure-devops-project-pipeline.md @@ -22,7 +22,7 @@ Based on [this](https://docs.microsoft.com/en-us/vsts/build-release/apps/cd/azur - Upgrade the project to ASP.NET Core 2.0 - Update all NuGet packages to their 2.x counterparts -1. Add a new Unit Test Project (.NET Core) + unit test +1. Add a new Unit Test Project (.NET Core) + unit test class HomeControllerTest -
Click here to expand the sample unit test code ```csharp diff --git a/lab-5-ui-testing.md b/lab-5-ui-testing.md index 36018f6..d658fe5 100644 --- a/lab-5-ui-testing.md +++ b/lab-5-ui-testing.md @@ -13,7 +13,7 @@ Based on the following tutorials: ## Tasks for local UI Testing -1. Add a new Unit Test Project (.NET Framework 4.7.1) + unit test and add the following NuGet packages: +1. Add a new Unit Test Project (.NET Framework 4.7.1) and add the following NuGet packages: - Selenium.Support (Includes Selenium.WebDriver) - Selenium.WebDriver.PhantomJS - (optional)Selenium.WebDriver.IEDriver From 3956885a825880d29cc5d5b336989a619cf684f1 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Fri, 23 Mar 2018 14:38:00 +0100 Subject: [PATCH 028/168] add framework 4.7.1 requirement --- prerequisites.md | 1 + 1 file changed, 1 insertion(+) diff --git a/prerequisites.md b/prerequisites.md index 4572b71..7956481 100644 --- a/prerequisites.md +++ b/prerequisites.md @@ -21,6 +21,7 @@ You can either configure an Azure development environment on your own, or use a - ASP.NET and web development - Azure development (including PowerShell tools) - .NET Core cross-platform development + - .NET Framework 4.7.1 SDK ## Optional: Setup through PowerShell From 23adf0173c83d3d66a6245b03e200c7e23e46d10 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Fri, 23 Mar 2018 15:59:00 +0100 Subject: [PATCH 029/168] update lab 5 steps --- lab-5-ui-testing.md | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/lab-5-ui-testing.md b/lab-5-ui-testing.md index d658fe5..4cf5cfd 100644 --- a/lab-5-ui-testing.md +++ b/lab-5-ui-testing.md @@ -236,13 +236,16 @@ Based on the following tutorials: - + ```
1. Edit your Build Definition (save, do not queue) + 1. Add task "NuGet restore": + - Set the path to your UITest project's packages.config + - Advanced > Destination: ../packages 1. Change the Test task by adding the following argument: --filter TestCategory!=UI 1. Add task "Publish build artifact" with the following settings: - Path: UITests/bin/$(BuildConfiguration) @@ -250,12 +253,16 @@ Based on the following tutorials: - Location: VSTS 1. Edit your Release Definition, QA environment - 1. Add task: Visual Studio Test Platform Installer + 1. Add task: Replace Tokens + - Root directory: $(System.DefaultWorkingDirectory)/Drop/tests + - Target files: **/*.runsettings + - Token prefix: #{ + - Token suffic: }# 1. Add task: Visual Studio Test - - Search folder: $(System.DefaultWorkingDirectory)/tests - - Settings file: vsts.runsettings + - Search folder: $(System.DefaultWorkingDirectory)/Drop/tests - Test filter criteria: TestCategory=UI - 1. Add variable "SiteUrl" with Scope "QA" and url "\-qa.azurewebsites.net/Home/Contact" + - Settings file: $(System.DefaultWorkingDirectory)/Drop/tests/vsts.runsettings + 1. Add variable "SiteUrl" with Scope "QA" and url "\-qa.azurewebsites.net" 1. Commit your code to trigger a build and release From 70f96d59b0c969c235109fd78641695d4e8ec9b2 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Fri, 23 Mar 2018 17:59:15 +0100 Subject: [PATCH 030/168] lab 5 work completed --- lab-5-ui-testing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lab-5-ui-testing.md b/lab-5-ui-testing.md index 4cf5cfd..cda3733 100644 --- a/lab-5-ui-testing.md +++ b/lab-5-ui-testing.md @@ -262,7 +262,7 @@ Based on the following tutorials: - Search folder: $(System.DefaultWorkingDirectory)/Drop/tests - Test filter criteria: TestCategory=UI - Settings file: $(System.DefaultWorkingDirectory)/Drop/tests/vsts.runsettings - 1. Add variable "SiteUrl" with Scope "QA" and url "\-qa.azurewebsites.net" + 1. Add variable "SiteUrl" with Scope "QA" and url "https://\-qa.azurewebsites.net" 1. Commit your code to trigger a build and release From d3a5eae6794515c13200b5e9b0bbc61e86b209dc Mon Sep 17 00:00:00 2001 From: andregeuze Date: Fri, 23 Mar 2018 18:14:00 +0100 Subject: [PATCH 031/168] typo fix in lab 5 --- lab-5-ui-testing.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lab-5-ui-testing.md b/lab-5-ui-testing.md index cda3733..899980f 100644 --- a/lab-5-ui-testing.md +++ b/lab-5-ui-testing.md @@ -13,7 +13,7 @@ Based on the following tutorials: ## Tasks for local UI Testing -1. Add a new Unit Test Project (.NET Framework 4.7.1) and add the following NuGet packages: +1. Add a new Unit Test Project "Tests" (.NET Framework 4.7.1) and add the following NuGet packages: - Selenium.Support (Includes Selenium.WebDriver) - Selenium.WebDriver.PhantomJS - (optional)Selenium.WebDriver.IEDriver @@ -142,7 +142,7 @@ Based on the following tutorials: using System; using System.Drawing; using System.IO; - using UITests.PageObjects; + using Tests.PageObjects; [TestClass] public class UITests @@ -244,11 +244,11 @@ Based on the following tutorials: 1. Edit your Build Definition (save, do not queue) 1. Add task "NuGet restore": - - Set the path to your UITest project's packages.config + - Set the path to your Test project's packages.config - Advanced > Destination: ../packages 1. Change the Test task by adding the following argument: --filter TestCategory!=UI 1. Add task "Publish build artifact" with the following settings: - - Path: UITests/bin/$(BuildConfiguration) + - Path: Tests/bin/$(BuildConfiguration) - Artifact name: tests - Location: VSTS From 0476f43eac001a7fe1b1f3b35d4f0410b589efdd Mon Sep 17 00:00:00 2001 From: andregeuze Date: Fri, 23 Mar 2018 18:17:25 +0100 Subject: [PATCH 032/168] add final step to lab 5 --- lab-5-ui-testing.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lab-5-ui-testing.md b/lab-5-ui-testing.md index 899980f..2b2e252 100644 --- a/lab-5-ui-testing.md +++ b/lab-5-ui-testing.md @@ -266,6 +266,8 @@ Based on the following tutorials: 1. Commit your code to trigger a build and release +1. Upon Release completion, review the Test results and the uploaded screenshots + ## Stretch goals 1. Run the same UI test with a different driver (Chrome, Internet Explorer) From ae2b6089ef213ebb73f4b253a8414dc0b04ca01c Mon Sep 17 00:00:00 2001 From: andregeuze Date: Sat, 24 Mar 2018 02:24:08 +0100 Subject: [PATCH 033/168] lab 6 update finished --- lab-6-smoke-testing.md | 66 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 60 insertions(+), 6 deletions(-) diff --git a/lab-6-smoke-testing.md b/lab-6-smoke-testing.md index 4aae6f2..1c7b2ef 100644 --- a/lab-6-smoke-testing.md +++ b/lab-6-smoke-testing.md @@ -8,15 +8,69 @@ In this lab, we add smoke tests to our test project. ## Tasks -1. Add new class IntegrationTests to the test project +1. Edit your build definition. Let the Test task ignore both "UI" and "Smoke" categories -1. Implement an integration test that checks if your website is up and running - - Hint: WebRequest.CreateHttp +1. Edit your release definition, Production environment: + 1. Add task "Replace Tokens", similar to the one in QA + 1. Add task: Visual Studio Test + - Search folder: $(System.DefaultWorkingDirectory)/Drop/tests + - Test filter criteria: TestCategory=Smoke + - Settings file: $(System.DefaultWorkingDirectory)/Drop/tests/vsts.runsettings + 1. Add variable "SiteUrl" with Scope "Production" and url "https://\.azurewebsites.net" -1. Create a new xml file "local.runsettings" with a configurable website url +1. Add new class SmokeTests to your test project with the UITests +
Code for the SmokeTests class -1. Create a new xml file "integration.runsettings" containing a VSTS variable token for the same website url variable - - Set "Copy to output directory" on "Copy if newer" + ```csharp + [TestClass] + public class SmokeTests + { + public TestContext TestContext { get; set; } + + private string _siteUrl; + private int _timeout; + + [TestInitialize()] + public void MyTestInitialize() + { + if (TestContext.Properties.Contains("siteUrl")) + { + _siteUrl = TestContext.Properties["siteUrl"].ToString(); + } + + _timeout = 30000; + } + + [TestMethod] + [TestCategory("Smoke")] + public void ValidateSiteIsAvailable() + { + try + { + var request = WebRequest.CreateHttp(_siteUrl); + request.Timeout = _timeout; + request.ReadWriteTimeout = _timeout; + using (var response = (HttpWebResponse)request.GetResponse()) + { + // Assert + Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); + } + } + catch (Exception ex) + { + Console.WriteLine("Exception: {0}", ex.Message); + Assert.Fail(ex.Message); + } + } + } + ``` +
+ +1. Commit your code change and make sure your build and release succeed. Both your QA and Production environment should be updated. QA should have run a Smoke and UI Test, with resulting screenshots from the UI Test. Production should have run a Smoke test only + +## Stretch goals + +1. Refactor all the hardcoded timeout values to a variable in the runsettings file. Make them tokenized for replacement during the Release ## Next steps From 9e3797e06d67b578b2c503b74664ca8a0743de71 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Sat, 24 Mar 2018 14:24:10 +0100 Subject: [PATCH 034/168] Fix typos and rewrite some instructions --- lab-3-analysis-with-sonarqube.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/lab-3-analysis-with-sonarqube.md b/lab-3-analysis-with-sonarqube.md index 316ce51..d9ee816 100644 --- a/lab-3-analysis-with-sonarqube.md +++ b/lab-3-analysis-with-sonarqube.md @@ -10,15 +10,14 @@ Based on [this](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube ## Tasks -1. Go to your SonarQube site and start the tutorial for creating a new project. Make sure you save the Project Key somewhere safe for later use in VSTS +1. Login to SonarQube and start the tutorial for creating a new project. Make sure you save the Token and Project Key somewhere safe for later use in VSTS 1. Edit your build definition and add task "Prepare analysis on SonarQube" before any Msbuild or VSBuild task - - Install SonarQube extension from marketplace if the task is not yet available on your VSTS account - - Enter the Project Key and make up a name for your Project - -1. Let the SonarQube scanner use the following additional properties: - - sonar.exclusions=wwwroot/lib/** - - d:sonar.login="\" + - Install SonarQube extension from marketplace if the task is not yet available on your VSTS account + - Enter the Project Key and make up a name for your Project + - Use the following additional properties: + - sonar.exclusions=wwwroot/lib/** + - d:sonar.login="\" 1. Add task "Run Code Analysis" and "Publish Analysis Results" to your build @@ -47,7 +46,7 @@ Based on [this](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube 3. Build your application and see the Sonar issues appear in the Error List of Visaul Studio 4. Mark an issue in SonarQube as false positive and rebuild your application 5. Resolve technical debt or issues reported by SonarQube -6. Set up own SonarQube server to use in this lab using Bitname +6. Set up own SonarQube server to use in this lab using Bitnami ## Next steps From e6d440dbd1c3270a2e7869fc69baafa3acf2536c Mon Sep 17 00:00:00 2001 From: andregeuze Date: Sat, 24 Mar 2018 15:41:31 +0100 Subject: [PATCH 035/168] minor text changes --- lab-5-ui-testing.md | 2 +- lab-6-smoke-testing.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lab-5-ui-testing.md b/lab-5-ui-testing.md index 2b2e252..4d8c57f 100644 --- a/lab-5-ui-testing.md +++ b/lab-5-ui-testing.md @@ -248,7 +248,7 @@ Based on the following tutorials: - Advanced > Destination: ../packages 1. Change the Test task by adding the following argument: --filter TestCategory!=UI 1. Add task "Publish build artifact" with the following settings: - - Path: Tests/bin/$(BuildConfiguration) + - Path: \/bin/$(BuildConfiguration) - Artifact name: tests - Location: VSTS diff --git a/lab-6-smoke-testing.md b/lab-6-smoke-testing.md index 1c7b2ef..348ddac 100644 --- a/lab-6-smoke-testing.md +++ b/lab-6-smoke-testing.md @@ -38,7 +38,7 @@ In this lab, we add smoke tests to our test project. _siteUrl = TestContext.Properties["siteUrl"].ToString(); } - _timeout = 30000; + _timeout = 60000; } [TestMethod] From 21dcf271f8098acce97c65b0a6c1bbddca142716 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Sat, 24 Mar 2018 15:44:26 +0100 Subject: [PATCH 036/168] fix typo --- lab-5-ui-testing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lab-5-ui-testing.md b/lab-5-ui-testing.md index 4d8c57f..0f92c9f 100644 --- a/lab-5-ui-testing.md +++ b/lab-5-ui-testing.md @@ -257,7 +257,7 @@ Based on the following tutorials: - Root directory: $(System.DefaultWorkingDirectory)/Drop/tests - Target files: **/*.runsettings - Token prefix: #{ - - Token suffic: }# + - Token suffix: }# 1. Add task: Visual Studio Test - Search folder: $(System.DefaultWorkingDirectory)/Drop/tests - Test filter criteria: TestCategory=UI From 03852ae49501bdc9b9827a32fa7ff7b15dafde5f Mon Sep 17 00:00:00 2001 From: andregeuze Date: Mon, 26 Mar 2018 11:51:43 +0200 Subject: [PATCH 037/168] change some texts in lab 1 --- lab-1-azure-devops-project-pipeline.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lab-1-azure-devops-project-pipeline.md b/lab-1-azure-devops-project-pipeline.md index 67c5606..a3b405b 100644 --- a/lab-1-azure-devops-project-pipeline.md +++ b/lab-1-azure-devops-project-pipeline.md @@ -22,6 +22,9 @@ Based on [this](https://docs.microsoft.com/en-us/vsts/build-release/apps/cd/azur - Upgrade the project to ASP.NET Core 2.0 - Update all NuGet packages to their 2.x counterparts +1. Edit your project file + - Remove the line "\$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;\" + 1. Add a new Unit Test Project (.NET Core) + unit test class HomeControllerTest -
Click here to expand the sample unit test code @@ -74,15 +77,16 @@ Based on [this](https://docs.microsoft.com/en-us/vsts/build-release/apps/cd/azur 1. Build your solution and run the unit tests. Make sure that the tests pass -1. In VSTS, edit your build definition to support .NET Core 2.0 +1. In VSTS, edit your build definition to support .NET Core 2.0.3 + - Open task "NET Core Tool Installer" and change version to 2.0.3 -1. Commit your code to trigger a build/release +1. Push your code to trigger a build/release ## Stretch goals 1. Configure Code Coverage in the build. Update the Visual Studio Test task, queue a build, download the code coverage file and see what code is covered and what is not. -1. Configure Application Insights on your Web App through the Azure Portal +1. Add custom logging to Application Insights through your Web App 1. Export the ARM template to set up the Web App in Azure, integrate it in your Release definition From b5e8084ce933f3259ba22361caf4a732dc9f95c4 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Mon, 26 Mar 2018 12:13:35 +0200 Subject: [PATCH 038/168] change Unit Test MSTest Test project --- lab-1-azure-devops-project-pipeline.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lab-1-azure-devops-project-pipeline.md b/lab-1-azure-devops-project-pipeline.md index a3b405b..caf17a8 100644 --- a/lab-1-azure-devops-project-pipeline.md +++ b/lab-1-azure-devops-project-pipeline.md @@ -25,7 +25,7 @@ Based on [this](https://docs.microsoft.com/en-us/vsts/build-release/apps/cd/azur 1. Edit your project file - Remove the line "\$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;\" -1. Add a new Unit Test Project (.NET Core) + unit test class HomeControllerTest +1. Add a new MSTest Test Project (.NET Core) and add a unit test class named "HomeControllerTest" -
Click here to expand the sample unit test code ```csharp From 19811ab04f15434594169dc81f21f543b85fe972 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Mon, 26 Mar 2018 12:15:11 +0200 Subject: [PATCH 039/168] little rewrite --- lab-1-azure-devops-project-pipeline.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lab-1-azure-devops-project-pipeline.md b/lab-1-azure-devops-project-pipeline.md index caf17a8..a985d09 100644 --- a/lab-1-azure-devops-project-pipeline.md +++ b/lab-1-azure-devops-project-pipeline.md @@ -78,7 +78,7 @@ Based on [this](https://docs.microsoft.com/en-us/vsts/build-release/apps/cd/azur 1. Build your solution and run the unit tests. Make sure that the tests pass 1. In VSTS, edit your build definition to support .NET Core 2.0.3 - - Open task "NET Core Tool Installer" and change version to 2.0.3 + - Open task "NET Core Tool Installer" and change the version field to 2.0.3 (Do not change task version) 1. Push your code to trigger a build/release From a259373595aef42ec7b4e0919dc5544de3cb2e61 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Mon, 26 Mar 2018 12:23:56 +0200 Subject: [PATCH 040/168] change text on lab 1 and 2 --- lab-1-azure-devops-project-pipeline.md | 10 ++++------ lab-2-multi-stage-deployments.md | 6 ++++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lab-1-azure-devops-project-pipeline.md b/lab-1-azure-devops-project-pipeline.md index a985d09..299ae0c 100644 --- a/lab-1-azure-devops-project-pipeline.md +++ b/lab-1-azure-devops-project-pipeline.md @@ -18,11 +18,11 @@ Based on [this](https://docs.microsoft.com/en-us/vsts/build-release/apps/cd/azur - The first Build and Release are successful - The App is deployed and accessable -1. Clone your code repository to your development environment and edit your solution in Visual Studio: - - Upgrade the project to ASP.NET Core 2.0 - - Update all NuGet packages to their 2.x counterparts +1. Clone your code repository to your development environment and open your solution in Visual Studio: + - Upgrade the project to ASP.NET Core 2.0 (Right-click project > Properties) + - Update all NuGet packages to their 2.x counterparts (Right-click project > Manage NuGet packages) -1. Edit your project file +1. Right-click the project and Unload it. Now edit your project file: - Remove the line "\$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;\" 1. Add a new MSTest Test Project (.NET Core) and add a unit test class named "HomeControllerTest" @@ -84,8 +84,6 @@ Based on [this](https://docs.microsoft.com/en-us/vsts/build-release/apps/cd/azur ## Stretch goals -1. Configure Code Coverage in the build. Update the Visual Studio Test task, queue a build, download the code coverage file and see what code is covered and what is not. - 1. Add custom logging to Application Insights through your Web App 1. Export the ARM template to set up the Web App in Azure, integrate it in your Release definition diff --git a/lab-2-multi-stage-deployments.md b/lab-2-multi-stage-deployments.md index a0172b0..c18ccae 100644 --- a/lab-2-multi-stage-deployments.md +++ b/lab-2-multi-stage-deployments.md @@ -14,9 +14,11 @@ Based on the following tutorials: First, let's define the QA environment: -1. Add a QA slot to your App Service in Azure +1. Add a QA Deployment Slot to your App Service in Azure -1. Add QA environment in VSTS, configure for QA slot in the same App Service +1. Add a QA environment to your Release Definiton in VSTS + +1. Configure the deployment step for the QA slot in the same App Service 1. Run a new Release From 7a3170e60dbdc7ebcb707188e40f4226e890c354 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Mon, 26 Mar 2018 12:30:51 +0200 Subject: [PATCH 041/168] add image for clarification --- images/lab-1-netcoreversion.png | Bin 0 -> 6345 bytes lab-1-azure-devops-project-pipeline.md | 1 + 2 files changed, 1 insertion(+) create mode 100644 images/lab-1-netcoreversion.png diff --git a/images/lab-1-netcoreversion.png b/images/lab-1-netcoreversion.png new file mode 100644 index 0000000000000000000000000000000000000000..bc16f412a227fa8c8a72943a3546e2ccce2367c8 GIT binary patch literal 6345 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 Date: Mon, 26 Mar 2018 20:27:13 +0200 Subject: [PATCH 042/168] updated lab 3 with image and better description --- images/lab-3-tutorial.png | Bin 0 -> 5744 bytes lab-3-analysis-with-sonarqube.md | 31 +++++++++++++++++++++---------- 2 files changed, 21 insertions(+), 10 deletions(-) create mode 100644 images/lab-3-tutorial.png diff --git a/images/lab-3-tutorial.png b/images/lab-3-tutorial.png new file mode 100644 index 0000000000000000000000000000000000000000..5848d7881186ed1b2b396dd58ab3f0d7e52d669b GIT binary patch literal 5744 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 here for an example +1. Save the build, do not queue it. + +1. Edit your Web Application's Project file (csproj) and add a ProjectGuid. This is a workaround for the SonarQube runner to work with dotnet core projects, because the dotnet build task will come up with the following warning: "```The project does not have a valid ProjectGuid. Analysis results for this project will not be uploaded to SonarQube```". + -
Click here for the project file change ```xml netcoreapp2.0 + + ... + c1182fc3-8c56-4d10-b550-965843e9e9b4 ```
-1. When the build passes, view the detailed SonarQube report +1. Once the project file is updated, push these changes to queue the next build. + +1. When the build process has finished, open the latest build and click on "Detailed SonarQube report" in the build Summary tab. Review the project analysis on the SonarQube site. ## Stretch goals 1. Install 'SonarLint for Visual Studio 2017' via 'Tools/Extensions and Updates...' 2. Configure your Sonar server via Team Explorer/SonarQube -3. Build your application and see the Sonar issues appear in the Error List of Visaul Studio +3. Build your application and see the Sonar issues appear in the Error List of Visual Studio 4. Mark an issue in SonarQube as false positive and rebuild your application 5. Resolve technical debt or issues reported by SonarQube 6. Set up own SonarQube server to use in this lab using Bitnami From fd4acdec67401433f58a4e380747fe79612c8a93 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Mon, 26 Mar 2018 23:05:20 +0200 Subject: [PATCH 043/168] lab 4 text update --- lab-4-feature-toggle.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lab-4-feature-toggle.md b/lab-4-feature-toggle.md index 1602224..71a1124 100644 --- a/lab-4-feature-toggle.md +++ b/lab-4-feature-toggle.md @@ -20,7 +20,7 @@ Based on [this](https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-Featur ```csharp using FeatureToggle; - namespace MyDevOpsApp.Features + namespace .Features { public class CheckPhoneNumber : SimpleFeatureToggle { } } @@ -32,7 +32,7 @@ Based on [this](https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-Featur ```csharp using FeatureToggle; - namespace MyDevOpsApp.Models + namespace .Models { public class ContactViewModel { @@ -74,7 +74,7 @@ Based on [this](https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-Featur -
Modify "Views/Home/Contact" ```csharp - @model MyDevOpsApp.Models.ContactViewModel + @model .Models.ContactViewModel ... @@ -145,7 +145,7 @@ Based on [this](https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-Featur
-1. Use a json config file to store the feature toggle setting +1. Add the feature toggle configuration to the appsettings: -
Modify config file "appsettings.json" with the feature toggle activated @@ -165,13 +165,13 @@ Based on [this](https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-Featur
1. Run the web application locally and test the new Contact form: - 1. Disable the feature by editing the config, reload the page: - 1. Enter any phone number. Notice how no validation error is given + 1. Disable the feature by editing the config, set it to false, reload the page: + 1. Enter any phone number and hit submit. Notice how no validation error is given 1. Enable the feature, reload the page: 1. Enter phone number 0123456789, hit submit, and notice the validation error 1. Enter phone number 123-123-5678, submit and notice the page refreshes without error -1. Commit your code changes and let your pipeline do it's job +1. Push your code changes and let your pipeline do it's job ## Next steps From 903558b139ae04c63352d51e4b87bf60ba600adc Mon Sep 17 00:00:00 2001 From: andregeuze Date: Mon, 26 Mar 2018 23:17:32 +0200 Subject: [PATCH 044/168] add demos folder with devtestlabs scripts --- demos/devtestlabs/ProvisionDemoLab.ps1 | Bin 0 -> 1392 bytes demos/devtestlabs/azuredeploy.json | 244 ++++++++++++++++++ demos/devtestlabs/azuredeploy.parameters.json | 36 +++ 3 files changed, 280 insertions(+) create mode 100644 demos/devtestlabs/ProvisionDemoLab.ps1 create mode 100644 demos/devtestlabs/azuredeploy.json create mode 100644 demos/devtestlabs/azuredeploy.parameters.json diff --git a/demos/devtestlabs/ProvisionDemoLab.ps1 b/demos/devtestlabs/ProvisionDemoLab.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..dfada4a9af623baf7a94d5aec19afe7665278814 GIT binary patch literal 1392 zcmbu9K~KU!5QXP#;(ypwt|jWpgPITlFGz?Oy?C(HiWn&kMUDP=^_zj(QfM_X&9d9> z?97|@-tzU?kdDlGW{j4EvXBYuSO&aD^1#qJW+xISCk#(gqGpn?+Lav}4Y_1L71Nl!G3$Wed*+nt&kSW!-?nE|-tyDR#)qMg z;Bjg?gvMS>7L6SivX-NV6*U|zSMBBfH!3k^F`34moS7Gv8pL$&=sA)%X7xx>eaCL5 zzr#i9E=Mnq#5wp0P^D?l(nEdAQ|_$VQ`%dG&qbz^}c5(p}!e!QeP-X>s>q4N;mde=zd|b5&CNeWm!4>4@>O=8ohz)CMS1>-LcZA z$fL)djO10Wta8s(^6lG{j=U{rs};(5uj4q6Dx*>iMJBp%ruWLh$SugS`%+}QDNp7? jy^p`;8<=Lxe Date: Mon, 26 Mar 2018 23:28:35 +0200 Subject: [PATCH 045/168] update lab 4, removed namespaces in code examples --- lab-4-feature-toggle.md | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/lab-4-feature-toggle.md b/lab-4-feature-toggle.md index 71a1124..4158c84 100644 --- a/lab-4-feature-toggle.md +++ b/lab-4-feature-toggle.md @@ -18,30 +18,20 @@ Based on [this](https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-Featur -
Add the feature class "CheckPhoneNumber" in a folder named "Feature" ```csharp - using FeatureToggle; - - namespace .Features - { - public class CheckPhoneNumber : SimpleFeatureToggle { } - } + public class CheckPhoneNumber : SimpleFeatureToggle { } ```
-
Add a model class "ContactViewModel", which will be used to bring the Feature Toggle setting to the Contact page ```csharp - using FeatureToggle; - - namespace .Models + public class ContactViewModel { - public class ContactViewModel - { - public IFeatureToggle CheckPhoneNumber { get; set; } + public IFeatureToggle CheckPhoneNumber { get; set; } - public string Name { get; set; } + public string Name { get; set; } - public int PhoneNumber { get; set; } - } + public int PhoneNumber { get; set; } } ```
@@ -71,7 +61,7 @@ Based on [this](https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-Featur ```
- -
Modify "Views/Home/Contact" + -
Modify "Views/Home/Contact" to include a reference to your model class, and to add a new form to the page. Make sure you replace "yourprojectname" ```csharp @model .Models.ContactViewModel From 17db06c07d55d778033ccf8594a5ffbe0733c88f Mon Sep 17 00:00:00 2001 From: andregeuze Date: Tue, 27 Mar 2018 00:22:34 +0200 Subject: [PATCH 046/168] prerequisites updated to use devtestlabs --- demos/devtestlabs/ProvisionDemoLab.ps1 | Bin 1392 -> 1352 bytes demos/devtestlabs/azuredeploy.json | 32 ++-------- images/prereq-addvm.png | Bin 0 -> 14234 bytes images/prereq-choosevmbase.png | Bin 0 -> 8584 bytes prerequisites.md | 79 +++++-------------------- 5 files changed, 18 insertions(+), 93 deletions(-) create mode 100644 images/prereq-addvm.png create mode 100644 images/prereq-choosevmbase.png diff --git a/demos/devtestlabs/ProvisionDemoLab.ps1 b/demos/devtestlabs/ProvisionDemoLab.ps1 index dfada4a9af623baf7a94d5aec19afe7665278814..8cad721e354f556134482abe8f81c579c99ffc38 100644 GIT binary patch delta 12 Tcmeysb%JXH2jgY~Mh6xE9%uuu delta 31 lcmX@X^?_>x2P3NuLoP$*#QTz*c?^j_W-5c-W_CtL766mB2p#|c diff --git a/demos/devtestlabs/azuredeploy.json b/demos/devtestlabs/azuredeploy.json index 46bafc1..bc1c53f 100644 --- a/demos/devtestlabs/azuredeploy.json +++ b/demos/devtestlabs/azuredeploy.json @@ -197,35 +197,11 @@ }, "artifacts": [ { - "artifactId": "/artifactsources/public repo/artifacts/windows-chrome", - "parameters": [] - }, - { - "artifactId": "/artifactsources/public repo/artifacts/windows-azurepowershell", - "parameters": [] - }, - { - "artifactId": "/artifactsources/public repo/artifacts/windows-git", - "parameters": [] - }, - { - "artifactId": "/artifactsources/public repo/artifacts/windows-vscode", - "parameters": [] - }, - { - "artifactId": "/artifactsources/public repo/artifacts/windows-visualstudio", - "parameters": [ - { - "name": "version", - "value": "2017" - }, - { - "name": "sku", - "value": "Enterprise" - }, + "artifactId": "/artifactsources/public repo/artifacts/windows-chocolatey", + "parameters":[ { - "name": "installerArgs", - "value": "" + "name": "packages", + "value": "git.install,7zip.install,googlechrome,postman,visualstudiocode,dotnet4.7.1" } ] } diff --git a/images/prereq-addvm.png b/images/prereq-addvm.png new file mode 100644 index 0000000000000000000000000000000000000000..9685fa3a423bf828908e0c953ee5723ad772eace GIT binary patch literal 14234 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 NrmU@0uJAJOe*t!8sw)5h literal 0 HcmV?d00001 diff --git a/images/prereq-choosevmbase.png b/images/prereq-choosevmbase.png new file mode 100644 index 0000000000000000000000000000000000000000..ec3b3a015d0b9d0b895e1da9314b1bd8752fe46f GIT binary patch literal 8584 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 literal 0 HcmV?d00001 diff --git a/prerequisites.md b/prerequisites.md index c7ee284..6d48f8e 100644 --- a/prerequisites.md +++ b/prerequisites.md @@ -14,80 +14,29 @@ You can either configure an Azure development environment on your own, or use a 1. Install [Azure PowerShell](https://docs.microsoft.com/nl-nl/powershell/azure/install-azurerm-ps) on your local machine -## Environment requirements +## Set up your environment with Azure DevTestLabs -1. [Visual Studio 2017](http://go.microsoft.com/fwlink/?LinkId=517106) - - Select the following workloads: - - ASP.NET and web development - - Azure development (including PowerShell tools) - - .NET Core cross-platform development - - .NET Framework 4.7.1 SDK +1. Download the [devtestlabs demo](./demos/devtestlabs) directory or clone this entire repository to your local filesystem with Git. -## Optional: Setup through PowerShell - -In case you chose not to set up your own environment through the Azure Portal, this section is just for you! - -Execute the following steps: - -1. Run PowerShell ISE as an administrator. - -1. Paste the following PowerShell code in the script pane: +1. Run Windows PowerShell ISE as an administrator and open [ProvisionDemoLab.ps1](./demos/devtestlabs/ProvisionDemoLab.ps1). +1. Edit the ResourceGroup variables in the top of this script to your personal preference. Make sure the subscription name is the name of an actual subscription on your Azure account: ```PowerShell - Login-AzureRmAccount - Select-AzureRmSubscription -SubscriptionName - $VmName = "DevOpsHOL" - $DnsLabelPrefix = "" - $VmIPName = $VmName+"-ip" - $VmAdminUserName = "" - $VmAdminPassword ="" - $ResourceGroupName = "DevOpsHOL" + $ResourceGroupName = "rg-ADP2018" $ResourceGroupLocation = "West Europe" - $SecureStringPwd = ConvertTo-SecureString $VmAdminPassword -AsPlainText -Force - New-AzureRmResourceGroup -Name $ResourceGroupName -Location $ResourceGroupLocation -Verbose -Force - New-AzureRmResourceGroupDeployment -ResourceGroupName $ResourceGroupName ` - -TemplateUri "https://raw.githubusercontent.com/Avanade/DevOpsHOL/master/azure-rm/azuredeploy.json" ` - -VmName $VmName ` - -VmSize "Standard_D2s_v3" ` - -VmVisualStudioVersion "VS-2017-Comm-Latest-Win10-N" ` - -VmAdminUserName $VmAdminUserName ` - -VmAdminPassword $SecureStringPwd ` - -DnsLabelPrefix $DnsLabelPrefix ` - -ChocoPackages 'visualstudiocode;googlechrome' ` - -Force -Verbose + $subscriptionName = "Visual Studio Enterprise" ``` - **Note:** Sometimes this all works great but other times, the Chocolatey packages do not install when the VM is first created so you may need to run choco install for the individual packages to complete the environment setup. - -1. Replace all the \ with your own values and run the script. +1. Run the script (F5) to start deploying this template to Azure. Wait for the operation to complete before closing the PowerShell ISE. -1. Once the script above completes, you can use the following to start the VM and check to see that everything was installed correctly. +1. Go to [your Azure Portal](https://portal.azure.com) and open your DevTestLab. - ```PowerShell - Start-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $VmName - while((Get-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $VmName -Status | ` - select -ExpandProperty Statuses | ` - ?{ $_.Code -match "PowerState" } | ` - select -ExpandProperty DisplayStatus) -ne "VM running") - { - Start-Sleep -s 2 - } - Start-Sleep -s 5 ## Give the VM time to come up so it can accept remote requests - $vmip = Get-AzureRmPublicIpAddress -Name $VmIPName -ResourceGroupName $ResourceGroupName - $hostdns = $vmip.IpAddress.ToString() ## $vmip.DnsSettings.Fqdn - cmdkey /generic:TERMSRV/$hostdns /user:"$VmName\$VmAdminUserName" /pass:$VmAdminPassword - Start-Process "mstsc" -ArgumentList "/V:$hostdns /f" ## use /span to use both monitors - ``` +1. Go to "My virtual machines" to add a new VM to your lab. + ![Add new DevTestLab VM](./images/prereq-addvm.png) -## Optional: Cleanup resources +1. Choose the formula that was created as part of your Lab (Developer) as base. + ![Vsts](./images/prereq-choosevmbase.png) -Finally, when you are done, you can use the following code to: +1. Enter a name for your Virtual Machine and click "Create" to begin creating the VM. -- Shut down the VM to minimize Azure charges - ```PowerShell - Stop-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $VmName -Force - ``` -- Delete the entire resource group when done with the labs or to start fresh. - ```PowerShell - Remove-AzureRmResourceGroup -Name $ResourceGroupName - ``` \ No newline at end of file +1. One eternity later, your VM has been created. \ No newline at end of file From 32da4df9f004fb13b529cc75df26406e32c28d12 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Tue, 27 Mar 2018 08:22:59 +0200 Subject: [PATCH 047/168] updated prerequisites --- demos/devtestlabs/azuredeploy.json | 2 +- lab-5-ui-testing.md | 2 ++ prerequisites.md | 4 +--- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/demos/devtestlabs/azuredeploy.json b/demos/devtestlabs/azuredeploy.json index bc1c53f..891d8ab 100644 --- a/demos/devtestlabs/azuredeploy.json +++ b/demos/devtestlabs/azuredeploy.json @@ -87,7 +87,7 @@ }, "vmSku": { "type": "string", - "defaultvalue": "2016-Datacenter" + "defaultvalue": "VS-2017-Ent-Latest-WS2016" }, "osType": { "type": "string", diff --git a/lab-5-ui-testing.md b/lab-5-ui-testing.md index 0f92c9f..63e3375 100644 --- a/lab-5-ui-testing.md +++ b/lab-5-ui-testing.md @@ -9,7 +9,9 @@ Based on the following tutorials: ## Prerequisites +- A Virtual Machine on Azure. Follow [prerequisites](prerequisites.md) to set it up. - Complete [Lab 4 - Feature Toggle](lab-4-feature-toggle.md). +- Set up a private VSTS agent using [this Microsoft tutorial](https://docs.microsoft.com/en-us/vsts/build-release/actions/agents/v2-windows?view=vsts). ## Tasks for local UI Testing diff --git a/prerequisites.md b/prerequisites.md index 6d48f8e..9424b2f 100644 --- a/prerequisites.md +++ b/prerequisites.md @@ -1,8 +1,6 @@ # Avanade DevOps HOL - Prerequisites -In this lab, we will be installing the required development components to setup your lab environment. - -You can either configure an Azure development environment on your own, or use a simple PowerShell script provided in this document. The script will create a new Azure resource group and then configure an Azure VM with Windows 10 and Visual Studio 2017 Community edition. It will also use Chocolatey to install a collection of other tools and applications. **Review and modify the script to suit your own needs before executing such as changing to VS Enterprise and Windows Server 2016 (VS-2017-Ent-Latest-WS2016)** +In this lab, we will be setting up your lab environment by using DevTestLabs on Azure. ## Prerequisites From 916f57eb689d5fea51e94ae2793fd1d50d5685d6 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Tue, 27 Mar 2018 08:40:03 +0200 Subject: [PATCH 048/168] text change on prereqs --- prerequisites.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prerequisites.md b/prerequisites.md index 9424b2f..d747ce1 100644 --- a/prerequisites.md +++ b/prerequisites.md @@ -37,4 +37,4 @@ In this lab, we will be setting up your lab environment by using DevTestLabs on 1. Enter a name for your Virtual Machine and click "Create" to begin creating the VM. -1. One eternity later, your VM has been created. \ No newline at end of file +1. After this step, your VM has been created. \ No newline at end of file From 6960e936c27347a25ed08c19776b967e7fa03792 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Tue, 27 Mar 2018 08:52:49 +0200 Subject: [PATCH 049/168] add prereq --- prerequisites.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/prerequisites.md b/prerequisites.md index d747ce1..c4a1e07 100644 --- a/prerequisites.md +++ b/prerequisites.md @@ -12,6 +12,8 @@ In this lab, we will be setting up your lab environment by using DevTestLabs on 1. Install [Azure PowerShell](https://docs.microsoft.com/nl-nl/powershell/azure/install-azurerm-ps) on your local machine +1. A private VSTS agent on a VS2017 VM, using [this Microsoft tutorial](https://docs.microsoft.com/en-us/vsts/build-release/actions/agents/v2-windows?view=vsts). + ## Set up your environment with Azure DevTestLabs 1. Download the [devtestlabs demo](./demos/devtestlabs) directory or clone this entire repository to your local filesystem with Git. From a0aaa9c2de3b9ff3bcb299d4239c587a6976fbf8 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Tue, 27 Mar 2018 10:37:03 +0200 Subject: [PATCH 050/168] update lab 3 task name, update arm scripts --- demos/devtestlabs/ProvisionDemoLab.ps1 | Bin 1352 -> 1360 bytes demos/devtestlabs/azuredeploy.json | 4 ++-- demos/devtestlabs/azuredeploy.parameters.json | 11 ++++++++++- lab-3-analysis-with-sonarqube.md | 6 +++--- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/demos/devtestlabs/ProvisionDemoLab.ps1 b/demos/devtestlabs/ProvisionDemoLab.ps1 index 8cad721e354f556134482abe8f81c579c99ffc38..316263a53fdb12e156881e504bd8d3f8dc5207ad 100644 GIT binary patch delta 20 bcmX@Xb%ARG2P1nJLoh=KL-1yHMn@I^JDCK% delta 12 Tcmcb>b%JXH2jgY|Mh6xE9B2b> diff --git a/demos/devtestlabs/azuredeploy.json b/demos/devtestlabs/azuredeploy.json index 891d8ab..81a0254 100644 --- a/demos/devtestlabs/azuredeploy.json +++ b/demos/devtestlabs/azuredeploy.json @@ -192,13 +192,13 @@ "ostype": "[parameters('osType')]", "version": "latest" }, - "networkInterface":{ + "networkInterface": { "virtualNetworkId": "[variables('labVirtualNetworkId')]" }, "artifacts": [ { "artifactId": "/artifactsources/public repo/artifacts/windows-chocolatey", - "parameters":[ + "parameters": [ { "name": "packages", "value": "git.install,7zip.install,googlechrome,postman,visualstudiocode,dotnet4.7.1" diff --git a/demos/devtestlabs/azuredeploy.parameters.json b/demos/devtestlabs/azuredeploy.parameters.json index fa8fb0e..baca48b 100644 --- a/demos/devtestlabs/azuredeploy.parameters.json +++ b/demos/devtestlabs/azuredeploy.parameters.json @@ -31,6 +31,15 @@ }, "vmPassword": { "value": "ADP#2018" + }, + "vmOffer": { + "value": "VisualStudio" + }, + "vmPublisher": { + "value": "MicrosoftVisualStudio" + }, + "vmSku": { + "value": "VS-2017-Ent-Latest-WS2016" } } -} +} \ No newline at end of file diff --git a/lab-3-analysis-with-sonarqube.md b/lab-3-analysis-with-sonarqube.md index cc5ddf7..2966823 100644 --- a/lab-3-analysis-with-sonarqube.md +++ b/lab-3-analysis-with-sonarqube.md @@ -13,7 +13,7 @@ Based on [this](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube 1. Login to SonarQube and open the Help menu. This menu can be found here: ![Tutorial steps](images/lab-3-tutorial.png) -1. Start the "Analyze a new project" tutorial and follow the steps. Make sure you save the Token and Project Key somewhere safe for later use in VSTS. +1. Start the "Analyze a new project" tutorial and follow steps 1 and 2. For step 2 do not run the manual command line instructions. Make sure you save the Token and Project Key somewhere safe for later use in VSTS. 1. Edit your build definition and add task "Prepare analysis on SonarQube" before any Msbuild or VSBuild task. - Install SonarQube extension from marketplace if the task is not yet available on your VSTS account @@ -23,12 +23,12 @@ Based on [this](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube - sonar.exclusions=wwwroot/lib/** - d:sonar.login="\" -1. Add task "Run Code Analysis" and "Publish Analysis Results" to your build. +1. Add task "Run Code Analysis" and "Publish Quality Gate Result" to your build. 1. Reorder the tasks to respect the following order: - Prepare Analysis task before any MSBuild or Visual Studio Build task - Run Code Analysis task after the Visual Studio Test task - - Publish Analysis Result task after the Run Code Analysis task + - Publish Quality Gate Result task after the Run Code Analysis task 1. Save the build, do not queue it. From cf86d90e644cb96e80d58871d96e30458f99711a Mon Sep 17 00:00:00 2001 From: andregeuze Date: Tue, 27 Mar 2018 10:40:49 +0200 Subject: [PATCH 051/168] add java requirement for vsts agents --- lab-3-analysis-with-sonarqube.md | 1 + 1 file changed, 1 insertion(+) diff --git a/lab-3-analysis-with-sonarqube.md b/lab-3-analysis-with-sonarqube.md index 2966823..64484fe 100644 --- a/lab-3-analysis-with-sonarqube.md +++ b/lab-3-analysis-with-sonarqube.md @@ -7,6 +7,7 @@ Based on [this](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube ## Prerequisites - Complete [Lab 2 - Add QA environment and define your multi-stage continuous deployment process with approvals and gates](lab-2-multi-stage-deployments.md). +- Your VSTS Agent Machine needs Java 8 installed. ## Tasks From 4d6618008725f95e462ead8240fe2968cf7b4e9c Mon Sep 17 00:00:00 2001 From: andregeuze Date: Tue, 27 Mar 2018 11:50:33 +0200 Subject: [PATCH 052/168] textual change for lab 3 --- lab-3-analysis-with-sonarqube.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lab-3-analysis-with-sonarqube.md b/lab-3-analysis-with-sonarqube.md index 64484fe..285db89 100644 --- a/lab-3-analysis-with-sonarqube.md +++ b/lab-3-analysis-with-sonarqube.md @@ -14,7 +14,7 @@ Based on [this](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube 1. Login to SonarQube and open the Help menu. This menu can be found here: ![Tutorial steps](images/lab-3-tutorial.png) -1. Start the "Analyze a new project" tutorial and follow steps 1 and 2. For step 2 do not run the manual command line instructions. Make sure you save the Token and Project Key somewhere safe for later use in VSTS. +1. Start the "Analyze a new project" tutorial and follow steps 1 and 2. For step 2 do not run the manual command line instructions from the tutorial. Make sure you save the Token and Project Key somewhere safe for later use in VSTS. 1. Edit your build definition and add task "Prepare analysis on SonarQube" before any Msbuild or VSBuild task. - Install SonarQube extension from marketplace if the task is not yet available on your VSTS account From a90fccafb4725a27c967560556414cdca40bbcbd Mon Sep 17 00:00:00 2001 From: andregeuze Date: Tue, 27 Mar 2018 11:59:41 +0200 Subject: [PATCH 053/168] lab 4 text update --- lab-4-feature-toggle.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lab-4-feature-toggle.md b/lab-4-feature-toggle.md index 4158c84..6d73020 100644 --- a/lab-4-feature-toggle.md +++ b/lab-4-feature-toggle.md @@ -15,14 +15,14 @@ Based on [this](https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-Featur 1. Apply the following code changes to your Web Application: - -
Add the feature class "CheckPhoneNumber" in a folder named "Feature" + -
Add class "CheckPhoneNumber" in a folder named "Feature" ```csharp public class CheckPhoneNumber : SimpleFeatureToggle { } ```
- -
Add a model class "ContactViewModel", which will be used to bring the Feature Toggle setting to the Contact page + -
Add class "ContactViewModel" in a folder named "Models". This class will be used to bring the Feature Toggle setting to the Contact page ```csharp public class ContactViewModel @@ -36,7 +36,7 @@ Based on [this](https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-Featur ```
- -
Modify "Controllers/HomeController" to bind the new viewmodel to the Contact page + -
Modify "Controllers/HomeController" to bind the new viewmodel to the Contact page. The Contact method already exists, so replace it entirely. ```csharp ... @@ -96,7 +96,7 @@ Based on [this](https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-Featur ```
- -
Modify "Startup" + -
Modify the "Startup" class. Replace the ConfigureServices method with the code below ```csharp public class Startup @@ -121,7 +121,7 @@ Based on [this](https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-Featur ```
- -
Modify Unit Tests + -
Modify your Unit Test class Change every occurrence of: ```csharp From 4f7580f24b6a648c5c6906307f9886d1b283ccd8 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Tue, 27 Mar 2018 12:16:35 +0200 Subject: [PATCH 054/168] Few text fixes for lab 5 --- lab-5-ui-testing.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lab-5-ui-testing.md b/lab-5-ui-testing.md index 63e3375..74ab6fd 100644 --- a/lab-5-ui-testing.md +++ b/lab-5-ui-testing.md @@ -231,7 +231,7 @@ Based on the following tutorials: ## Tasks for UI Testing in the QA environment -1. Add new file vsts.runsettings with "Copy to Output directory" set to "Copy always" +1. Add new file vsts.runsettings with "Copy to Output directory" set to "Copy always". Notice the different value of the parameter. This is a token that will be replaced by an actual Url during the Release in VSTS.
Click here to view the contents ```xml @@ -245,17 +245,17 @@ Based on the following tutorials:
1. Edit your Build Definition (save, do not queue) - 1. Add task "NuGet restore": + 1. Add task "NuGet restore" after the "Restore" task: - Set the path to your Test project's packages.config - - Advanced > Destination: ../packages + - Under Advanced, set the destination to: ../packages 1. Change the Test task by adding the following argument: --filter TestCategory!=UI - 1. Add task "Publish build artifact" with the following settings: - - Path: \/bin/$(BuildConfiguration) + 1. Add task "Publish build artifact" after the other Publish task, with the following settings: + - Path to publish: \/bin/$(BuildConfiguration) - Artifact name: tests - - Location: VSTS + - Artifact publish location: VSTS 1. Edit your Release Definition, QA environment - 1. Add task: Replace Tokens + 1. Add task: Replace Tokens (by Guillaume Rouchon) - Root directory: $(System.DefaultWorkingDirectory)/Drop/tests - Target files: **/*.runsettings - Token prefix: #{ @@ -264,7 +264,7 @@ Based on the following tutorials: - Search folder: $(System.DefaultWorkingDirectory)/Drop/tests - Test filter criteria: TestCategory=UI - Settings file: $(System.DefaultWorkingDirectory)/Drop/tests/vsts.runsettings - 1. Add variable "SiteUrl" with Scope "QA" and url "https://\-qa.azurewebsites.net" + 1. Go to the Variables tab, add variable "SiteUrl" with Scope "QA" and url "https://\-qa.azurewebsites.net" 1. Commit your code to trigger a build and release From 9c23eb72c3a1caaf1c83577f4be5ace0c00c950d Mon Sep 17 00:00:00 2001 From: andregeuze Date: Tue, 27 Mar 2018 12:28:46 +0200 Subject: [PATCH 055/168] Add link to sonarqube extension docs in lab 3 --- lab-3-analysis-with-sonarqube.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lab-3-analysis-with-sonarqube.md b/lab-3-analysis-with-sonarqube.md index 285db89..34ad258 100644 --- a/lab-3-analysis-with-sonarqube.md +++ b/lab-3-analysis-with-sonarqube.md @@ -7,7 +7,7 @@ Based on [this](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube ## Prerequisites - Complete [Lab 2 - Add QA environment and define your multi-stage continuous deployment process with approvals and gates](lab-2-multi-stage-deployments.md). -- Your VSTS Agent Machine needs Java 8 installed. +- Your VSTS Agent Machine needs Java 8 installed, because the VSTS SonarQube Extension has that [requirement](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Extension+for+VSTS-TFS). ## Tasks From 8dba2dc61533eb578d798cbc15354e1077966092 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Tue, 27 Mar 2018 14:21:39 +0200 Subject: [PATCH 056/168] add lab table with effort --- README.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f699fc0..90b3c56 100644 --- a/README.md +++ b/README.md @@ -4,4 +4,16 @@ These are the hands on labs associated with the Avanade DevOps Practitioners cou You can accomplish these labs using Visual Studio 2017 on your local computer, but you may want to consider doing the labs using an Azure VM as the development machine. This not only keeps you from having to make changes to your local environment, but it gives you additional experience using Azure. -To start setting up your environment, make sure to follow the steps in the [Prerequisites](prerequisites.md) lab. \ No newline at end of file +To start setting up your environment, make sure to follow the steps in the [Prerequisites](prerequisites.md) lab. + +## Hands-on Labs + +| Lab | Estimated Effort (minutes) | +| --------- | -------------------------- | +| [Lab 1 - Create a CI/CD pipeline for .NET with the Azure DevOps Project](lab-1-azure-devops-project-pipeline.md) | 60 | +| [Lab 2 - Add QA environment and define your multi-stage continuous deployment process with approvals and gates](lab-2-multi-stage-deployments.md) | 45 | +| [Lab 3 - Analysis with SonarQube](lab-3-analysis-with-sonarqube.md) | 45 | +| [Lab 4 - Feature Toggle](lab-4-feature-toggle.md) | 45 | +| [Lab 5 - UI Testing](lab-5-ui-testing.md) | 90 | +| [Lab 6 - Smoke Testing](lab-6-smoke-testing.md) | 45 | +| [Lab 7 - Security Verification Tests in your CD pipeline](lab-7-security-verification-tests.md) | 45 | \ No newline at end of file From e7f6e959bb13df6eafa5238745c410a697a5e4e1 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Tue, 27 Mar 2018 14:33:41 +0200 Subject: [PATCH 057/168] update readme text --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 90b3c56..77d6cf2 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ # Avanade DevOps HOL -These are the hands on labs associated with the Avanade DevOps Practitioners course. This is based to a large part on the [PartsUnlimitedHOL](https://microsoft.github.io/PartsUnlimited/basic/GettingStarted.html) but simplified to use the Visual Studio MVC sample application. +These are the hands on labs associated with the Avanade DevOps Practitioners course. This is based to a large part on the [PartsUnlimitedHOL](https://microsoft.github.io/PartsUnlimited/basic/GettingStarted.html) but simplified to use the Azure DevOps Project sample application. -You can accomplish these labs using Visual Studio 2017 on your local computer, but you may want to consider doing the labs using an Azure VM as the development machine. This not only keeps you from having to make changes to your local environment, but it gives you additional experience using Azure. +You can accomplish these labs using an Azure VM as the development machine. This not only keeps you from having to make changes to your local environment, but it gives you additional experience using Azure and PowerShell. To start setting up your environment, make sure to follow the steps in the [Prerequisites](prerequisites.md) lab. ## Hands-on Labs | Lab | Estimated Effort (minutes) | -| --------- | -------------------------- | +| --------- |:--------------------------:| | [Lab 1 - Create a CI/CD pipeline for .NET with the Azure DevOps Project](lab-1-azure-devops-project-pipeline.md) | 60 | | [Lab 2 - Add QA environment and define your multi-stage continuous deployment process with approvals and gates](lab-2-multi-stage-deployments.md) | 45 | | [Lab 3 - Analysis with SonarQube](lab-3-analysis-with-sonarqube.md) | 45 | From 8ea0f5c90a720cc8835b12b44e9807d11729cd66 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Tue, 27 Mar 2018 14:34:18 +0200 Subject: [PATCH 058/168] lab 5 added instructions on where to add new files --- lab-5-ui-testing.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lab-5-ui-testing.md b/lab-5-ui-testing.md index 74ab6fd..f5ba4c0 100644 --- a/lab-5-ui-testing.md +++ b/lab-5-ui-testing.md @@ -15,13 +15,13 @@ Based on the following tutorials: ## Tasks for local UI Testing -1. Add a new Unit Test Project "Tests" (.NET Framework 4.7.1) and add the following NuGet packages: +1. Add a new Unit Test Project "**Tests**" (.NET Framework 4.7.1) and add the following NuGet packages: - Selenium.Support (Includes Selenium.WebDriver) - Selenium.WebDriver.PhantomJS - (optional)Selenium.WebDriver.IEDriver - (optional)Selenium.Chrome.WebDriver -1. Add new file local.runsettings +1. Add new file local.runsettings to the **Tests** project.
Click here to view the contents ```xml @@ -34,7 +34,7 @@ Based on the following tutorials: ```
-1. Add folder PageObjects and add classes for all the pages +1. Add folder PageObjects and add classes for all the pages to the **Tests** project. -
Code for BasePage ```csharp @@ -133,7 +133,7 @@ Based on the following tutorials:
-1. Add new class UITests +1. Add new class UITests to the **Tests** project.
Click here to view the code ```csharp @@ -231,7 +231,7 @@ Based on the following tutorials: ## Tasks for UI Testing in the QA environment -1. Add new file vsts.runsettings with "Copy to Output directory" set to "Copy always". Notice the different value of the parameter. This is a token that will be replaced by an actual Url during the Release in VSTS. +1. Add new file vsts.runsettings to the **Tests** project, with "Copy to Output directory" set to "Copy always". Notice the different value of the parameter. This is a token that will be replaced by an actual Url during the Release in VSTS.
Click here to view the contents ```xml From 76841855fc0ad3d2f8d93762269654e4f6b67b30 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Tue, 27 Mar 2018 15:14:26 +0200 Subject: [PATCH 059/168] add filter to build --- lab-6-smoke-testing.md | 1 + 1 file changed, 1 insertion(+) diff --git a/lab-6-smoke-testing.md b/lab-6-smoke-testing.md index 348ddac..66f602f 100644 --- a/lab-6-smoke-testing.md +++ b/lab-6-smoke-testing.md @@ -9,6 +9,7 @@ In this lab, we add smoke tests to our test project. ## Tasks 1. Edit your build definition. Let the Test task ignore both "UI" and "Smoke" categories + - Change the filter argument to the following: --filter "TestCategory!=UI&TestCategory!=Smoke" 1. Edit your release definition, Production environment: 1. Add task "Replace Tokens", similar to the one in QA From b526bf70b0d538dff7915f7ef8b333cf36cb3356 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Tue, 27 Mar 2018 19:44:07 +0200 Subject: [PATCH 060/168] replace subscription name with non-existing value --- prerequisites.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/prerequisites.md b/prerequisites.md index c4a1e07..dd36421 100644 --- a/prerequisites.md +++ b/prerequisites.md @@ -24,7 +24,7 @@ In this lab, we will be setting up your lab environment by using DevTestLabs on ```PowerShell $ResourceGroupName = "rg-ADP2018" $ResourceGroupLocation = "West Europe" - $subscriptionName = "Visual Studio Enterprise" + $subscriptionName = "" ``` 1. Run the script (F5) to start deploying this template to Azure. Wait for the operation to complete before closing the PowerShell ISE. @@ -32,10 +32,10 @@ In this lab, we will be setting up your lab environment by using DevTestLabs on 1. Go to [your Azure Portal](https://portal.azure.com) and open your DevTestLab. 1. Go to "My virtual machines" to add a new VM to your lab. - ![Add new DevTestLab VM](./images/prereq-addvm.png) + > ![Add new DevTestLab VM](./images/prereq-addvm.png) 1. Choose the formula that was created as part of your Lab (Developer) as base. - ![Vsts](./images/prereq-choosevmbase.png) + > ![Vsts](./images/prereq-choosevmbase.png) 1. Enter a name for your Virtual Machine and click "Create" to begin creating the VM. From 7f0bafb48746fa99fefcffad73494751d7ef6473 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Mon, 2 Apr 2018 23:36:32 +0200 Subject: [PATCH 061/168] pre reqs updated, finished devtestlabs template with vsts agent vm --- demos/devtestlabs/ProvisionDemoLab.ps1 | Bin 1360 -> 3588 bytes demos/devtestlabs/azuredeploy.json | 219 ++++++++++++------ demos/devtestlabs/azuredeploy.parameters.json | 16 +- images/prereq-addvm.png | Bin 14234 -> 0 bytes images/prereq-choosevmbase.png | Bin 8584 -> 0 bytes prerequisites.md | 23 +- 6 files changed, 157 insertions(+), 101 deletions(-) delete mode 100644 images/prereq-addvm.png delete mode 100644 images/prereq-choosevmbase.png diff --git a/demos/devtestlabs/ProvisionDemoLab.ps1 b/demos/devtestlabs/ProvisionDemoLab.ps1 index 316263a53fdb12e156881e504bd8d3f8dc5207ad..e76056e6282001c86ac801e1ce76d27c43001f58 100644 GIT binary patch literal 3588 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 NrmU@0uJAJOe*t!8sw)5h diff --git a/images/prereq-choosevmbase.png b/images/prereq-choosevmbase.png deleted file mode 100644 index ec3b3a015d0b9d0b895e1da9314b1bd8752fe46f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8584 zcmcI~bx>Q~*De&-;Dtg1K}*pBMT1-M@>1N2yA_JNODXP!U@a{r5G+7(m*7^MB0-7= zip!V2_x|zC{N}qecjn$dl5_T6XU^Vh@3o%iSv!e)t*J~x_=FGx1A|26mBK$57?1wm z7vn!de^+_F`-;9`dj6v9qjxJ=`9r+yPw?dAB$HGFI4&aNfRC4&BN(B^CBpEa2U<8?5EH*0u-9?cM#s@{d zlKIyV=4Jp4o<8wuf6{P=cOY&6Uk=i`_y4EKuH8fY{cozzHScc5*_K!D7WPLQe$!dM zNx`x(p44`*;y-acmHrbgy(cYP-Y8{>$Rh;|1tsIkw|crtLbRoDv^tB`N%>28r%3z1 z%)tukba;ukw@3|@zG7H=pSp3rx72i6teBwpC0jD!oTp()z;&q+59rHO z?rLUqJW)I|@dIgbvfdkkOA;@T1G4ltVUqpzQL$TnJUQEPqv0~u>X@XP(kYzX)MZ+; zG;R|l%twE$J1Ebb_)%CXZAe}x8F9`+Q$kW5%k4)74c|(`dz5VYndg_K@4IMDP#A}{ z1o6@#x<_`eh^yS^l^re?=J_UNxddLHp|^vw=!}1juAyi zlSvX&)cO3u{eSLtxMZxeL0{@P~5 zWj!=0<25z>5BqG0B{gzw6-O{e=_hRB;G&P-?RHlyBwip3q||F?##yP!IqW{Op8P&wr)fTezV@_Va z$j3@XMN$ss1ea1-|nxGC^ z0yp55=^<#yq@Z_X`MS3tHZQ2!YR^{kmsJUy1>1D)>y$!%hE$6?9X0tZgN1+WNey8| z>-%HHGg>#q2|Ou0ugVp%4&6pn8o|D=>MNb=c2P15#|2YJ5MrHHN^VI#6uPvSdd|)Z zs4jQUwRUklZ!{UGxx=rBd?QtIYZHs0$tCC)v>j&JqPUQ}{73Pu?Ds*#DjaUj`QcA= zEp_UbCITg5aalmII$`cyL}+9JWuu^!Sph;v!T58|3h*}8$b$RKoeG-CZI_L$%gevU zrO5n~9T2$iXLT6YDncZLF>snYIfh@)=vnoOrDvUxiCLJwrIuHN`^z0{mc(NNg1O|t zNIm>>6aQM>E$;%D_$)9S&VH8<-j52f2O@Xg2HJJB{ifjlOu||ce zpMyto7Tnjt(-5K+nwB_(e8o_+z=oloCG-jM$!2H!8t4-B!~!(OQWNFysJh?MzoT=> zMA5xA3nSvWr?9;f^3d(Fq?3`{)0Xv~J>`zG*d?tU<$f14b#hNa#3lv*DujczvA*Q7 z`Fw~@owl%3&Ap_F+Q==_cFx-eE@lLpt6jLD0|pc~M}6;n{UStf=!KYijFd2IU?Bhb zYajM7!L>2Bi|C}V0=EF?a*}Q$9&+!!*N0Au=jEGWT762}>2uR^jNSb*fZ0f)0@~fV zo?TXkq6Qo%Ipzd#=@Is?qUw58j+=9qY1F%4YjaJuelVl;m%6O`Bi(^=J45TfbK|eF zVifG8QV4x_iedyL73=(RRe++ApX|8$!_pWE`~YOu8o*~B58Ru@B){&A7e>KKT?mpI z;>PY;Pi}hB2(8KVWH@JXVcOggB@MKTR$-yCc=z9pap#Ael_eLBXGKvMoB0%4IOmTD z5=r4wnA$zP@Dk+*AVFX*lkfW|nJ#uk9+s9SV`(Xm!pulrBro7iFZ;*dHj^6oTa8!N zsd$7_KH*^;_uA}EL9E91{${VrHAZ-J z>kIIMUMC(I(S?O^5|aYS7B$U}yb<30oJb$q0Oomh@?>nou1tx3)mO>&y38)*3?dZg z`1C3zm$V%v76t>;6wUEa-5+2K5|``j#CTUu>o&M0mB8CP(?gU@c&ht)dSu8WH=-5R zG;s3qnnilgeQwTx#|^phK_1;hA3HiQDHBFUGD5$)u+h|O00!8DPbrn$FG@kJem!`= zkwuv~*5!F+%bJv3&f<|%5=3_c_Ig58sT)@0tArxCSU2j_7^gL3X24gu5)pflg0bR% z=NWV;H_D<(rt!lj`l9eC6%Q0iM(_$4NhZh2O@q$y;!Ah&dP@N{N zbZxAF9R38{-pFrfrS+!92J!p%@6obG-xEt48=Iq*)^Dk39#fE-ibNex>u5cd@OJKw zCb?MhOv+gD-AIgzib8j>@}NhH4gB(Lv#7A}*Lab98oNe3%Hi)!m>~|&{S4|IbyZXd zs))3uNd8jfrl1Bhz-Ps8I}8i2?*knrGL7FaTi9jcWTSs9U&819_G;$4euLA`QOAjl z;^N{o4y}K1`aeF+6MygcOt?fj>HcyfX{@ly&jtd?DXku!rAr^EvUmMeD zaJ4y@ru9iw76kP^T-r7F>;3Cm?n@`MYde@)Uc6}oFYe-bPLH8o)Y!lvh=mH+w^ah&Uq2c;wOsx~-BVy)Tc~+JbJBu2_@tx~}^Y z=?O}#38Dfn4taQa;YN>;_jfk|e}3B-Qdn<~wa# zZq5@K#3svW|FW24m9~KQJvuaC42L}hsC5Tkebt;=0_t2@zm{d8fy_SYX zVn|qD2?Bvg!9>{pE`z~f#l@B#p_rv~G7tB6^es9%U*ye6R$5!QK#}&rxvD_lfX0iJ zfRaFp0W6=}@bK_wA>AZ8U(~Cs^6(3VLeQX4u|z9ijeqhqgfg^9K1PX}bH9u<(D$q} z0`I8(;r=T#j>eAr9Lz%dz9#+`BT}$iW0mjn#ZH=j%(JvEJUS#+3nROko*s=3``~3xmer6Z<`=VrG6M+7Md9N)-qeI`boLGd1Q zKaX%kIU@OJl&;h1cphz;5`Yv0r&v+r4Q{LD<>mWDJPF`obO52(Q;*hiO|-R0mhwp| z(>_Ju-tXVD6^2&KvS|sA`6vplSc9E}Lhb_}U6-n)scQ;Ik~)L6*>R4r1J3v9B)qwI zx$pSP-|x*vN$2pR#-whzpUm2feiA#KRO2(GL@%*zt^)Aw>DGu^7H^_}N@X3)~ zY;4U>qA9Wzho1X*=y5~=bOMp&KibLU>O|2)@uL+XI?dkko%7AB5Cg$;?Z<QvB6QGNZFu>{iFvH|T%K(3AbdYEh@pnKs**=10ZHc}P@#95ucp9( zz5%~*259iciIwKi8;&6SyR(rfjGjjHeildu%(kglRaLFF_<8c8WE#&Nu-$q8JOH`( z#qS}sUnPUC&pwHH+RKS~(9yx(^$c2x)GI0~mTBe}$Dd5k&Qdf(RX(hB$DE2T`ChO0 zCUB@{C#wLTDSss+2w(`B6fQ?B0i6EP(XrAX6FZx{J>a0cA-_q}lKNIr!SKQ|QWqU& zr&D!*p|?1L`F{e|{}FNje;G(nFo9lfG~}-f=nr)NMAsY&g#Wz&X%zSS`t>U<*w;Oa z*VO-fe;%DBNJN%0HTuZ~8hsFeG3ZPijWw!jYCHjlOHHy7xQS0*4%PfMQ#1`>S%wN9 z(;@jHDy(C*~t zXCct>?s#f0+PUjLdylydWEzN*Qk{UTf>F;{BFS9BO^_C7*uSs;huA;%AIxU&15~V` znOX4Ni>K%;u2EQ9>Sbw#z<6{;4X$RoDnLVM&z!cNZ-R8}4<|pXr4u$5Fy+PVcZxLo zMwTXxEEbdPU^`kM_0@ESjqpK6ktWD6{g@u}BEbyGe*Fpq@)abXNh5lqas`iQk)l+l(G}{jv{b@kFa!? zm7P_Jg6N{rFWgAVh4oNLoWb4y5^h8xnhY~4AYyItT*`hDrB`D;NI`hVDO6`j1X3tS z{thn0L|1nEQ)Pf7!o6AOVzrgBwl+Ci^)LE}WIIBO&IuShP^Mc*HxpkTF6)opAuk&T z$8P=ukIcFY+}(oo9_$WED*weZ%or?ug1l^wq!M{2Cx0ai(U*=I#5;-aRKLFCq((D5 z6Newa3#^&?L@rx7yUlbZnTe6*d0Mnm$sICc%KwNHIW&~!AzJlrKON;*7$ zxiK!UM}cS+*J2`^6XNZGo0Jzg$^RjPr0C*Z%X#d6q{nQ4<`H%a4`gdAjz3n1f}Wpk zizXcF=|Xm^UCr>oBraQAD%svtO(>S+6t-P#q5?iBH%w`B?MWRbzB`F|1-3cV09GqU z^f7(0s()#T$1B={a^Q#bh@^XrL;ok94@O>ac)Bu>^Xq33z?3Ne8?8$w&J&>?Trx{n zcDKegb?J0t$XhO%*|O+}tI#{M^-M8`{XIS)>yt);CW+8D%z**1glJ)h z|8IsX{O1wF|9JNBe`6>_B8$+13oTL5!tODj8EZ2-!fU9$JZ~=$aa$n~S>pFUvq$6# zvZWgn=vqUYK9gL(zysytuO`0DgI88o8aKGMnX149IX9=4I^eF(5MzC+n#ARK@Ao?n z^w$p)dj+CIyx4m4~3C`tTCaPXKwgSluC#bh zp-?Ev@*H?XY&9?iFHda#n19ZqWGIu{%Qnn_osco`xU>222cpLNiOMfd1s$vAl&4M{ zG@`@%GYWn%IpHRkEq6$SPn5g?X;GPEY$Z75okPd+{&b`+kD@4rmK~#+vl*PbBCaZl zBXDGw-+A(fy;oaN#6coDmxLArPZfdLJdo1v?zg)(h|Cie@rfL0pC#trt0uN%s^V|e z%d`b+2K%)nbbWlQ#cNV{NAYC8^x0U>&hY%0k&~g#^R!(+Bf`FpSF~E$(29ypL2iHw zBnvwCt24r7dGaT?RfVf~;wqXH9(pb{0X`jh?Dy-)Wv|9|$bTn{^oEUev%X@R3TgDgl(wSOFeAV4s#=>({Bxy6uPhc@T{L!L( zX1y*3mzSM{uP74-Yp8Cm9EJ8zIU%+-`jWr}hX#^C&2za=^TUDRF1zVgEnIv3402jW z(&tR>B7~=`stYbZl_?McZ!?)cJt`eTsD@(C&&kR9r|Bt_oQ`acqupciV;aGI#|B%r zLT<@JC5(BRp{)3)0pzwwszIXb?b1S}i9;tN;P@jT--8#NQ@`I*KW6(7FaY4Lo2i zki*^izs)eEO^e?j)*S@x#{Bo5Hmr-CvTNkrPh>vr9}Nz^z0Jx~z0k}RaM{Z9lxNHx z=bz2^`!b`Hm&^b+J|hADVYMoB8D%pxjiz>sjlRT?U1YoKd_BNL)MM@YBud`OJm_HN zr&0OrY4iQt{p&@Auf%b6d)4`WVi2pF)h@ zwER8_>0jHKC<$Cwr+nhi@z)ur_p^;)D(Vr|!;ouq#Z)%eYNz!B?99p8xrS!_zYqTF zY`vqC3DB12@z2@m;QOSpwjb`h-%qoKRDHCvX|rNn7U3Z$y^qa<{!l~e>+1y*>{Nh% zXQgXQisG+r+&Z2}KydMD&UstxXXck=Y3B0#jmiG6_u3$2f${N9Lx7n(i-~U!v?0G& z``uhbyobK)SfXI>7vX9U^J^4>k2mPv@cqa{aZYb4-rs4@WTt`NWa$>%kF-!eh~siK zd7Mq_m!+F>0@#cj3Pb}oH)^S8?9LA==0xl5RS!|_h44cWAMa*R??u}~gtYY4@W(sd z7m)8YCGQ_I0$*R=#!ghf%i(7Hke{QUR|~(d-F0j8RL-i*KiZkR-)=B_!1N06A16A~ zyBTDgRMspwnkj?WAxIhb&c2)T8MXOOjRu`&Rf4?_iQF;<;ro?4lYe-ntdP*3UE_Ef z4P2FCtiggPn8m5GCme9Kr!3hY=zj4P+0OXVV|-?)`;t?U6@Dmrb~zOhd|8q=>%0W? zL@cucY69UcsWIg`k8!2WH+yz#%g1gb_Tz}mU6!h=`Xw*!T>e~-A1pX8?E9HE-<`{h zI7~+V@ouPV-w-jq(1$QL+v;#S)@^i5h{UgO?<^jT$JMSpPpjAUgN?@&6~2gZ8!|Eg z&bpdNS|P0D^_Qi5d!Z342cpiml=@tNeOAP~BwyPB^V>`h5_Z32WGylY%!K=Jv9K4( z@o37EkNBbYARkxix@Y`xe+AF{O!F!Wo^)l>l{pl;2;ZJv6hBt+KP+xvMpx$&-uKj9 zGTuYO4WgwCx<0Pc3*}(n9Vc-o2~_CGkO~2E$$qYF_2wP`)928%p=6 zzPR7$HVK&#jWNT?s!7?(gi;&wEBCEb2w>JKNS zyjdf^czl*JH!zt6Cebf9(ae7HnQGC_OpV(s4B&~~HxuA+361L!-$OB6_u@Jl@=npo!|+u@v~PY?UEiz^TI zh@I+l z27YrC{BSsgE={$4r-xwsxh2bA}W12jLcZGq*G>Y7+5$maxpHyqc@`Y7Q zc&$9oc5HB$ke=E5a0B^t73Wu975kni%}Ae5dmdGBRc~#qWNU`od8k*UISB(*2ey_@ zn8QblM7%UxY~K)fTyM*&PixCG%-owprQ{{)WksUQAA97|2-QP_x zJd*5YA2At^Fblc{&6)6Olj}$bMbNn{2jGX@-dsc1=1`s7XXFXQdQ2XUZQr=b=H)<} z6=N(|jCX5Eu0}0^B&Z~;c=~7^tr%2?OK9}1L;N;RjUv30)ktaxE5xDC^hZ_vm_72J zUlIIF0B*8oR-|X-#$(;GLN1z#+3=hVs|)-OSti~DBo3o@;l{X8aQCxMpBbHa(|SK( z^xW;WnE~$W?#AW>t3B-=wzP&_~K}Vuc*rITO>{aw+>n_w;O<9xE_gSC! zOBMX7XP6$Vk8CXEN4qG;i2HK1CWSyduRluHSciM$_w8=rgg+bOU>@>ntZZ$t#d1{r z)YbVoOvhmYA}3wMoe(mno)Og4qy1UrO{CluhB%0dUzXLcC%alFe*6Ap4b$ZF(Um-( zrljZg%1F(y`H#t9%R$Q8@$Gg={*j(|$c$QT1FF&IdyBjJ z?eOJ6Xyk>HKVmW|YrwjwwbdG@;caoYOU9honGi=#KwJ>c819y^3u)kbDE%%!X)YT) ze%W_;;9AU%IP=Tk*}U87?+)F3R8RDW+c3PFcSvSpa&bVusM;H3_*ieO)3=u`npQMu zIL-9!VG)Hg{BZTT@by1_4Qb?)QwMTuKwp-+pH|+TBPo<;%&4B#(GLBdchreuW~Rov zzZKn$xqcX2dX2M=ksGNAqe|b5=#^v4v~h&n!Lq@TTyf-`u~xHX7e|uE9JU1PBiS0; zXB&&`X~+cdWxL6GvU~emCjm_CP@yA@(yW#T&`-=;Kb4l+n`LgyDVFA(sD6G?@g@WhY9ExQH=pZR!uKdoR-b z3>-7vH_EzLg)+EXNHuL(neAk_?7}8-zJKi<0IB6A~Pr|>WVp1du$5dy*o>7Pn8q`7IB__Fa*t_>GfKK z-{cQB)i_7EV+j&>@b~-}y(>a`X+VuYmYv&Kwszc(%PLc}-hhelaXh>&%DuxLeOC5@ zCdZ}Q`+DUfgv?bffcd*B0nv=(W~Z627*>_$r=i4^a#7!wO%z2BE5z43cBE%B#VKX^ zQ6t;Do4-(diQ3OA#0o$^&9oP@L@eJO3R@*GH2*l2Y{BAoeKK-?qkbN2UE{Su(e08B z?N!;k>yHr}#M%Wk>|5)s4Y~%NeY1lmYcaU9XeiXKzHMrBAMBOZ`FX zBUuy50Dff_{qpe*7L5jl7Nt%{ni>}t6MgMo7TyQiMAWgv#y8NY@TO=-LT2^^k#-Mef54>NX|^aSy%6oZg5~911Utb*}8Yt z90FdODQ<7!FZtEvAPJ#2=l^#39xYd|Y*XCGd*G(h)rO#y@j#d26wq{o!#Xl1WX~3JGcP0C;4{{Up>_+om7WwY) z)%Lg5??Y2t0~~hp|0?*38MKQ2SJJzc{VQPAGvEHJHq+R$H)YWx-I@UHBU*18hX0?< fxu&<*519U#wKv9amp$~qCoohLH5Dr5-iH4d)&G>y diff --git a/prerequisites.md b/prerequisites.md index dd36421..f80f6ed 100644 --- a/prerequisites.md +++ b/prerequisites.md @@ -10,9 +10,7 @@ In this lab, we will be setting up your lab environment by using DevTestLabs on 1. An active Visual Studio Team Services account. - [Sign up for Visual Studio Team Services](https://www.visualstudio.com/en-us/docs/setup-admin/team-services/sign-up-for-visual-studio-team-services) -1. Install [Azure PowerShell](https://docs.microsoft.com/nl-nl/powershell/azure/install-azurerm-ps) on your local machine - -1. A private VSTS agent on a VS2017 VM, using [this Microsoft tutorial](https://docs.microsoft.com/en-us/vsts/build-release/actions/agents/v2-windows?view=vsts). +1. Install [Azure PowerShell](https://docs.microsoft.com/en-us/powershell/azure/install-azurerm-ps) on your local machine ## Set up your environment with Azure DevTestLabs @@ -20,23 +18,18 @@ In this lab, we will be setting up your lab environment by using DevTestLabs on 1. Run Windows PowerShell ISE as an administrator and open [ProvisionDemoLab.ps1](./demos/devtestlabs/ProvisionDemoLab.ps1). -1. Edit the ResourceGroup variables in the top of this script to your personal preference. Make sure the subscription name is the name of an actual subscription on your Azure account: +1. Edit the variables in the top part of this script to your personal preference. Make sure the subscription name is the name of an actual subscription on your Azure account: ```PowerShell - $ResourceGroupName = "rg-ADP2018" - $ResourceGroupLocation = "West Europe" - $subscriptionName = "" + $subscriptionName = "" + $vstsAgentVmName = "" + $vstsAccountName = "" + $vstsPAT = "" ``` 1. Run the script (F5) to start deploying this template to Azure. Wait for the operation to complete before closing the PowerShell ISE. 1. Go to [your Azure Portal](https://portal.azure.com) and open your DevTestLab. -1. Go to "My virtual machines" to add a new VM to your lab. - > ![Add new DevTestLab VM](./images/prereq-addvm.png) - -1. Choose the formula that was created as part of your Lab (Developer) as base. - > ![Vsts](./images/prereq-choosevmbase.png) - -1. Enter a name for your Virtual Machine and click "Create" to begin creating the VM. +1. [Follow these steps](https://docs.microsoft.com/en-us/azure/devtest-lab/devtest-lab-add-claimable-vm#using-a-claimable-vm) to claim your first VM. -1. After this step, your VM has been created. \ No newline at end of file +1. Once it is created, you can connect to the VM by selecting Connect on its management pane. \ No newline at end of file From b2beb41882dfa5996b8272200bc2f74c95a9712e Mon Sep 17 00:00:00 2001 From: andregeuze Date: Mon, 2 Apr 2018 23:37:27 +0200 Subject: [PATCH 062/168] labs 6 update --- lab-6-smoke-testing.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lab-6-smoke-testing.md b/lab-6-smoke-testing.md index 66f602f..80dd8f1 100644 --- a/lab-6-smoke-testing.md +++ b/lab-6-smoke-testing.md @@ -9,7 +9,7 @@ In this lab, we add smoke tests to our test project. ## Tasks 1. Edit your build definition. Let the Test task ignore both "UI" and "Smoke" categories - - Change the filter argument to the following: --filter "TestCategory!=UI&TestCategory!=Smoke" + - Change the filter argument to the following: --filter TestCategory!=UI&TestCategory!=Smoke 1. Edit your release definition, Production environment: 1. Add task "Replace Tokens", similar to the one in QA @@ -67,6 +67,8 @@ In this lab, we add smoke tests to our test project. ```
+1. Build your solution and run your Web App (F5). Run all your Tests locally and make sure they all succeed. + 1. Commit your code change and make sure your build and release succeed. Both your QA and Production environment should be updated. QA should have run a Smoke and UI Test, with resulting screenshots from the UI Test. Production should have run a Smoke test only ## Stretch goals From 9161bbe9f9503d1cac11dd0f56de05582304ae52 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Mon, 2 Apr 2018 23:37:52 +0200 Subject: [PATCH 063/168] lab 7 update --- lab-7-security-verification-tests.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lab-7-security-verification-tests.md b/lab-7-security-verification-tests.md index 09ae3e3..1d9000d 100644 --- a/lab-7-security-verification-tests.md +++ b/lab-7-security-verification-tests.md @@ -10,7 +10,9 @@ Based on [this](https://github.com/azsdk/azsdk-docs/blob/master/03-Security-In-C ## Tasks -1. Follow the tutorial to set up Security Verification Tests +1. Follow the tutorial to set up Security Verification Tests. + +1. Try to resolve the security warnings/errors. ## Next steps From 903a72a498b096d670ca7b4722abc543394a1b2b Mon Sep 17 00:00:00 2001 From: andregeuze Date: Tue, 3 Apr 2018 20:12:15 +0200 Subject: [PATCH 064/168] Add prereqs for trainers, updated trainee prereqs --- prerequisites.md | 2 +- trainer-prerequisites.md | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 trainer-prerequisites.md diff --git a/prerequisites.md b/prerequisites.md index f80f6ed..102225f 100644 --- a/prerequisites.md +++ b/prerequisites.md @@ -1,6 +1,6 @@ # Avanade DevOps HOL - Prerequisites -In this lab, we will be setting up your lab environment by using DevTestLabs on Azure. +In this lab, we will be setting up your lab environment by using DevTestLabs on Azure. To do this, you will be using an [Azure Resource Manager](https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-overview) template which will provision the DevTest Lab for you, together with your very first Virtual Machine with Visual Studio and a private VSTS agent. ## Prerequisites diff --git a/trainer-prerequisites.md b/trainer-prerequisites.md new file mode 100644 index 0000000..d4a7c87 --- /dev/null +++ b/trainer-prerequisites.md @@ -0,0 +1,16 @@ +# Avanade DevOps HOL - Trainer Prerequisites + +This document describes the steps trainers should take, in order to be prepared for the training. + +## Prerequisites + +1. Set up your own Demo environment using the practitioners [prerequisites lab](./prerequisites.md). + +1. Setup SonarQube + - Use the Azure Marketplace template "SonarQube Certified by Bitnami" to set up the SonarQube environment for all the participants. + - Get the [admin password](https://docs.bitnami.com/azure/faq/#administrator-password) from the log details. + - Add the Url, Username and Password for SonarQube to your Practitioners 'preparations' email. + +1. Have the participants complete the practitioners [prerequisites lab](./prerequisites.md). + +1. Set up pairs of participants, where at least one of them has programming/C# knowledge. From 1f1081df3033857d32537cc9c08acdff5ba2d3fb Mon Sep 17 00:00:00 2001 From: Matt Byrne Date: Mon, 26 Nov 2018 10:36:50 +1100 Subject: [PATCH 065/168] Fixes to broken links. Added missing template parameter. Updated Azure VM SKU. --- README.md | 2 +- demos/devtestlabs/azuredeploy.parameters.json | 7 +++++-- lab-1-azure-devops-project-pipeline.md | 2 +- lab-4-feature-toggle.md | 2 +- lab-7-security-verification-tests.md | 2 +- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 77d6cf2..b2312c4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Avanade DevOps HOL -These are the hands on labs associated with the Avanade DevOps Practitioners course. This is based to a large part on the [PartsUnlimitedHOL](https://microsoft.github.io/PartsUnlimited/basic/GettingStarted.html) but simplified to use the Azure DevOps Project sample application. +These are the hands on labs associated with the Avanade DevOps Practitioners course. This is based to a large part on the [PartsUnlimitedHOL](https://github.com/Microsoft/PartsUnlimitedE2E/blob/master/PartsUnlimited-aspnet45/docs/GettingStarted.md) but simplified to use the Azure DevOps Project sample application. You can accomplish these labs using an Azure VM as the development machine. This not only keeps you from having to make changes to your local environment, but it gives you additional experience using Azure and PowerShell. diff --git a/demos/devtestlabs/azuredeploy.parameters.json b/demos/devtestlabs/azuredeploy.parameters.json index 4ecad91..cbe91ce 100644 --- a/demos/devtestlabs/azuredeploy.parameters.json +++ b/demos/devtestlabs/azuredeploy.parameters.json @@ -8,6 +8,9 @@ "labVmShutDownTime": { "value": "21:00" }, + "labName": { + "value": "DevLab" + }, "maxAllowedVmsPerUser": { "value": 2 }, @@ -15,10 +18,10 @@ "value": 50 }, "allowedVmSizes": { - "value": "Standard_D1,Standard_D2,Standard_DS2" + "value": "Standard_DS1_v2,,Standard_DS2_v2" }, "vmSize": { - "value": "Standard_DS2" + "value": "Standard_DS2_v2" }, "vmStorageType": { "value": "Standard" diff --git a/lab-1-azure-devops-project-pipeline.md b/lab-1-azure-devops-project-pipeline.md index 2e187b3..c52e174 100644 --- a/lab-1-azure-devops-project-pipeline.md +++ b/lab-1-azure-devops-project-pipeline.md @@ -2,7 +2,7 @@ In this lab, we setup our DevOps Project in Azure to create our CI/CD pipeline. This will provide us with a standard code base to work with. -Based on [this](https://docs.microsoft.com/en-us/vsts/build-release/apps/cd/azure/azure-devops-project-aspnetcore) tutorial. +Based on [this](https://docs.microsoft.com/en-us/azure/devops-project/azure-devops-project-aspnet-core) tutorial. ## Prerequisites diff --git a/lab-4-feature-toggle.md b/lab-4-feature-toggle.md index 6d73020..a4b081b 100644 --- a/lab-4-feature-toggle.md +++ b/lab-4-feature-toggle.md @@ -2,7 +2,7 @@ In this lab, we add a Feature Toggle mechanism to our web application. The toggle will be enabled by json config and tested locally. -Based on [this](https://microsoft.github.io/PartsUnlimited/apm/200.6x-APM-FeatureFlagforWebapps.html) article and [this](https://github.com/jason-roberts/FeatureToggle/tree/master/src/Examples/AspDotNetCoreExample) example. +Based on [this](https://microsoft.github.io/PartsUnlimited/advanced/FeatureFlagWeb.html) article and [this](https://github.com/jason-roberts/FeatureToggle/tree/master/src/Examples/AspDotNetCoreExample) example. ## Prerequisites diff --git a/lab-7-security-verification-tests.md b/lab-7-security-verification-tests.md index 1d9000d..87e3f99 100644 --- a/lab-7-security-verification-tests.md +++ b/lab-7-security-verification-tests.md @@ -2,7 +2,7 @@ This lab focuses on adding Security Verification Tests to your existing CD pipeline. -Based on [this](https://github.com/azsdk/azsdk-docs/blob/master/03-Security-In-CICD/Readme.md#enable-azsk-extension-for-your-vsts) tutorial. +Based on [this](https://github.com/azsk/DevOpsKit-docs/blob/master/03-Security-In-CICD/Readme.md#enable-azsk-extension-for-your-vsts) tutorial. ## Prerequisites From 11b38e29dc9e1f619b25027f96a88c875a65b9a1 Mon Sep 17 00:00:00 2001 From: Jeba Date: Wed, 13 Mar 2019 10:41:37 +0000 Subject: [PATCH 066/168] prerequisites updated --- prerequisites.md | 104 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 82 insertions(+), 22 deletions(-) diff --git a/prerequisites.md b/prerequisites.md index 102225f..cc5a68f 100644 --- a/prerequisites.md +++ b/prerequisites.md @@ -1,35 +1,95 @@ -# Avanade DevOps HOL - Prerequisites +# Avanade DevOps HOL +These are the hands on labs associated with the Avanade DevOps Practitioners course. This is based to a large part on the [PartsUnlimitedHOL](https://microsoft.github.io/PartsUnlimited/basic/GettingStarted.html) but simplified to use the Visual Studio MVC sample application. It does not use the PartsUnlimited HOL, but we want to acknowledge that project's contribution to this project. -In this lab, we will be setting up your lab environment by using DevTestLabs on Azure. To do this, you will be using an [Azure Resource Manager](https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-overview) template which will provision the DevTest Lab for you, together with your very first Virtual Machine with Visual Studio and a private VSTS agent. +**NOTE: JULY 2018 - Microsoft is previewing a new look for VSTS so if you are using this new look, the instructions may be different and the screen shots will definitely be different.** -## Prerequisites +**NOTE: SEPT 2018 - Microsoft has rebranded VSTS as Azure DevOps (the marketing team wanted to use the buzword). Some of the materials in these labs still refer to VSTS and/or may have references to older UI. This is the new reality of development. What worked last week may not work today so it is important that you understand the principles behind the tools, not just the ability to blindly follow the steps.** -1. An active Azure subscription on a personal AD (Not the Avanade AD). - - Visit the [Azure Portal](https://portal.azure.com) +## Course Pre-requisites ## +If you are taking the Avanade DevOps Practitioners course, then the following are pre-requisites for the beginning of the course. The pre-requisites are straightforward but a few of the tasks take some time so doing this before the class will save time during the course and allow you to get the maximum value from the class. +1. Make sure your Azure subscription is enabled and you can log in and create resources.
+ [Azure Portal](https://portal.azure.com)
+ If you are using your Avanade email to access the Azure portal, then you will need to create a new Active Directory instance. This is because the labs require creating an enterprise application id and individual users do not have permissions to create enterprise applications on the Avanade AD instance. + - In the [Azure Portal](https://portal.azure.com), *Create a Resource* of *Azure Active Directory* with a meaningful name. This is probably something you will use as a general purpose AD instance (i.e. not just for the class) so you may want to name it appropriately. + - For more information, you can reference [Create an Azure Active Directory tenant](https://docs.microsoft.com/en-us/power-bi/developer/create-an-azure-active-directory-tenant#create-an-azure-active-directory-tenant). **DO NOT** execute steps in *Create some users in your Azure Active Directory tenant* section. + - Once the AD instance is created, click on the *All services* menu item and search for *Subscriptions*. Choose the subscription that is tied to your MSDN account (this is the one you will use for the class). If you don't see the correct subscripiton, you might need to switch directories. + - On the Subscriptions' Overview panel, choose the ->Change directory link and select the new AD instance that you just created. + - For more information, you can reference [Associate an existing subscription to your Azure AD directory](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-how-subscriptions-associated-directory#to-associate-an-existing-subscription-to-your-azure-ad-directory) +1. An active Azure DevOps account.
+ [Sign up for Azure DevOps](https://azure.microsoft.com/en-us/services/devops/) +1. Verify that PowerShell v5+ is installed along with the AzureRM modules. + - Install-Module Powershellget -Force + - Install-Module -Name AzureRm -AllowClobber + - Import-Module -Name AzureRM +1. Using an Azure development environment is strongly encouraged. This avoids conflicts with your existing development environment. Complete the steps listed below in the [Azure Development Environment](#azure-development-environment). +1. Complete the [Getting Started](getting-started/README.md) lab. This will make sure that your environment is correctly configured and ready to execute the remaining labs in the course. +1. Configure a private VSTS agent from the [Private Agent](private-agent/README.md) lab. -1. An active Visual Studio Team Services account. - - [Sign up for Visual Studio Team Services](https://www.visualstudio.com/en-us/docs/setup-admin/team-services/sign-up-for-visual-studio-team-services) +## Azure Development Environment ## +You can accomplish these labs using Visual Studio 2017 on your local computer, but you may want to consider doing the labs using an Azure VM as the development machine. This not only keeps you from having to make changes to your local environment, but it gives you additional experience using Azure. You can either configure an Azure development environment on your own or an easy way to do this is to use PowerShell ISE and execute the following commands. This will create a new Azure resource group and then configure an Azure VM with Windows 10 and Visual Studio 2017 Community edition. It will also use Chocolatey to install a collection of other tools and applications. **Review and modify the script to suit your own needs before executing such as changing the VmVisualStudioVersion to VS Enterprise and Window Server 2016 (VS-2017-Ent-Latest-WS2016) or changing the ResourceGroupLocation to "South Central US"** -1. Install [Azure PowerShell](https://docs.microsoft.com/en-us/powershell/azure/install-azurerm-ps) on your local machine +>**Note:** Not all VM SKUs are available in every region. You can get the list of SKUs in a particular location with the following PowerShell commands. +```PowerShell +$locName="South Central US" +Get-AzureRMVMImageSku -Location $locName -Publisher "MicrosoftVisualStudio" -Offer "VisualStudio" | Select Skus +``` -## Set up your environment with Azure DevTestLabs +>**Note:** Sometimes this all works great but other times, the Chocolatey packages do not install when the VM is first created so you may need to run choco install for the individual packages to complete the environment setup. -1. Download the [devtestlabs demo](./demos/devtestlabs) directory or clone this entire repository to your local filesystem with Git. +>**Note:** Run PowerShell as an administrator. -1. Run Windows PowerShell ISE as an administrator and open [ProvisionDemoLab.ps1](./demos/devtestlabs/ProvisionDemoLab.ps1). +```PowerShell +Login-AzureRmAccount +Select-AzureRmSubscription -SubscriptionName andrewmo +$VmName = "DevOpsHOL" +$DnsLabelPrefix = "" +$VmIPName = $VmName+"-ip" +$VmAdminUserName = "" +$VmAdminPassword ="" +$ResourceGroupName = "DevOpsHOL" +$ResourceGroupLocation = "East US 2" +$SecureStringPwd = ConvertTo-SecureString $VmAdminPassword -AsPlainText -Force +New-AzureRmResourceGroup -Name $ResourceGroupName -Location $ResourceGroupLocation -Verbose -Force +New-AzureRmResourceGroupDeployment -ResourceGroupName $ResourceGroupName ` + -TemplateUri "https://raw.githubusercontent.com/Avanade/DevOpsHOL/master/azure-rm/azuredeploy.json" ` + -VmName $VmName ` + -VmSize "Standard_D2s_v3" ` + -VmVisualStudioVersion "VS-2017-Comm-Latest-Win10-N" ` + -VmAdminUserName $VmAdminUserName ` + -VmAdminPassword $SecureStringPwd ` + -DnsLabelPrefix $DnsLabelPrefix ` + -ChocoPackages 'visualstudiocode;notepadplusplus;googlechrome' ` + -Force -Verbose +``` -1. Edit the variables in the top part of this script to your personal preference. Make sure the subscription name is the name of an actual subscription on your Azure account: - ```PowerShell - $subscriptionName = "" - $vstsAgentVmName = "" - $vstsAccountName = "" - $vstsPAT = "" - ``` +Once the script above completes, you can use the following to start the VM and check to see that everything was installed correctly. -1. Run the script (F5) to start deploying this template to Azure. Wait for the operation to complete before closing the PowerShell ISE. +```PowerShell +Start-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $VmName +while((Get-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $VmName -Status | ` + select -ExpandProperty Statuses | ` + ?{ $_.Code -match "PowerState" } | ` + select -ExpandProperty DisplayStatus) -ne "VM running") +{ + Start-Sleep -s 2 +} +Start-Sleep -s 5 ## Give the VM time to come up so it can accept remote requests +$vmip = Get-AzureRmPublicIpAddress -Name $VmIPName -ResourceGroupName $ResourceGroupName +$hostdns = $vmip.IpAddress.ToString() ## $vmip.DnsSettings.Fqdn +cmdkey /generic:TERMSRV/$hostdns /user:"$VmName\$VmAdminUserName" /pass:$VmAdminPassword +Start-Process "mstsc" -ArgumentList "/V:$hostdns /f" ## use /span to use both monitors +``` -1. Go to [your Azure Portal](https://portal.azure.com) and open your DevTestLab. +Finally, when you are done, you can use the following scripts to +1. Shut down the VM to minimize Azure charges +```PowerShell +Stop-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $VmName -Force +``` +2. Delete the entire resource group when done with the labs or to start fresh. +```PowerShell +Remove-AzureRmResourceGroup -Name $ResourceGroupName +``` -1. [Follow these steps](https://docs.microsoft.com/en-us/azure/devtest-lab/devtest-lab-add-claimable-vm#using-a-claimable-vm) to claim your first VM. -1. Once it is created, you can connect to the VM by selecting Connect on its management pane. \ No newline at end of file +Once you have a development environment set up, dive right in to the first [Getting Started](getting-started/README.md) lab. + From ac9222216d342446c17f6b33a7832f98a193bbd9 Mon Sep 17 00:00:00 2001 From: Jeba Date: Wed, 13 Mar 2019 10:57:08 +0000 Subject: [PATCH 067/168] Updated Prerequisites --- prerequisites.md | 48 ++++++++++++------------------------------------ 1 file changed, 12 insertions(+), 36 deletions(-) diff --git a/prerequisites.md b/prerequisites.md index cc5a68f..4ea9783 100644 --- a/prerequisites.md +++ b/prerequisites.md @@ -1,9 +1,8 @@ # Avanade DevOps HOL These are the hands on labs associated with the Avanade DevOps Practitioners course. This is based to a large part on the [PartsUnlimitedHOL](https://microsoft.github.io/PartsUnlimited/basic/GettingStarted.html) but simplified to use the Visual Studio MVC sample application. It does not use the PartsUnlimited HOL, but we want to acknowledge that project's contribution to this project. -**NOTE: JULY 2018 - Microsoft is previewing a new look for VSTS so if you are using this new look, the instructions may be different and the screen shots will definitely be different.** -**NOTE: SEPT 2018 - Microsoft has rebranded VSTS as Azure DevOps (the marketing team wanted to use the buzword). Some of the materials in these labs still refer to VSTS and/or may have references to older UI. This is the new reality of development. What worked last week may not work today so it is important that you understand the principles behind the tools, not just the ability to blindly follow the steps.** +**NOTE: MARCH 2019- These instructions are based on new Azure DevOps** ## Course Pre-requisites ## If you are taking the Avanade DevOps Practitioners course, then the following are pre-requisites for the beginning of the course. The pre-requisites are straightforward but a few of the tasks take some time so doing this before the class will save time during the course and allow you to get the maximum value from the class. @@ -18,6 +17,7 @@ If you are taking the Avanade DevOps Practitioners course, then the following ar 1. An active Azure DevOps account.
[Sign up for Azure DevOps](https://azure.microsoft.com/en-us/services/devops/) 1. Verify that PowerShell v5+ is installed along with the AzureRM modules. + - Set-ExecutionPolicy Unrestricted -force - Install-Module Powershellget -Force - Install-Module -Name AzureRm -AllowClobber - Import-Module -Name AzureRM @@ -28,11 +28,6 @@ If you are taking the Avanade DevOps Practitioners course, then the following ar ## Azure Development Environment ## You can accomplish these labs using Visual Studio 2017 on your local computer, but you may want to consider doing the labs using an Azure VM as the development machine. This not only keeps you from having to make changes to your local environment, but it gives you additional experience using Azure. You can either configure an Azure development environment on your own or an easy way to do this is to use PowerShell ISE and execute the following commands. This will create a new Azure resource group and then configure an Azure VM with Windows 10 and Visual Studio 2017 Community edition. It will also use Chocolatey to install a collection of other tools and applications. **Review and modify the script to suit your own needs before executing such as changing the VmVisualStudioVersion to VS Enterprise and Window Server 2016 (VS-2017-Ent-Latest-WS2016) or changing the ResourceGroupLocation to "South Central US"** ->**Note:** Not all VM SKUs are available in every region. You can get the list of SKUs in a particular location with the following PowerShell commands. -```PowerShell -$locName="South Central US" -Get-AzureRMVMImageSku -Location $locName -Publisher "MicrosoftVisualStudio" -Offer "VisualStudio" | Select Skus -``` >**Note:** Sometimes this all works great but other times, the Chocolatey packages do not install when the VM is first created so you may need to run choco install for the individual packages to complete the environment setup. @@ -40,14 +35,21 @@ Get-AzureRMVMImageSku -Location $locName -Publisher "MicrosoftVisualStudio" -Off ```PowerShell Login-AzureRmAccount -Select-AzureRmSubscription -SubscriptionName andrewmo +Select-AzureRmSubscription -SubscriptionId + +>**Note:** Not all VM SKUs are available in every region. You can get the list of SKUs in a particular location with the following PowerShell commands. +```PowerShe ll +$locName="West Europe" +Get-AzureRMVMImageSku -Location $locName -Publisher "MicrosoftVisualStudio" -Offer "VisualStudio" | Select Skus +``` +Select-AzureRmSubscription -SubscriptionName $VmName = "DevOpsHOL" $DnsLabelPrefix = "" $VmIPName = $VmName+"-ip" $VmAdminUserName = "" $VmAdminPassword ="" $ResourceGroupName = "DevOpsHOL" -$ResourceGroupLocation = "East US 2" +$ResourceGroupLocation = "West Europe" $SecureStringPwd = ConvertTo-SecureString $VmAdminPassword -AsPlainText -Force New-AzureRmResourceGroup -Name $ResourceGroupName -Location $ResourceGroupLocation -Verbose -Force New-AzureRmResourceGroupDeployment -ResourceGroupName $ResourceGroupName ` @@ -64,32 +66,6 @@ New-AzureRmResourceGroupDeployment -ResourceGroupName $ResourceGroupName ` Once the script above completes, you can use the following to start the VM and check to see that everything was installed correctly. -```PowerShell -Start-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $VmName -while((Get-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $VmName -Status | ` - select -ExpandProperty Statuses | ` - ?{ $_.Code -match "PowerState" } | ` - select -ExpandProperty DisplayStatus) -ne "VM running") -{ - Start-Sleep -s 2 -} -Start-Sleep -s 5 ## Give the VM time to come up so it can accept remote requests -$vmip = Get-AzureRmPublicIpAddress -Name $VmIPName -ResourceGroupName $ResourceGroupName -$hostdns = $vmip.IpAddress.ToString() ## $vmip.DnsSettings.Fqdn -cmdkey /generic:TERMSRV/$hostdns /user:"$VmName\$VmAdminUserName" /pass:$VmAdminPassword -Start-Process "mstsc" -ArgumentList "/V:$hostdns /f" ## use /span to use both monitors -``` - -Finally, when you are done, you can use the following scripts to -1. Shut down the VM to minimize Azure charges -```PowerShell -Stop-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $VmName -Force -``` -2. Delete the entire resource group when done with the labs or to start fresh. -```PowerShell -Remove-AzureRmResourceGroup -Name $ResourceGroupName -``` - -Once you have a development environment set up, dive right in to the first [Getting Started](getting-started/README.md) lab. +Open Remote Desktop in windows(type remote desktop in the search button ) and enter your user name and password. Verify you can able to open visual stdio 2017. From b135093ae1f7667d21c7df8ff3cab4a9d7924700 Mon Sep 17 00:00:00 2001 From: Jeba Poomani Date: Thu, 14 Mar 2019 10:09:54 +0100 Subject: [PATCH 068/168] updaed the code formatting --- prerequisites.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/prerequisites.md b/prerequisites.md index 4ea9783..0a65d61 100644 --- a/prerequisites.md +++ b/prerequisites.md @@ -42,6 +42,9 @@ Select-AzureRmSubscription -SubscriptionId $locName="West Europe" Get-AzureRMVMImageSku -Location $locName -Publisher "MicrosoftVisualStudio" -Offer "VisualStudio" | Select Skus ``` + +```PowerShell +>**Note:** The following power shell command is for creating the Virual Machine Select-AzureRmSubscription -SubscriptionName $VmName = "DevOpsHOL" $DnsLabelPrefix = "" From 52f90f8fc1e34734b474d3cd40329dd41222c75c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Geuze?= Date: Fri, 5 Apr 2019 12:55:32 +0200 Subject: [PATCH 069/168] Avanade master (#6) Merge Avanade DevOpsHOL into my repository --- README.md | 25 +- .../README.md | 7 +- azure-rm/ProvisionEnvironment.ps1 | Bin 0 -> 2650 bytes azure-rm/README.md | 57 ++++ azure-rm/json/devtestlab.json | 239 +++++++++++++++ .../json/devtestlab.parameters.json | 39 ++- azure-rm/json/vm.json | 138 +++++++++ azure-rm/json/vm.parameters.json | 39 +++ continuous-deployment/README.md | 158 ++++++++++ continuous-deployment/media/CD3.png | Bin 0 -> 60745 bytes continuous-deployment/media/CD4.png | Bin 0 -> 47891 bytes continuous-integration/README.md | 126 ++++++++ continuous-integration/media/CI1.png | Bin 0 -> 57249 bytes continuous-integration/media/CI2.png | Bin 0 -> 51301 bytes continuous-integration/media/CI4.png | Bin 0 -> 90625 bytes continuous-integration/media/CI8.png | Bin 0 -> 108962 bytes demos/README.md | 15 + demos/devtestlabs/ProvisionDemoLab.ps1 | Bin 3588 -> 0 bytes demos/devtestlabs/azuredeploy.json | 289 ------------------ .../README.md | 14 +- getting-started/README.md | 114 +++++++ mepfielddemo/README.md | 63 ++++ mepfielddemo/TFS-Git.png | Bin 0 -> 6571 bytes .../README.md | 11 +- prerequisites.md | 74 ----- private-agent/README.md | 35 +++ .../README.md | 7 +- .../README.md | 7 +- .../README.md | 18 +- source/build/DevOpsHOL-CI.json | 1 + source/deploy/DevOpsHOL-CD.json | 1 + trainer-prerequisites.md | 9 +- lab-5-ui-testing.md => ui-testing/README.md | 54 ++-- 33 files changed, 1094 insertions(+), 446 deletions(-) rename lab-1-azure-devops-project-pipeline.md => azure-devops-project/README.md (90%) create mode 100644 azure-rm/ProvisionEnvironment.ps1 create mode 100644 azure-rm/README.md create mode 100644 azure-rm/json/devtestlab.json rename demos/devtestlabs/azuredeploy.parameters.json => azure-rm/json/devtestlab.parameters.json (50%) create mode 100644 azure-rm/json/vm.json create mode 100644 azure-rm/json/vm.parameters.json create mode 100644 continuous-deployment/README.md create mode 100644 continuous-deployment/media/CD3.png create mode 100644 continuous-deployment/media/CD4.png create mode 100644 continuous-integration/README.md create mode 100644 continuous-integration/media/CI1.png create mode 100644 continuous-integration/media/CI2.png create mode 100644 continuous-integration/media/CI4.png create mode 100644 continuous-integration/media/CI8.png create mode 100644 demos/README.md delete mode 100644 demos/devtestlabs/ProvisionDemoLab.ps1 delete mode 100644 demos/devtestlabs/azuredeploy.json rename lab-4-feature-toggle.md => feature-flag/README.md (90%) create mode 100644 getting-started/README.md create mode 100644 mepfielddemo/README.md create mode 100644 mepfielddemo/TFS-Git.png rename lab-2-multi-stage-deployments.md => multi-stage-deployments/README.md (62%) delete mode 100644 prerequisites.md create mode 100644 private-agent/README.md rename lab-7-security-verification-tests.md => security-testing/README.md (60%) rename lab-6-smoke-testing.md => smoke-testing/README.md (92%) rename lab-3-analysis-with-sonarqube.md => sonarqube/README.md (69%) create mode 100644 source/build/DevOpsHOL-CI.json create mode 100644 source/deploy/DevOpsHOL-CD.json rename lab-5-ui-testing.md => ui-testing/README.md (78%) diff --git a/README.md b/README.md index b2312c4..ce77f7f 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,20 @@ # Avanade DevOps HOL +These are the hands on labs associated with the Avanade DevOps Practitioners course. This is based to a large part on the [PartsUnlimitedHOL](https://github.com/Microsoft/PartsUnlimitedE2E/blob/master/PartsUnlimited-aspnet45/docs/GettingStarted.md) but simplified to use the Visual Studio MVC sample application. It does not use the PartsUnlimited HOL, but we want to acknowledge that project's contribution to this project. -These are the hands on labs associated with the Avanade DevOps Practitioners course. This is based to a large part on the [PartsUnlimitedHOL](https://github.com/Microsoft/PartsUnlimitedE2E/blob/master/PartsUnlimited-aspnet45/docs/GettingStarted.md) but simplified to use the Azure DevOps Project sample application. +You can accomplish these labs using an Azure VM as the development machine. This not only keeps you from having to make changes to your local environment, but it gives you additional experience using Azure and PowerShell. To start setting up your environment, make sure to follow the steps in the Prerequisites lab. -You can accomplish these labs using an Azure VM as the development machine. This not only keeps you from having to make changes to your local environment, but it gives you additional experience using Azure and PowerShell. +## Course Training Labs and Estimated Effort +Below you will find the available training labs and the estimated time they will take to complete. The labs have been ordered in a logical way -To start setting up your environment, make sure to follow the steps in the [Prerequisites](prerequisites.md) lab. - -## Hands-on Labs +The order in which they are presented, is the recommended order to run through them. | Lab | Estimated Effort (minutes) | | --------- |:--------------------------:| -| [Lab 1 - Create a CI/CD pipeline for .NET with the Azure DevOps Project](lab-1-azure-devops-project-pipeline.md) | 60 | -| [Lab 2 - Add QA environment and define your multi-stage continuous deployment process with approvals and gates](lab-2-multi-stage-deployments.md) | 45 | -| [Lab 3 - Analysis with SonarQube](lab-3-analysis-with-sonarqube.md) | 45 | -| [Lab 4 - Feature Toggle](lab-4-feature-toggle.md) | 45 | -| [Lab 5 - UI Testing](lab-5-ui-testing.md) | 90 | -| [Lab 6 - Smoke Testing](lab-6-smoke-testing.md) | 45 | -| [Lab 7 - Security Verification Tests in your CD pipeline](lab-7-security-verification-tests.md) | 45 | \ No newline at end of file +| [Prerequisites - Set up your development environment with PowerShell and ARM](azure-rm/README.md) | 30 | +| [Lab 1 - Create a CI/CD pipeline for .NET with the Azure DevOps Project](azure-devops-project/README.md) | 60 | +| [Lab 2 - Add QA environment and define your multi-stage continuous deployment process with approvals and gates](multi-stage-deployments/README.md) | 45 | +| [Lab 3 - Analysis with SonarQube](sonarqube/README.md) | 45 | +| [Lab 4 - Feature Toggle](feature-flag/README.md) | 45 | +| [Lab 5 - UI Testing](ui-testing/README.md) | 90 | +| [Lab 6 - Smoke Testing](smoke-testing/README.md) | 45 | +| [[**Optional**] Lab 7 - Security Verification Tests in your CD pipeline](security-testing/README.md) | 45 | diff --git a/lab-1-azure-devops-project-pipeline.md b/azure-devops-project/README.md similarity index 90% rename from lab-1-azure-devops-project-pipeline.md rename to azure-devops-project/README.md index c52e174..442da0b 100644 --- a/lab-1-azure-devops-project-pipeline.md +++ b/azure-devops-project/README.md @@ -1,4 +1,4 @@ -# Avanade DevOps HOL - Lab 1 - Create a CI/CD pipeline for .NET with the Azure DevOps Project +# Avanade DevOps HOL - Create a CI/CD pipeline for .NET with the Azure DevOps Project In this lab, we setup our DevOps Project in Azure to create our CI/CD pipeline. This will provide us with a standard code base to work with. @@ -79,7 +79,7 @@ Based on [this](https://docs.microsoft.com/en-us/azure/devops-project/azure-devo 1. In VSTS, edit your build definition to support .NET Core 2.0.3 - Open task "NET Core Tool Installer" and change the version field to 2.0.3 (Do not change task version) - ![Lab 1 netcore version](images/lab-1-netcoreversion.png) + ![Lab 1 netcore version](../images/lab-1-netcoreversion.png) 1. Push your code to trigger a build/release @@ -90,5 +90,4 @@ Based on [this](https://docs.microsoft.com/en-us/azure/devops-project/azure-devo 1. Export the ARM template to set up the Web App in Azure, integrate it in your Release definition ## Next steps - -Continue with [Lab 2 - Add QA environment and define your multi-stage continuous deployment process with approvals and gates](lab-2-multi-stage-deployments.md). \ No newline at end of file +Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file diff --git a/azure-rm/ProvisionEnvironment.ps1 b/azure-rm/ProvisionEnvironment.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..5a7c2d3af49164ff054a852117a7c4e4041607c8 GIT binary patch literal 2650 zcmd6p&2Q5{5XI+=#Q(5La)5&oaO1!M6~YD5DuteqARlg8ln;|Q4Yc%M2YzoiTRTpj z6c7@!?AW`rGjHa-nfB+8mc6n$*Nppx4J@~F-lulNcWS5H`kk_qnzQHJ4O?I}vy8X< zcF*5U)(`B=dRUIUWzJWMrB3OYd(YZku%h$MzVTe*-*GDC8nP#kEq<5Q=Q&{aoJbK> zhX@nzGaxzUeQp=n2;Txkj_WowiWe{`TJ$m_!!nMZU3x?T_3an}!mf`O@GJIfaOf+u zD#jjpW%kq_+Y@_Mi}1XJ#M#PMGWVE;yg(dt5G#vy{Q@_m8w8Gs@>j5z+n8#X*?Pm- z5mr;Yi?t!Y;%Uq+73ixz|A6)ZS&P{O<;1#m;pYI~Q`S@a>OFnOTbs2xTI=Ecj1!0O z`}ro;6&5Y~Xpc(OOW6Iwdc$7wcFM^m=yG4dYkSDfmCs0w>k3h&B;l`OlC}rFUP9(f zm=5tM%Z~Rv_TH}jQ*{X1-HdVfeCvHnv$4uml*ctScc84>EA+O%Z^{Y~j-W7gs)L=> zD?;2k>Mg#Co~i2Hl@u?pO>D)kW`nc$pmnHAy)M3IzMAseC(6Kc8R{GL+{b#vrG6IY zZO?O5W`k(z?Gt;;bAjz8mh#^7xI>hbuWaohC|lkGigI@QI#|6SjB)D3xwn~LG5s27 zPyWLR&A2epR{UzczE7)F9^<1=7w8K9JDgu_skzEVF@2MJ-?b96PT2x-v6u;ni?^>{$_-}|FkhP zk{wwV_1RU6!m8@|T_uY)*{bgy+i<0de2iKEFp)Y0j-2RjoN( z{7$57>-++Q_3=-9jQ+Z(Bil{#+Q)e4-v5L5g15$+0ZnE7R};08z{ Change directory link and select the new AD instance that you just created. + - For more information, you can reference [Associate an existing subscription to your Azure AD directory](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-how-subscriptions-associated-directory#to-associate-an-existing-subscription-to-your-azure-ad-directory) + +## Preparing a Development environment + +1. Make sure you have an active Azure DevOps account.
+[Sign up for Azure DevOps](https://dev.azure.com/) + +2. Verify that PowerShell v5+ is installed along with the AzureRM modules. + - Install-Module Powershellget -Force + - Install-Module -Name AzureRm -AllowClobber + - Import-Module -Name AzureRM + +3. Using an Azure development environment is strongly encouraged. This avoids conflicts with your existing development environment. Complete the steps listed below in the [Azure Development Environment](#azure-development-environment). + +4. Complete the [Getting Started](getting-started/README.md) lab. This will make sure that your environment is correctly configured and ready to execute the remaining labs in the course. + +5. Configure a private Build/Release agent from the [Private Agent](private-agent/README.md) lab. + +## Set up the Azure Development Environment +You can either configure an Azure development environment on your own or use the PowerShell script provided by this lab. This will create a DevTestLab in a new Azure Resource Group and then configure an Azure VM with Windows 10 and the latest Visual Studio Community edition. It will also use Chocolatey to install a collection of other tools and applications. + +>**Note:** Not all VM SKUs are available in every region. You can get the list of SKUs in a particular location with the following PowerShell commands. +```PowerShell +$locName="South Central US" +Get-AzureRMVMImageSku -Location $locName -Publisher "MicrosoftVisualStudio" -Offer "VisualStudio" | Select Skus +``` + +To start setting up your environment, follow these steps: + +1. Clone this repository or download the [azure-rm](../azure-rm) folder and extract the files on your system. + +1. Open **ProvisionEnvironment.ps1** and modify the following lines of PowerShell code in the top of the file: + ```PowerShell + $subscriptionName = "Services" # Change to the name of your azure subscription + $ResourceGroupName = "adp2019" # Change if you want to name the resource group differently + ``` + +1. Then open a PowerShell console in the same folder and execute the file: .\ProvisionEnvironment.ps1 + +1. Watch how the script will create your required resources in Azure. **The process may take 20 minutes.** + +## Next steps +Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file diff --git a/azure-rm/json/devtestlab.json b/azure-rm/json/devtestlab.json new file mode 100644 index 0000000..3356097 --- /dev/null +++ b/azure-rm/json/devtestlab.json @@ -0,0 +1,239 @@ +{ + "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "newLabName": { + "type": "string", + "defaultValue": "FabrikamDemoLab", + "metadata": { + "description": "The name of the new lab instance to be created." + } + }, + "timeZoneId": { + "type": "string", + "defaultValue": "UTC", + "metadata": { + "description": "The timezone of the lab." + } + }, + "labVmShutDownTime": { + "type": "string", + "minLength": 5, + "maxLength": 5, + "defaultValue": "21:00", + "metadata": { + "description": "Set 'Auto Shutdown' policy: The UTC time at which the Lab VMs will be automatically shutdown (E.g. 17:30, 20:00, 09:00)." + } + }, + "maxAllowedVmsPerUser": { + "type": "int", + "minValue": 0, + "defaultValue": 10, + "metadata": { + "description": "Set 'max VM allowed per user' policy: The maximum number of VMs allowed per user." + } + }, + "maxAllowedVmsPerLab": { + "type": "int", + "minValue": 0, + "defaultValue": 100, + "metadata": { + "description": "Set 'Total VMs allowed in Lab' policy: The maximum number of VMs allowed per lab." + } + }, + "vmSize": { + "type": "string", + "defaultValue": "Standard_D1", + "metadata": { + "description": "The size of all the VMs to be created in the lab." + } + }, + "vmStorageType": { + "type": "string", + "defaultValue": "Premium", + "metadata": { + "description": "The storage type ('Premium' or 'Standard') of all the VMs to be created in the lab." + } + }, + "vmUsername": { + "type": "string", + "defaultValue": "demolab", + "metadata": { + "description": "The username for the local account that will be created on all the new VMs." + } + }, + "vmPassword": { + "type": "securestring", + "defaultValue": "<3DevTestLabs!", + "metadata": { + "description": "The password for the local account that will be created on all the new VMs." + } + }, + "offer": { + "type": "string", + "defaultValue": "visualstudio2019" + }, + "publisher": { + "type": "string", + "defaultValue": "microsoftvisualstudio" + }, + "sku": { + "type": "string", + "defaultValue": "vs-2019-comm-win10-n" + }, + "osType": { + "type": "string", + "defaultValue": "Windows" + }, + "version": { + "type": "string", + "defaultValue": "latest" + }, + "chocolatey_packages": { + "type": "string", + "defaultValue": "git,vscode,googlechrome", + "metadata": { + "description": "The packages that will be installed by chocolatey on the new vm." + } + }, + "chocolatey_allowEmptyChecksums": { + "type": "bool", + "defaultValue": true + }, + "chocolatey_ignoreChecksums": { + "type": "bool", + "defaultValue": true + } + }, + "variables": { + "newLabId": "[resourceId('Microsoft.DevTestLab/labs', parameters('newLabName'))]", + "labVirtualNetworkName": "[concat('Dtl', parameters('newLabName'))]", + "labSubnetName": "[concat(variables('labVirtualNetworkName'), 'Subnet')]", + "labVirtualNetworkId": "[concat('/virtualnetworks/', variables('labVirtualNetworkName'))]", + "vmFormulaName": "[concat(parameters('newLabName'), '/Developer')]", + "vmFormulaDescription": "[concat('Formula for lab VMs in ', parameters('newLabName'))]" + }, + "resources": [ + { + "apiVersion": "2017-04-26-preview", + "type": "Microsoft.DevTestLab/labs", + "name": "[parameters('newLabName')]", + "location": "[resourceGroup().location]", + "resources": [ + { + "apiVersion": "2017-04-26-preview", + "name": "[variables('labVirtualNetworkName')]", + "type": "virtualnetworks", + "dependsOn": [ + "[variables('newLabId')]" + ] + }, + { + "apiVersion": "2017-04-26-preview", + "name": "LabVmsShutdown", + "type": "schedules", + "dependsOn": [ + "[variables('newLabId')]" + ], + "properties": { + "status": "Enabled", + "timeZoneId": "[parameters('timeZoneId')]", + "taskType": "LabVmsShutdownTask", + "dailyRecurrence": { + "time": "[replace(parameters('labVmShutDownTime'),':','')]" + } + } + }, + { + "apiVersion": "2017-04-26-preview", + "name": "default/MaxVmsAllowedPerUser", + "type": "policysets/policies", + "dependsOn": [ + "[variables('newLabId')]" + ], + "properties": { + "description": "", + "factName": "UserOwnedLabVmCount", + "threshold": "[string(parameters('maxAllowedVmsPerUser'))]", + "evaluatorType": "MaxValuePolicy", + "status": "enabled" + } + }, + { + "apiVersion": "2017-04-26-preview", + "name": "default/MaxVmsAllowedPerLab", + "type": "policysets/policies", + "dependsOn": [ + "[variables('newLabId')]" + ], + "properties": { + "description": "", + "factName": "LabVmCount", + "threshold": "[string(parameters('maxAllowedVmsPerLab'))]", + "evaluatorType": "MaxValuePolicy", + "status": "enabled" + } + } + ] + }, + { + "apiVersion": "2017-04-26-preview", + "type": "Microsoft.DevTestLab/labs/formulas", + "name": "[variables('vmFormulaName')]", + "location": "[resourceGroup().location]", + "dependsOn": [ + "[variables('newLabId')]" + ], + "properties": { + "description": "[variables('vmFormulaDescription')]", + "osType": "[parameters('osType')]", + "formulaContent": { + "properties": { + "size": "[parameters('vmSize')]", + "userName": "[parameters('vmUsername')]", + "password": "[parameters('vmPassword')]", + "labSubnetName": "[variables('labSubnetName')]", + "labVirtualNetworkId": "[variables('labVirtualNetworkId')]", + "allowClaim": true, + "storageType": "[parameters('vmStorageType')]", + "galleryimagereference": { + "Sku": "[parameters('sku')]", + "OsType": "[parameters('osType')]", + "Publisher": "[parameters('publisher')]", + "Offer": "[parameters('offer')]", + "Version": "[parameters('version')]" + }, + "networkInterface": { + "virtualNetworkId": "[variables('labVirtualNetworkId')]" + }, + "artifacts": [ + { + "artifactid": "/artifactsources/public repo/artifacts/windows-chocolatey", + "parameters": [ + { + "name": "packages", + "value": "[parameters('chocolatey_packages')]" + }, + { + "name": "allowEmptyChecksums", + "value": "[parameters('chocolatey_allowEmptyChecksums')]" + }, + { + "name": "ignoreChecksums", + "value": "[parameters('chocolatey_ignoreChecksums')]" + } + ] + } + ] + } + } + } + } + ], + "outputs": { + "labId": { + "type": "string", + "value": "[resourceId('Microsoft.DevTestLab/labs', parameters('newLabName'))]" + } + } +} \ No newline at end of file diff --git a/demos/devtestlabs/azuredeploy.parameters.json b/azure-rm/json/devtestlab.parameters.json similarity index 50% rename from demos/devtestlabs/azuredeploy.parameters.json rename to azure-rm/json/devtestlab.parameters.json index cbe91ce..6c33069 100644 --- a/demos/devtestlabs/azuredeploy.parameters.json +++ b/azure-rm/json/devtestlab.parameters.json @@ -2,41 +2,50 @@ "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { + "newLabName": { + "value": "devopslab" + }, "timeZoneId": { "value": "W. Europe Standard Time" }, "labVmShutDownTime": { "value": "21:00" }, - "labName": { - "value": "DevLab" - }, "maxAllowedVmsPerUser": { - "value": 2 + "value": 3 }, "maxAllowedVmsPerLab": { - "value": 50 - }, - "allowedVmSizes": { - "value": "Standard_DS1_v2,,Standard_DS2_v2" + "value": 100 }, "vmSize": { - "value": "Standard_DS2_v2" + "value": "Standard_B8ms" }, "vmStorageType": { "value": "Standard" }, - "vmOffer": { - "value": "VisualStudio" + "vmUsername": { + "value": "devopshol" + }, + "vmPassword": { + "value": "ADP#2019" }, - "vmPublisher": { - "value": "MicrosoftVisualStudio" + "offer": { + "value": "visualstudio2019" }, - "vmSku": { - "value": "VS-2017-Ent-Latest-WS2016" + "publisher": { + "value": "microsoftvisualstudio" + }, + "sku": { + "value": "vs-2019-comm-win10-n" }, "osType": { "value": "Windows" + }, + "version": { + "value": "latest" + }, + "chocolatey_packages": { + "value": "git,vscode,googlechrome" } } } \ No newline at end of file diff --git a/azure-rm/json/vm.json b/azure-rm/json/vm.json new file mode 100644 index 0000000..be3713e --- /dev/null +++ b/azure-rm/json/vm.json @@ -0,0 +1,138 @@ +{ + "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "newVMName": { + "type": "string", + "metadata": { + "description": "The name of the new vm to be created." + } + }, + "existingLabName": { + "type": "string", + "metadata": { + "description": "The name of an existing lab where the new vm will be created." + } + }, + "offer": { + "type": "string", + "metadata": { + "description": "Offer of the gallery image" + } + }, + "publisher": { + "type": "string", + "metadata": { + "description": "Publisher of the gallery image" + } + }, + "sku": { + "type": "string", + "metadata": { + "description": "Sku of the gallery image" + } + }, + "osType": { + "type": "string", + "metadata": { + "description": "OsType of the gallery image" + } + }, + "version": { + "type": "string", + "defaultValue": "latest", + "metadata": { + "description": "Version of the gallery image" + } + }, + "newVMSize": { + "type": "string", + "metadata": { + "description": "The size of the new vm to be created." + } + }, + "userName": { + "type": "string", + "metadata": { + "description": "The username for the local account that will be created on the new vm." + } + }, + "password": { + "type": "securestring", + "metadata": { + "description": "The password for the local account that will be created on the new vm." + } + }, + "chocolatey_packages": { + "type": "string", + "metadata": { + "description": "The packages that will be installed by chocolatey on the new vm." + } + }, + "chocolatey_allowEmptyChecksums": { + "type": "bool", + "defaultValue": true + }, + "chocolatey_ignoreChecksums": { + "type": "bool", + "defaultValue": true + } + }, + "variables": { + "labSubnetName": "[concat(variables('labVirtualNetworkName'), 'Subnet')]", + "labVirtualNetworkId": "[resourceId('Microsoft.DevTestLab/labs/virtualnetworks', parameters('existingLabName'), variables('labVirtualNetworkName'))]", + "labVirtualNetworkName": "[concat('Dtl', parameters('existingLabName'))]", + "resourceName": "[concat(parameters('existingLabName'), '/', parameters('newVMName'))]", + "resourceType": "Microsoft.DevTestLab/labs/virtualMachines" + }, + "resources": [ + { + "apiVersion": "2018-10-15-preview", + "type": "Microsoft.DevTestLab/labs/virtualMachines", + "name": "[variables('resourceName')]", + "location": "[resourceGroup().location]", + "properties": { + "size": "[parameters('newVMSize')]", + "isAuthenticationWithSshKey": false, + "userName": "[parameters('userName')]", + "sshKey": "", + "password": "[parameters('password')]", + "labVirtualNetworkId": "[variables('labVirtualNetworkId')]", + "labSubnetName": "[variables('labSubnetName')]", + "artifacts": [ + { + "artifactId": "[resourceId('Microsoft.DevTestLab/labs/artifactSources/artifacts', parameters('existingLabName'), 'public repo', 'windows-chocolatey')]", + "parameters": [ + { + "name": "packages", + "value": "[parameters('chocolatey_packages')]" + }, + { + "name": "allowEmptyChecksums", + "value": "[parameters('chocolatey_allowEmptyChecksums')]" + }, + { + "name": "ignoreChecksums", + "value": "[parameters('chocolatey_ignoreChecksums')]" + } + ] + } + ], + "notes": "Visual Studio 2019 Community on Windows 10 Enterprise N (x64)", + "galleryImageReference": { + "Sku": "[parameters('sku')]", + "OsType": "[parameters('osType')]", + "Publisher": "[parameters('publisher')]", + "Offer": "[parameters('offer')]", + "Version": "[parameters('version')]" + } + } + } + ], + "outputs": { + "vmId": { + "type": "string", + "value": "[resourceId(variables('resourceType'), parameters('existingLabName'), parameters('newVMName'))]" + } + } +} \ No newline at end of file diff --git a/azure-rm/json/vm.parameters.json b/azure-rm/json/vm.parameters.json new file mode 100644 index 0000000..040460f --- /dev/null +++ b/azure-rm/json/vm.parameters.json @@ -0,0 +1,39 @@ +{ + "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "newVMName": { + "value": "devopsvm" + }, + "existingLabName": { + "value": "devopslab" + }, + "newVMSize": { + "value": "Standard_B8ms" + }, + "userName": { + "value": "devopshol" + }, + "password": { + "value": "ADP#2019" + }, + "chocolatey_packages": { + "value": "git,vscode,googlechrome" + }, + "offer": { + "value": "visualstudio2019" + }, + "publisher": { + "value": "microsoftvisualstudio" + }, + "sku": { + "value": "vs-2019-comm-win10-n" + }, + "osType": { + "value": "Windows" + }, + "version": { + "value": "latest" + } + } +} \ No newline at end of file diff --git a/continuous-deployment/README.md b/continuous-deployment/README.md new file mode 100644 index 0000000..705f3ed --- /dev/null +++ b/continuous-deployment/README.md @@ -0,0 +1,158 @@ +# Avanade DevOps HOL - Continuous Deployment with Visual Studio Release Management +In this lab, you have an example MVC application, committed to a Git repository in Visual Studio Team Services (VSTS) and a Continuous Integration build that builds the app and runs unit tests whenever code is pushed to the master branch. Now you want to set up Release Management (a feature of Visual Studio Team Services) to be able continuously deploy the application to an Azure Web App. Initially the app will be deployed to a dev deployment slot. The staging slot will require and approver before the app is deployed into it. Once an approver approves the staging slot, the app will be deployed to the production site. + +### Pre-requisites: ### +- Complete [Continuous Integration](../continuous-integration/README.md) lab. + +### Tasks Overview: ### + +**1. Add ARM Template to Solution:** In this step, add a deployment project to the solution. This will create an ARM template which will be used to create the App Service and web site in Azure for deploying the solution into. + +**2. Create Service Endpoint:** In this step, create a service endpoint in VSTS that will allow you to connect to the Azure subscription and use ARM templates to create the deployment environments. + +**3. Create a VSTS Release:** In this step, the release will be created that will configure the deployment environment in Azure and deploy the website to multiple environments. + + +### I. Add ARM Template to Solution +1. Open the DevOpsHOL solution, that was created in the [Getting Started](../getting-started/README.md) lab, in Visual Studio. Right click on the solution in Solution Explorer and choose **Add project...** + +![]() + +2. Choose a Cloud -> Azure Resource Group project type and name it DevOpsHOL.Deployment. On the next dialog, choose the **Web App** template. + +![]() + +3. This will create a new project in the solution that contains the files for deployment to Azure. The **Website.json** file will be used to create the deployment environments in task III below.
+NOTE: There are a number of ways that the ARM template could have been created and added to the solution. However, since a deployment project also automatically creates a PowerShell script for deployment and a template parameters file, this can also be used to manually deploy the solution if desired (but not in this lab). + +4. Open the **WebSite.json** file and replace the contents with the content of(https://raw.githubusercontent.com/Avanade/DevOpsHOL/master/source/deploy/azuredeploy.json). This adds additional features to the deployment such as deployment slots which will be used later in the lab. + +5. Open the **WebSite.parameters.json** file and replace the contents with the content of(https://raw.githubusercontent.com/Avanade/DevOpsHOL/master/source/deploy/azuredeploy.parameters.json). This matches the parameters with the azuredeploy.json file. + +4. Check in the solution and push to VSTS (Team Explorer -> Changes -> Commit All and Push). This checks in the ARM template into source control both locally and in the VSTS repository. This will also trigger a new build (check to make sure this happened and was successful). + +### II. Create Service Endpoint +1. Go to your **account’s homepage**: + https://dev.azure.com/ +2. Select the DevOpsHOL team project that was created in the [Getting Started](../getting-started/README.md) lab. +This will take you to the project dashboard page. Click on the Project Settings (gear) in the bottom left menu bar and select Service connnections. Choose **New service connection** and select **Azure Resource Manager** from the drop down. + +![]() + +3. This will open the **Add Azure Resource Manager Service Endpoint** dialog. Set the Connection Name to "DevOpsHOLDeployment", choose your subscription and click **OK**.
Leaving the Resource Group blank will allow this to work for multiple resource groups so you don't have to worry about setting this up again if you drop and recreate your Azure resource group. The service endpoint won't work even if the new resource group has the same name as the one selected when it was created.
+**NOTE:** You will need to allow popups in the browser, otherwise the popup to authenticate to Azure will fail to appear. + +![]() + +4. Next sign in to your Azure account to complete the endpoint creation process. + +### III. Create Release +1. In the DevOpsHOL project in Azure DevOps, navigate to **Pipelines** -> **Releases** and click the **New Pipeline** button to create a new release definition. + +2. Near the top of the **Select a Template** panel, choose **Empty job**. As in the previous lab, you normally would choose a template that closely matches the type of deployment you are doing (or import an existing template), but for this lab we are building it from scratch to see more of the process. + +3. Near the top of the page next to **New release pipeline**, click on the pencil icon and rename the release to **DevOpsHOL-CD** + +4. On the **Stage** panel, rename the stage to Dev (this will be the development integration environment). + +5. Click on the Artifacts +Add link and select the DevOpsHOL-CI as the Source. Set the version to "Latest" so the release will deploy the latest build. Click Add button to add the build to the release artifacts list. + +6. In the Stages box, click on the 1 job, 0 task link under the Dev environment name. This will open a panel to allow adding of tasks to the release. + +6. Click on the **Agent job** accordion item and review the options for this phase of the release. Leave these settings as is for now. Click on the + icon to the right of Agent phase and add the following two tasks: **Azure Resource Group Deployment** and **Azure App Service Deploy**. + +7. Click on the **Azure Deployment:Create Or Update Resource Group...** accordion and fill out the settings as follows: +>+ Azure Subscription: DevOpsHOLDeployment +>>+ this is the service endpoint set up earlier +>+ Resource Group: $(ResourceGroupName) +>>+ this is a variable set up in the next step +>+ Location: $(SiteLocation) +>+ Template: $(System.DefaultWorkingDirectory)/\_DevOpsHOL-CI/drop/DevOpsHOL.Deployment/WebSite.json +>+ Override Template Parameters: Click on the ellipsis to the right of the edit box and enter the following names and values:
+NOTE: ARM parameters are case sensitive so the name much match the case of the parameters in the ARM template. +```PowerShell +appServicePlanName $(AppServicePlan) +siteName $(WebSiteName) +siteLocation $(SiteLocation) +workerSize "0" +``` + +![]() + +>>+ You will shortly define the values for each parameter, like `$(siteName)`, in the Environment variables. +>>+ **Note**: If you open the WebSite.parameters.json file, you will see placeholders for these parameters. You could hard code values in the file instead of specifying them as "overrides". Either way is valid. If you do specify values in the parameters file, remember that in order to change values, you would have to edit the file, commit and create a new build in order for the Release to have access the new values. + +8. Click on the **Azure App Service Deploy:** accordion and fill out the settings as follows: +>+ Azure Subscription: DevOpsHOLDeployment +>>+ The name of the endpoint created earlier +>+ App Service name: $(WebSiteName) +>+ Deploy to slot: Checked +>+ Resource group: $(ResourceGroupName) +>+ Slot: Dev + +9. Click **Variables** link and add the following variables and values. + * **AppServicePlan**: DevOpsHOL *(or any name you would like)* + * **ResourceGroupName**: DevOpsHOL *(or any name you would like)* + * **SiteLocation**: *Choose a valid Azure location such as "centralus" or "eastus2"* + * **WebsiteName**: *Unique name of the website in Azure* + + > **Note**: Use a unique value for your WebsiteName by adding something custom at the end like your initials. Example for WebsiteName : devopshol-am + +10. Click **Save** and then click **Release -> Create Release**, click **Create**. Inside the Green notification bar, click on the *Release-1* link to be taken to a page to show the release progress. If this page doesn't refresh automatically, periodically refresh the page until the release succeeds (if the release fails, review the error message and go back and make adjustments and re-release). + +11. Open a browser page and navigate to the website in Azure. The url will depend on the $(WebsiteName). For example, if the $(WebsiteName) was devopshol-batman, then navigate to https://devopshol-batman-dev.azurewebsites.net/.
+NOTE: The website address can be seen on the Azure portal on the WebApp + +![]() + +12. Once the initial deployment has been verified, go back and edit the release to add staging and production releases. +>+ Navigate to Build and Release -> Releases +>+ Hover over the **DevOpsHOL-CD** Release Definition and right click on the ellipse (...) and select the Edit menu option. +>+ Hover over the **Dev** environment and select the **Clone** link. + +![]() + +>+ Rename **Copy of Dev** to **Stage** +>+ Click on the **1 phase, 2 tasks** link in the Stage environment. +>+ Remove the **Azure Deployment:Create Or Update Resource Group** task (no need to re-run the ARM template) +>+ Click on the **Azure App Service Deploy: $(WebSiteName)** task and edit the Slot to change **Dev** to **Staging**. +>+ Save +>+ Click on the **Pipeline** link and repeat the above steps to create a clone of **Staging** called **Prod** +>>+ Un-check the **Deploy to slot** which will make the release deploy to the production slot. +>+ Save +>+ Release -> Create Release -> Create +>>+ This wil create a release that is deployed to Dev, Stage and Prod +13. Once the release completes successfully to all three environments, verify that the application has been deployed to all three environments +>+ https://\-dev.azurewebsites.net/ +>+ https://\-staging.azurewebsites.net/ +>+ https://\.azurewebsites.net/ +14. By default, the Release process is manual. Go back to the **Pipeline** tab and click on the lightning bolt icon in the Artifacts panel and enable the Continuous deployment trigger +15. Now go back into Visual Studio and make a change to the code that will be visible in the application. Observe the status of the Build and Release and verify that all the items configured in the CI and CD labs complete successfully.
+NOTE: If the Release fails with error "ERROR_FILE_IN_USE", execute [these steps](#errors). + + +# Shortcut +Just like in the previous lab, you can use the import functionality with the [DevOpsHOL-CD.json](../source/deploy/DevOpsHOL-CD.json) file to import the release definition to keep from having to create this by hand but you miss out on the joy of learning. + +NOTE: Even if you use this import file, you'll have to go through each job and task to make sure the settings are appropriate since the values in the import file may not match what is in your environment. + +# Next steps + +In this lab you created a series of environments using an Azure ARM template and automatically deployed to each of these environments. + +1. Explore other options. Here are some additional tasks that you may want to try to expand your knowledge further. +>+ By default, the releases automatically move from environment to environment upon successful deployment to the previous deployment. Go back to the release definition +and modify the settings to require approvals prior to deploying to the next environment. +>+ Modify the ARM template (Website.json) to modify some of the properties (e.g. change the worker size or tier; modify the app settings per slot) +>+ Add additional variables to the build or release to make them more dynamic (i.e. less dependent on hard coded names) +>+ Use the ARM template and the Visual Studio deployment and publish process to create an individual Azure environment in addition to the Dev, Stage and production environments. +>+ Delete the DevOpsHOL resource group and re-release the same build to make sure that the environments can be dynamically re-created. +>+ Export the build and release definitions. Check them into source control. Delete these definitions and restore from the source files. + +2. Next do the [UI Testing](../ui-testing/README.md) lab + +# Common errors and solutions + +- ERROR_FILE_IN_USE: Web Deploy cannot modify the file 'DevOpsHOL.dll' on the destination because it is locked by an external program. + > Solution: Open the Release definition Editor and go to the Additional Deployment Options for every environment (Dev/Stage/Prod). Change the values to the following:
+ ![]() diff --git a/continuous-deployment/media/CD3.png b/continuous-deployment/media/CD3.png new file mode 100644 index 0000000000000000000000000000000000000000..d9793bbaada80b35906b0406c0db0aa554d1cfe1 GIT binary patch literal 60745 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 V2tZ6}83=wJW&|AAb?x@E{{k)#(>VYD literal 0 HcmV?d00001 diff --git a/continuous-deployment/media/CD4.png b/continuous-deployment/media/CD4.png new file mode 100644 index 0000000000000000000000000000000000000000..0dad552f46b7ae52bd187ddc12abb97ffdfc72dd GIT binary patch literal 47891 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 ZaN}n^EdB57XEfj?E2Sh^`OY}_zX2^8y3has literal 0 HcmV?d00001 diff --git a/continuous-integration/README.md b/continuous-integration/README.md new file mode 100644 index 0000000..a263a56 --- /dev/null +++ b/continuous-integration/README.md @@ -0,0 +1,126 @@ +# Avanade DevOps HOL - Continuous Integration with Visual Studio Team Services +In this lab, we use the application created in the Getting Started HOL to set up +Visual Studio Team Services to be able continuously integrate code into the master +branch of code. This means that whenever code is committed and pushed to the +master branch, we want to ensure that it integrates into our code correctly to +get fast feedback. To do so, we are going to be setting up a Continuous Integration build (CI) that +will allow us to compile and run unit tests on our code every time a commit is +pushed to Visual Studio Team Services. + +**NOTE:** Microsoft changes the way things work all the time so you may have to figure some of this out as the screens may not exactly follow but the principles are the same. + +## Pre-requisites: ## +- Complete [Getting Started](../getting-started/README.md) hands on lab. + +## Tasks Overview: ## + +**1. Create Continuous Integration Build:** In this step, you will create a build definition that will be triggered every time a commit is pushed to your repository in Visual Studio Team Services. + +**2. Test the CI Trigger in Visual Studio Team Services:** In this step, test the Continuous Integration build (CI) build we created by changing code in the Parts Unlimited project with Visual Studio Team Services. + + +## I. Create Continuous Integration Build + +A continuous integration build will give us the ability check whether the code +we checked in can compile and will successfully pass any automated tests that we +have created against it. + +1. Go to your **account’s homepage**: + https://dev.azure.com/ +2. Select the DevOpsHOL team project that was created in the [Getting Started](../getting-started/README.md) lab. +This will take you to the project dashboard page. From the menu on the left side of the page, choose Pipelines -> Builds. Now click on the **New Pipeline** button. On the "Select your repository" page, make sure everything is correct and then click **Continue**. + +![]() + +3. Select the **Empty job** link near the top to create a build definition. +>**Note:** Normally you would just select one of the available templates that is closest to the type of solution you are +deploying but for this lab we want to walk through a few extra steps to allow you to become more familiar with the process. + +>> "Beware of knowledge you did not earn" + +4. After clicking the **Empty job** link you'll need to fill out the build definition starting with the Process task and it's children. +>- Process
+ Name: **DevOpsHOL-CI**
+ Agent queue: **Hosted VS2017**
+> **Note:** This will use a hosted (i.e. built in) build server. +For more flexibility in the build (and for a more in depth learning experience), a private agent can be configured and used following the steps in the [Private Agent](../private-agent/README.md) lab. This is not necessary for this lab, but you can do this if you are up for the adventure. +>- Process -> Get Sources
+ Azure Repos Git
+ Team Project: DevOpsHOL
+ Repository: DevOpsHOL +5. To the right of the **Agent job 1** item click on the + sign and add the following tasks:
+ For each of the tasks, the settings for that task (if different than the default) are listed below
+ (*Hint: use the search box to filter in order to find the tasks in the list*) +>- NuGet Tool Installer (Use NuGet 4.3.0) +>- NuGet (NuGet restore) +>- Visual Studio Build
+ MSBuild Arguments: /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)"
+ Platform: $(BuildPlatform)
+ Configuration: $(BuildConfiguration) +>- .NET Core
+ Display name: Test Assemblies
+ Command: test
+ Path to project(s): **/\*test\*.csproj
+ Publish test results: Checked
+>- Publish Build Artifacts
+ Path to publish: $(build.artifactstagingdirectory)
+ Artifact name: drop
+ Artifact publish location: Azure Pipelines/TFS
+ +![]() + +6. Click on the **Variables** tab and add the following Variables: +>- **BuildConfiguration** with a value of **release** +>- **BuildPlatform** with a value of **any cpu** +7. Click on the **Triggers** tab and verify that the **Continuous integration (CI)** option is selected to build the solution every time a change is checked in. Also make sure the filter includes the appropriate branch (in this case **master** and **Batch Changes** checkbox is unchecked +8. Click on the **Options** tab and change the following settings +>- Build number format: $(date:yyyyMMdd)$(rev:.r) +>- Automatically link new work in this build: Enabled +9. Choose **Save & queue** to save the build definition and manually trigger the build. + +![]() + +10. Click on the **Build Number**, and you should get the build in progress. Here you can also see the commands being logged to console and the current steps that the build is on. + +![]() + + +## II. Test the CI Trigger in Visual Studio Team Services + +We will now test the **Continuous Integration build (CI)** build we created by changing code in the project with Visual Studio. + +1. Go back to the DevOpsHOL solution in Visual Studio and navigate to the **/Controllers** open the **HomeController.cs** file for editing. +2. Find the ViewBag.Message within the About() method and change the string to something different such as "My description page.". + +![]() + +3. Build and test the solution locally. NOTE: You may have to **Accept** the cookie policy to see the menu for the **About** page if you made the suggested change above. + +![]() + +4. Once you have validated the change locally, **Commit All and Push**. This will check in the changes to the local Git repository and push the change to the VSTS Git repository. + +![]() + +5. Go back to the VSTS DevOpsHOL project and verify that another build has been automatically started. Once the build is complete, check the build status and review the results. If the build failed on the Test step, it might have been because you didn't run and fix the unit tests before checking in. Go back and get the unit tests working and retry. + +![]() + +## Next steps ## +---------- + +In this lab, you learned how to push new code to Visual Studio Team Services, setup a Git repo and create a Continuous +Integration build that runs when new commits are pushed to the master branch. +This allows you to get feedback as to whether your changes made breaking syntax +changes, or if they broke one or more automated tests, or if your changes are a okay. + +Next do the [Continuous Deployment](../continuous-deployment/README.md) lab + +## Shortcut ## +1. Download the [DevOpsHOL-CI.json](../source/build/DevOpsHOL-CI.json) file locally +2. Go to your project home page and select the **Build and Release** menu item. +3. Click the **+Import** button and select the file downloaded in step 1 and click Import. +4. After the import choose the Hosted VS2017 agent and click on the "Get Sources" process step and verify that it is correctly configured as described above. +5. Choose "Save & queue" to verify that the import and build were successful. + +**NOTE: Due to constant changes in Azure DevOps, the import file may not successfully import all the required settings. You'll still need to go through each setting and verify that it is valid. This may not really be much of a shortcut after all but it does illustrate that you can export and import build and release configurations to some extent.** diff --git a/continuous-integration/media/CI1.png b/continuous-integration/media/CI1.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ae2b99352d33d3fddfc0627d8fcc293c62e0ee GIT binary patch literal 57249 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
j}6RpGnmg?SZmzs88b;g~|p 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 literal 0 HcmV?d00001 diff --git a/continuous-integration/media/CI2.png b/continuous-integration/media/CI2.png new file mode 100644 index 0000000000000000000000000000000000000000..01d2795b68846668a871a12e5f2235784129fa8f GIT binary patch literal 51301 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 F{{tcG>}>!5 literal 0 HcmV?d00001 diff --git a/continuous-integration/media/CI4.png b/continuous-integration/media/CI4.png new file mode 100644 index 0000000000000000000000000000000000000000..25dcc4ec7e0af777cb2fcafb85cb0e4426ac6213 GIT binary patch literal 90625 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 X9;Uwwz*lPKO&6C(CVd3ij7RVm=vi zR;5@+4UOk^%Nb-6b5f)m-}<`b1P{@&;INN0_01NlTh#w`sK3KG<+wM#Dpn{--X+Fb zQr*v1SoNkVk~^}`a%6XAWaF>TINt`5w(hn8Y{jS$MY(<7ToaFW)DyuHmFxMW>*9Bl zH`53uV!#tHt%wmeNQU7-X%V*SY}9_}{v7%o7$HdG?sjFDWtC-nW?J{TmXpzg*-4G{ zl$ngP21^pP)5VevHWXpch#=#U7!A-r0s<$UJgJ7?!3!ZHA5&C-P7D!#Z7PtQf&Zah zue&A|cYl_IM(9?!wRhv0TkN#n?s12#GBrlj zaK674w8(RS&YS9jyvhacBqJFAhlYjH;vor%!_VsH1+Pp!Q%5%$O4l>AM4f~N z#iKX-Qzd!#>Gf|{@*Vte5o>6rZuf)W3TwPe8qDunOwJp!u}|d4*+lmxV@3|QX$kjfPLh9cdkenlO0-fdQ#>hsyiy;OOLUMNOv@aA7V zeIyLCDzE$E8nCR*yvJ{4*-Eq!!6)j3KZ}#y5T;Nf)|Z|y94c-S^*J|4lUF!yfAZYE zvgD+CSghuiD*k=t4ENV2hJre3=w`k(iS{~8lFOoab}PbNf%JUhtH(|kcw-u(d-(XW zJ+oe;YYuwh+;Jqsdx}v`GV`x`dw;Itbf6Q|v(VEua)-KkreL32TWcD5!%mfw9K}$H z0sX09WWnmx!pVAt-q!d@sR#A8 zz!wcW{|y?!tB)dvDjVxheDrbiE0zw)0xluJQKroV!puRFcQ5Tquo{^k;Ksi4Y?UPm zx$d^7EC1NUC+-pNbE6NjqZ1V;aPoh}Ui}uKpRdE?CrBTj(IK{|0+=k0YKYeJf}{3H zlV~tcxReiU7Tp&`-|q_P_gMXwA~KUgY@8rvv)`E{hcbJ=i|f zl#|Ahs8ZyEAhIrSssCy?b@pKTkFfNemifQXl%NtIww_<;ts#Mh7;T{Mr4`Pb+{YN< zK684m|3oX_nH4Ikr$2u+qPC%f(n7pPO?e`$5DW(NXQ`;TlLHMG!^58|+Bsm)G`r?% zmr_6cVfxvR#W8)dpIiB<&@nHSnXPejU(;2|3pm#2m41b17)SXp7+7Wxd@N`t3W zp(vRX++hB^@DBH&InZEfz{R<>A)jmG*ioD{`6SC&FEwjwI)H}tkm;+wQB_%)pOYg) zGGQ5gf8+_5|Ncjc`1tIJhpKD%8@EPb5S6vVN+#xY;Oa+G&|O#U6t_XB=jsRdC^%a6 zwEAqh9Lay~m(}EAbo5rDZu2(wke#n&v(@)r-_4EoI4EuZS2Z|Zen>d2a{YG$gZg|< zVhVbSWjcRenZLX^QekF&N%1of#Dr#~jTjMMBYniSO_gL-*zI{%7jXMEaIf8C?)ZMt zv(8%Mo^F7infFGb(w{C_+(J320rYS>ig~I^UWV6FlYAiy_5s-jXV|*hs6IsT(gTw} zE#mgshTf-aQK*=dPg*ekYsK$JXZ?;6&dC@-YeghnvxZ)5?JjMoi+3V_SEF;ZnYm#) z34iL3?TfBHv`E!LP|m1<5yPcEt_t1foH9X%p5@{lU0N_2j`%djUapXYSH%*AlaMHD zG>>UX`5Gl>6JYI=m@aEza|6?0o2;lTxScH1!*IE2>{vr-nHy@~@J)ENytKbtkK=iCdk1NPnE z+g0XK(CA$%PW!f|HGdTBT)&{$Xo^wXlDB@-@J^6PLE$vFeJy(Wd*!#00hrDMu3@sz zTk*&hlH-s87pxpldCB3!GwA^eKNkKbEjDGO=HMTtrJkP!r>|z|mNRg5Y~uHXJo*f& zs1{c`c*}bYcDK%sMF9rfWKWYViAStMX3P9V`s9=Mm1+3xZ)E^5YKUBkQz+zpL{DEz zLiD9(36ERAPdd7e$_&@+Uh=cgR4WRcT;1!{Zz9g?z!HePle4}=FqfXwo2F zvy;}U&=Q>nQLh59gefO`6>wX+oh?3BP1ppUze6OyP3nlgi^o@{oUoyw0M3yus>~TN zi;y>Ff0XdHX7m(~w=4RlMvX$N0 z_-VmnEV?;E)TiFw0`Xs)M=06Smc_jh$~k*+6yz_WVhfhuL^yop^%kd3D0)M2B^odG zqjOJD*^>fVa_a>*wujoG=$&E@;vtTgSw4#1Lanu$#zM;v;E^ZOoNkEYZ|At5%wXzj zRzEYkmpkuYzZ>0M&888>3~ZHT#hk+?=w|_BGh!MpaNxNzyN-Vy%|i2yHr0p%yhWGi zm>7#f!LEROlGsc*rGRNsVRUr%B)Pt3S(k=4xM(use&ZtW46OK?#ek9vdIGwKCyN20 zlR9wLnc0!?SOQE4Ur_)Lci5Q?a+7b^BrL<>=7M8mBz}S&d0`8}h%YZ#SLk5(j=R#UxZ^;!2~u-r4qF9GmdjXG3rvUQS@?Q&FfJ=4+Zlh7V5 zdnVh{hg=7KX4CEqz|f^`g~>L~Q)JHc&@PESJGgzuH{kPaf`~;-63vVpyLaj0-R>VqW0UEIhamvn<_N*TTPRPZ$1#|Q^8*YKFa%HO#} z7=>MH@P|Fpt2$ao{^zQC>6w%{Fj8mx2fvW? zXpg2!?Z!t+dJ$?AB7x0ThvC880Y}Tz-`D!tPrrncgKTFvw7`*B16O>cBipmsGvbtzj_1mJgs>e`$L+B{Sh*Cmx?U#!Z?F#MjN=;DWU*Z@t{+n4V9`ky`B*K z@@TuLKn{j`X~*}Wd{?0b{1@;*`#!h2JjxB0RL!1e=!d&11Af-jYZWi)@Q$&ARoQ}S zD5op1Q_m&)k6@ZJONs4$Iv~R*{_!^FRYP7`d4<7vNOmIpiM^tEYf#^thPO4MdSCmL z1u;BBf$)Gy_J;MSeo3QwKR9Uh58@HCWnjshQ@ymKV)dOIap3_qBDppH9q>lXSGmv# zFN?V^LfAiz5A#Cm!&>3E0_`)CpLJVb#B4i$aUFD-&TL9Q!RAcEBFg^A$^nd}Vt4t= zv=*(4bWTAuS`*k=H;9tr&xMtS!f1+VH?O$_zse}9MZP#D1zM%$!pk3Nb$-mhura|i5nUdqU;lL8TyEyHn z;xlOp`|IQUuRPHA8r2VjyytJe3mUb5hdfE?W*u)lD`$wzUN1-H6tRB^pHx&DkO&i$ z*v|4OD9ZZr(l<-3RA^ol1b>--ZE3ph;aU8$h2ljrhS{BM-{?BUQo0c%Z_LBqrLC+T zUIBnde1I3{#~94BQv*pNCpBKZEOV#+(e;p7a>j~y{ zyr`O+!GK3gQ-Bwa#ShQudzdQ?ZYO0~C2(_}zXMwst?l0+lM}hqpcvvXo|by_Tk|UW z*>a~n<}W0$B)dxP!x^+@F)tGm-G+%2`q?~RK+ zQ>z=SW7=6faMroINan!@L&X_j656_qVo;^KZw7tjxn(Czpuswt52K%IW?MW+8 z3G4A|occ_I5Tx?1peIQ)>y@$vuR{w?M`~aY++MUQF)z#X=hsUy6orE~c$S~?J>y9| zee?DE$CF2{wz)IOZi$sIW?e;$b{xMma)MLE5N|#>>s^EhU8`lw8;Flfh8lDF6r4Rk zDA1vr-v*qQE!7rrTYqbamfc3&Tb>Km!?!^+ znoS;7a7*x)vYmy6MI=QK5y7fXh{NVA<5B-ZDp$^1!e1^D_OJGV1V2HaaSZxB=R^qd zZEtldXN@?5AJcQduB?)pmizrDaWqhlAkhCabPAX);5Oy4Rh1Nb*D`gOrnHJ;>;D0i z=Hr0>-_nGO%McK7mk>!c=#l9LYfd<_{QHQYk2vK2T}pvsWSHK8idN>$aYbg2BD*S0 zW_D7ALUpV&w6qJ4M-%FfEVVvX!TvyB?LoRtIqo=CW+`Vd~aDc8Q>$L=D*4^dlL1 zPPg1zuV`OwO|PLdw`lG@%|n@jhkH4U9V3%cTmQ*G8Vgnc;x3hWBJBMYBUOmDuKnj- z$BIR|xV)zu4l%+?^}~-l;h8imE%?BzCU<{Wv7ze2!muQH#}!h8 zWA`!TlTRL0R5tNxED2-O^(`$fp*2DOwaiKp>(9HzgehXrz#tv3lZ3GCDA^YnBlcUZ zrIBo5g}MbzPmuNoWRc5m7#1^&Mv!8v!(8T7&u9hre^n4jkwyt*a>L2Xr4Y+d0m?UZOTLZAX$J7GV0ANT%+aqxsTQJ37;$m)0h z*O4c$qGjg~8ozgxn?idWxxj=j$o0y0F_$Ib)U9JS);~Iu_SZw7nOQ&!D#be33Ynfu zRbNfwIiz*9rO%L>wr+3m+Mx6!x~$8WwIVt;7B1$hu2CQPijuw7r8<7}CfdW>TZ|w= z72@XJgz6A!Of$&)oC%?ptzjZg_ZE&hUNNJ3z<; zg3Uw^T@3^+_lFT&-n9Ku2Apx=AE=qvAb@uUwJbSwE;+0fmNu<#{1XfH@qQ&DjU7gO zxsWTVt=#%6mbL9qLOt36x}>*~xd0yh6!z;x@dr5yMN7~xks$R?*5sk#I z8lRV!_FnNnKk|+SChuYQ^Rmrw{HMz*K7f6^z(Bz#u#*Le%Q?c=QPs!O2l(ipY5(tK zP5*Txrref76Av176Wxw~H*Gz+yk6rs zpoK~vcG$0MMQm2sBe`DswXEfE&39V)gb&GA*Va_AlG~RhR}C+WDa>1gyhAlh2$UY~ z+2Zxgkh}bHp93%$_tLK^()9z0M!KEzQv8}Ts22AtKN&Z>?39z2WQ$yXuc?QD_SVO- zLU+0?!>nu@8-xszqx*Jw7gg+QuLZ)9Y|!&xikacY*NQOmwEY}zZ}!3mu4Om~R0SHDip@T{{CEv&gW zZ6{r&2-N;+CSPO9=j<()_j+XaQd4mQAWa+D24?Xy#!L)dY_t&Z9NW_kx1I%?Nv=H9Wqxb ztSaW8H>qEaU*AkEC0!riXZCQ%R>&4?Eq~4JfHK!Ax_I7x2V#b`<3ST=irQ!42kbt@ z?%Hd?;L+}+vvA0CBU8Bp7`xNtfcAAH1PK^`FK(nK-?E%fq~d#7TzX!{pv4((Ti5#o zW7d-|p}XxW;r^+d^E={?C%!IuWk2hd#2|~$x%9Z-xCnIF>5oZPhC6o8goRSrBT(R<#snaVTantN!Ep-ke{s(7PF{9@-{9S#fW~@)`2?`!NlpPQ*OeNiT#=p=HJ~l;DO(Yjb+H1>Lye+k zluN}l8dtr{xqrZ7d@_|-4+VEP9@gRNEaBS;OiBoS$1U7`>~luq2~;2jEg9usI>|<8M3E^2A%)F z?MR^q%U`{V6*V-$YdY%r?!f@daMY#2iPv4r8sFak$9}*)cNU_$l+31dWUT5L7~w|?pg!~(ZH#E%10l`n%vTz znU~w~*%6ZAl)@(-j>I1BJH>h?SdhaR?5#Pkf+zTA-UcC_4iX|ol}0iDQdI)M%l|$i zID*Oqs_)#v>?bseCW!33!%?%JrJ_85=?>Lx`f$kOehPj!9!j*1&3L*R{Y_@kd34y?K)p@XS-q`)H)SvJ6uS*)m?JEdd@70S|p7!bLVQ2E9fAE7h1g(Z_HwnA8 zL!+(-xB>!+L|5~mq1s7Z21%}^qf`kiIARnkH8wv1Gl=3b ztxC(|%>T$tI+5j{+uZRmCV7!=ocz-D%kszU9eRLkhz^YdGv9ZzH|H`QL& z^tO@DKm~)*gni?VQ`4@G;5)1h$3VMJLPk=P=xZP_h@|Oo{9Ku;H({VtkXlKB7XlCQ&CL^pkP$4jkc8*#0eLo67*~sU9Pc z__}^E+X_*NrJ39&>4UkLbqe-zsA;sDL$<;~cj=}o73WJ^lXsVC$&BqRRc1ZkbPC_vdsy;dDH>6RI4X= z0N6=LXT+j!>GAgMO6~C_y|vV1n_-HxIT2*_9NRGtN#Tc*xe!~#t*BU9J|fn~>y?7= zO`6*(WBGCziekyn6EpZa@4o>X2T6pFhOU;){*y+mxrn9)DW$07C9C8Cv?HI@yOs5u z<~C^sDEz)hho}PlxLy!~YA`fhvn1V%={|W3tjVv~Hp9&oD)=r( z>Kdp1!A$iB?S#q&VP>vrOv-lOPP>@l0o+{7pt{&if?b=$Qwzf9+*0!eM{}7`_7ujpQ#GPE8b%yB#3Dm|{ zm|&&(1f9jXqsOOxQIGk7P}p1lSn-`&GcVU4*}NWD^9oIneE_Dh+OPp-QRSz-WXmlP z$)LaHVJh>tDgU@?sY_f$&ZR{1^z{vkFBKjYp~4jmVj2-%;XZrJsCc$^Gf#Ea;i>AQ``J4rAJ zU9Qe|euwSsw!=l+z3W*I(C^Ijwp^yQwI0r1getEP_jB%*8Xa~dI#1cUep(BP+edOu zvQ2!^BvJn6bztd6>5qUE1$VtKhbNRmO+KfFz=3dl#j&@oMz(G5Y4%=qcJ^sQT$~-#yHvao4R$0qvLwN@8X7I3T- zuZI4{ZPa^Mbl;r9g=0IbJK1m#lDfqAtWFiSZR%8yO?52J5Fa7?f|)Mbr2r;tWJJSQ z&`@G6p=qt-Ca+$5WE=}KE4v_=P)qVb1=^BKsp|OzH717*XJ2p%HTh<+esze(vtX?Y z#X#%oM)wk$l4!X}{;Q5X%zJq%HZk$ZWjhF-yahm?yrp;!Z&1L&uLxea0Ka0ja-?;T zvR+IMJk5GI^#tiOBEhMnKziLR(!w|x{Zw}^I2xln+ycN-wzqy&&3NAe#$lSDn=*Um z0ohQ(u4?ot){sw5{mbH|po-1QJVrV40{vhwcEyi8LD|5MF9OT&3+*wBN?Cp@<4rxEtN1DSJ+G1CS9 zLw!&4=N}kANSN>$&EGUts#?pqcO}97G5p({j(qU)k?c-_a95?+O6~I4mL69pYZY{$ z2E?tnv8B7)wOx_TK}N36xqQE`u)nT|OM78d>Np?>=84ub8A`HjmV@!eAs zl$)p3?nGOf+LS{YyDGhOgW9c=a&jPYkkRJ*RNS@NGT}??c$GD{oNEDj`&?ZPTj>+< z=;;!b8r(=1LhLk|$gyG41ZrR|{oE0QzC`QTvOD7nD0X&!eF0OPf;IUP`%H!6{7qUO z+Nd2s@unJ+{q5z7O8?DqrJVX>wx7JW|09I9bQKg84O2x63M9MUv;tbBDs;RLrhyms(S&7 z;rV$$Bf=8g_B6O{Fb`^JZ5_k(f2a%85+0VmIv%}hp?NX03SFV|O*i1w=@7k`i2#ZT zN;`UxZR77&&{Z)JLmpE?uuA&kaWFstVDX%BigyE~9$cvX2?)|x;;)Gzaf8hrNYerR zl*a^O!?&|)5%2MtxYiWQ;* zEcy4Tr9_>rR%nJR))e<0dV$WSmhA5X{Dwr~*UuBQvXq$O!kO4=E=>;)cxv&^3}#|x zNW~+5S9{2wA9->}>XJNj_>#GnA9*9WRF{iOW&7{g@|2<%?yb=U$?)nQ1;SZ6B!x&U z?rsPN=gApzf=+4}!qD7OkAvHwp0Bs})opRq7ZzLS4WGGFKlPz()tuKm_jqm3`J~4J zc>BAomldj^m|s6fYh(mg;;qGA%=O9m$4kiRyk#SN-NOQK*E%{I=ao;CM>eCp)r!~G zEwyxPM+|UOXXUwHhw`Sjr)QucC8#bkO!-)%d5m{>YaUx*Cy%ddCATe^!V$W7(_?gf*q6YTRup);{1IGy+_#>0qHg zeE-M*{}Mi1-opc%i3Y{go`ZO^< zUGg^YVk6$5&+%m78~s|8giq#Xi&cuaqsU^}fbs3#=ycJ?eKF#&V7JdVB`mN>EsZ;g zBC0SP({Ait8>4)G< zE1S}x%Wv(cwXG8|2{K4GjO{kGPy=~3yWAH(TZm4`!P<&vM?qB97Zau6T!VF2@U?1E zu5U~sDpVbu)0rRTW#e69T*9%H?&_wPJPbgEl!yo!226(2!;hh+?k&~Lhi1zCnY5{Y zOQA_ve$GKXTl1?m^nnk&t)mVm}S&z_e zr>X^~Y~J-D3-*$l74scBt93*blK(9R6L%D8KU`zSo2OhwlrS&vxSU zvN=4~pMgam+9noA3s+uZa{-N1jv&FQJhCdB7IVS+*Q&0j{2G`oU3ogP+fo z-TfVo;~yG-V$GMIA+J|&l5cSx5C}mOqogdO4~LC%GOiFamww_2o8o<;tLnF|@*l3> zx7BT}{*&>MpHJaoyNvy@G0^$+j=Gfw$M7y()o9mrLL~Zv5K81g-mX?{7#g_`T@jSM zU@rxY+_PrR4sfFzI@@@K3-%|<2UIYThA@;%43~DYvJ%b}!5vWXwm9O`fsKS8Y^SF- zT8Flu&U=TFj`4VR{cnuDby!qy*EURuNQfdL4T4hA-5`P>AtBP;(%mH>AYD>YDka^W z(v5Ts49(C33^2eD?R%|Lgn3M48lRq1Elf4S6-TR6tq~;Rvwy5wZ+8EjXiHx-}_E{*aX?q z@98D4>d?&IYGg{w6(_Q4hVDTX#a^sd0PW^Q5BpyDBtfP~zH6PndEBh+zzoO^x2r4gqZv9UT3G;v#*D|n%}C%t84wyq?<}MSy4>$RhXiy zwh=uOlat$SW_Gso&tM=~2vdG8)vM|&q&@BpH#N8I$bWS@z#NyJROt79ni#i;56Nrk zU)Y@)9wG*ajDa5}CMIHT#&@ZP5AFhnRDKA+c^n=d<_LhsVG^)i>blBHYh@N3(jfwm zJZBu`c%Hu+Kg+n9+;;mxWj4&ChyLp3iEHF!wD33hU^J?-O5=TC=xK-;z$T}?CQ5yd z2Svf6gOKKdW+Ak1@U!aLJFFkXpA#1CC5qs;4DIcNs;De`fgP@sgzI(L*)$zpT@1|3 za&~rhyGXx(aim|nKw8FP0&Zf~U(&^(nWq3BzP%eV}ijsV)Jyj18;8EB_0VaAbeo@~O+lHSEex41w& zw@Ug|Nj;pUTeZW`V}+n6>A2a{yy?{|FjqieWga+&611bO&U!1VMq)kG0CpdZHDzp$ zE`Liq2m}kwSePEi>gs)Qh{V4{-OR}EqDI<1&|p_xHIMP zr+c=$ytld9y19tHRUpR}GrI9@bmOCpOel~*eHK7|ll}Z#`af1`nHnST<292rF`**$ z;r;vfIg#&WWMZFIM!W9iDl2;X9$;=F*x zf8#>v0fd;)w|dbGd~Mrelz7w)G+XCeLmGlLaqjIq5K-zp&0;R;Yx+^_fqWt@nJPQ8wi_juAAd29y^tm z9Nf&Ah4YDdaPkwtrSik>{kpm15N*gW^a2fl55Eu2QKjx)g<%b;xcQ#j|9H&p6aVKa z7oV@v8|x!O&YED&SERBeAnO@p48m}Xm~8j&XfJn4!VSm15DJPov~b2aD`uKg@#Sa^ z6Be(nJoth{E?>-`;oo>%@%T?)9_NL=H>T-M^z(h1h$>k;v53}Tz4=n>6~+4Tvd;#i@`l(=xvN2E@@@b5_k}9(=fhQS# z)KDr9?CtEehRD05tT}d>y&_>yk8cQjzmY7V=X_g4g^DMkYBZ$#cWkLpMi&x`nz11@ z5s0Ie+gd3%Ntui6=bYty-z(Uw;~8|fIeE!}SN&PcL$HjoMn|8*brj*X$9w)_iAR3g`Z}zwt0CD6$A*vnn9mPhSkG`ZXWUb>_^_b2bClAq0$6p6AqJdqH;Hm_kSjLikR|XArY;|tBC_9-02S*cI)Ry<#jbR zE@o1vw(Fa7oRKFHAV1I_kE5uAcTW`~Gg%!xQ0EK;uP*K3BV$%aS_>Q}HbTb*6&A06 zPzM6Nt)0^u;$gzHlH@lz?F4r6JngmyA7dR=jB^VDQ>FX2-Ae2WFCCsF*>lgup;O;e zbgheXK-W?fH0x{|@j(k2jhloU|J$xbg1|C)g3PG>Ys^U8QwgcrPB?93q(sHAt?Sp4%#enCrSR9GIt4d+kZ~urqtOiX)Hl0V)l*mJOp!-CQTWNAoJ{3xyCYbBW7We)&40t_o-q#j zjavCLU`AKWurx@&q$ZgWe%P3kJ+fMX|I~FpZqm^eodYXAYJJBCDgB7j_ zEf?f>p%K7A6f$7%vX~&Fp>cSTrF_y0qE4sw9xBO1B91@^i8%*AiDKiUZ1|)>9Z?je zrnKDXg`cr~Grm`%XDg}BN}1ZxrY4n(S$@i?b0p>pE-Z5HNF8%)ic%s8E@+)JwdO1R z%+MkeAPYZT;?Jf~+rk0)AuO^QgvLoOryrSc6w;@v$fr9DmHq0l;s0Z3B4_$Gj`riW z@MPQ$107K}{HD_K6Xvc-Lk-lcV%pyxWt5*f<`5ONsvG;=*icL%qC^1+cN8kB#$2DD zX%Cd{Ib1s6unc-fcg$k4l!x8XH1PS9;yCVV~fmby@ZE(`7e4Wr?{T;pp zWh_XI)g*khd|RJaJ}vw-iV-uj-%Kd@kuuTcsjGKjNc1^%^X$n1yMWh)xM>vb!xVm5 zDM!A-M{b%WD;R2sd1v;^BUY{mK^1pID5aq_dGtVd!=VCWP_lVXa{U~9^60P3SVuxh zhu74U)|(l;!X`EfjW=!=8aM*%-Op=m-d%c=xiM+pltHeoWiGc+BB!>%-rY}eHzJ#$ z!h6^?$+jH*c3T)73(8SSNXKVVvKx(?vdbh(nf5h|Scxjfwr;rsUbEzae}1x0VW@4k zS|k8n>YXp%8=J_f*@IvSRgpDnA?twbNvb|fCS`x%&=fN>pO;ZoB*m{1Z;n-L7kZ%H zCpP(j;@|;TXt0L^*PmharENxML5dmf(d;&X#Em&=lBurYGx)l#O|g*1p^UE2aiir? zy5R>*bx^`Q|6BTB98p0RYeGR5g|gr;e*K5HCt>dh|R z74uAc7sR|Z7m_S08|hW&C*U&FE@z7t^~bCE@NrQSnJMc0PY7>ck3uuWjg>E{4f+NZ z76WH%YaOTXH<8PTV$es{cF%So?DS9vpiQq%MXadR)#1iK&SaQgOP9*pgi1IkQ$8 zA3Sg{GE8IT^n8SiqKY!X&9Wc)M)U+#T5k!Bhx74dnhAQ>ZDuw25j_YIZ-|d+l z$b#;g{K`Su34>3&S*LEzxx_BJ`UK{%?}$75z++SvAI6vsr3nQ>o(l_me;&}BGU@qg z`L_+CV4~goS`t5cuipLWl~RrznY~CL;%zoijWcJor_y5bYs9Y8kRFeP`Gmr>8s87L z1ZoyTrL$~bIpwqA>&gA?q9IzCc;0OiU6N}$tLZhvPOwUq2bj#o{6)0#?oQ$G>KOGz z)J)Szr9IBx)4VlK3 z$#N}|7Lsii5{vk%*Gy`v&+i|nCa9w;Ykob7xG9)t?_tkN8b%=k)FpiY1P-&vzs$rT zju&T6NOCEJCwYOHFDE^|wLV^&W_|SPD~YrwE=Kh*5L+5q4lT4uqMtS6x-OB(E2L@* zCFV-&%2{@vdypT+Le|OI=^evC1qw^p_0!IAn(;XB@9Le0QRx@RZDBwyUkl0< zs>C0=`Cy?k@lM5_7^@WYA@Tq2lUZJB)>O~S@}jD407AEJPu|$PM|r#lJ-CC8X~i)BrSeOsRU!}Xs-R~Q=wt8qc9(ub=1cVOR80f>&{Cnsdg_+> z@n5eK;A&M#ov1t*G_N$MWTqBgn7TS27~dacP-A=sHPw`{nXDQfQ9@?|)m3h7)O8sA ziBXm86DZcpJ)E6w#J)zAevdDE{`h!MV}xp&@I8iSh&jivt+3EijRbe%(t#MU zEsILEbVp^6ZC42X$ie1sCMoKQv&bMiPj_PDw4GkyVS1b?!OwKaliM-I zjn-67eAA#}FRCtKqILCJro_C;r~d6l zX|_)(_#fTZTJdDa@UWme)ZLzqFP@ZfSI=rNgmlf7xl{Jnkr~!A_+rYW`Sjxk4JMkn zhsFe@D{6F_ih)k*3lA0Lt$%Dcbf}KK$ciePT)WqZ$D#(TMPtkIOnoGHPa2)cSQn~Ed2mmCQE}y6Z>yd#>=))B_$>GdP;R^u2Z8bT1gm~VQqk6nVrFI zTfe%ihZ;>uxKU!wOW#gXU>#=zQTUB-Pn9T3gWa}wX-0V8xt>fR>aI{`TbD=+>|BS~ z^HL@Iu}#TR0$>pur~S*u>K17t>Dg^*Vll4KygJD27WS=}*zuBnX6O$6`oQ7+Brd0O znz*>c!y!z;+esH4%|7AHqYP9_yt~+Y>D%$5OGqBZ`P@#Km1FL^JM@9@uO z{tJG)gdN@!7k3|ZEsFjR3#%u+^3>#CCf3b}mhQGW_OaKmsA%?nfEWPQ^{FCrcHc+I za&j#TjMNXz&n_0S>6nkn21SBS*c#r+}+@fH=8^(I(CEX0Z^=?mjnpu^}NPm1aI;}JDe}~l=qwDW2xs%o90FXC;$o=7)eMu7e zq3x+)1Q&q5U_2wd-D}sr(@R0O?7Dkq2O~Em&9ZP-#$chKOXhfiN+J?az zj&JL$>BIxCX&rKkglb3*d^o(Eg580gTG@b%zI|Qo-~_&L|QLZPG<4{gPyB& z2|&E&!OLK88$oG1w5L-*VQ@rG^|oFut++rb5e%lVI30p8A?=`Ua+%|byKg-{r~7!a z5DrB8ee#g<`8AD;NyYLIx3_jp!dCe0_yZ0Bju*k|EhJT#Wrj+PcogD{=TveI+hy_cD}UoM;sm*=G2Y32p<&w7*9mLKns5hfaI<- z=mPpiy$#}z<$UFc`5?|x{*7g?jjQpi39cw)V-0iae^9x2s(s$|%SNB;+Mw{pv!{%b zj^4IA8z$RgXKBQ!OLnCU-H*?y-rGJjJw239k5NhL93Lt^o^d|ue<@;vTy*5F$f%Zv zmIGQx`i=wDGx_smegc$9y)xS3;S7vHA*lTK9w?6_uIag6@@~L)p^Sr zcv!##DgqC+bkjG|N~LoYW2ZKS=cU~|@>ou=c3B+w8S?V%I()({`{mJ~f||ir8lr_) z4u`|l7kb>I-$%@j4u#;13>x?MxNg?ktn?t%;Ac;J`=|xmnVQvPHQY=9dbuA>^b`H_ zlh@Z^PUDDW4E86Kg7wrQb~>@@zd$cJ_zz77+vrSZfT+t~QIHw02Ir8?)|OyMp`=;; zyDNr^f(}NOkc?K61!S!s1N^ZyQohv^a}onOowJ+q(AuxZ^gcg{EG??ApG2c`}vR@Mn@lSKrB~4!)C@xCXNe#Zp2hwT9ycc_7AZn&>iOE~3=YJBM&TsNez#ThU} z&qbAAd5TjeE(w_@cyQV|G41jB-sj~Tu&VpSRTu!Pr72cHGtc0H=PP_I)*={qCN2nR zv8`mCHK5P{6%~7Y?YtXACl1a{t%hEf<$OTpOcJ{Hu|(U)vV`Hx+C~E?_?*#MfNp|D zYV&ETrC9#*d;M-h=-?2)8_+z@*?qfrR_KG3T+Usvx#}qHxMQu)RBAVXb-u3=ptzQ< zE(L#NnAo&5!n2$IT>5dxdxUC;@2}4$iF$FDo}Q8!4LEmrD#E+|9N%xIB7FN)Q!H`2 zB$%?T@u)IlY!{llrFe^6@1;jlI{RJq3X2SvX1+~8R8_cFFPc1FwoXVOaxAQgO(6G6 zOx*bE9sgN}%+w2HhS;vpsjX|3xOPj?Y&O^Jy5CvLtMll$94Kgc>q2F|0~fx%_ui%e zOYG}pD|aYbD7-v8K58iV>xq$Y%Jk0cqxnn9E${M(iV#j=M^D}#RjBb5Gn%}u&BWUi z^fD-5?MYP+)dvt&U+zhzDXI{(EJTk;k{sZr1N9IQt5ZEPn_R9-bXS+n)a z$!27lzW`4}nCHoh+P@*MM4vdr&-#>k_Jiz~Y3v~81o<}QLfbg=4-p@rSNK%+WQGv1 zS&*C8Bw`bU|2Te374fD;soCglHPVM`Ph*6g49sfeaWh06PXyf5_0_1H5!{8v3?KYF z>3DnE&=qHC86EZ^{aKZ|Jspf32*bDx%cod16Q0Opff%{_RXD1w;Y@Ffai0*873nng zj^!!=GLOX~-W5lFJN{Iydgt)<^}lfPqFi+`W5dY<(0R8mLhKEIZ>e!qxg!qb?(R4Yz)yosh(Xn1HB?;Qh=krM<_%|{<`xR8^_b}#}$b$ZPWg}@#%5@q`X^y7$$1S)lSmsvJ@9> zSgMEdU^h@wChLk@8%|ryT)^T91t1Y)+zb+EytOvxiW z(WkaF$`l{332K0bMXkyEJLs@FIpJM1g<-NbHDV? zit0N=@v{&3dcm_XKo&zq;VxcmwYAP^{3xk!Lg|zcX!XVW?R%dTzE$q#S2e!)_PTCe z)r%A5+EvS`s-Bwmh*@EfN9A06Z%dO9MC+omWZ(ePiOH$q3G1V)OFstqF*g)v^MKLP zV!!zk)5&>0(X5!i*Hl$KOhO$8V4z?t%o$kf2D;n?i1I}fqQd}??}+puLr!^^(C8EFtz5i~3QQ%`$g zkb`gR4IK}qI-2)yt7&PPIBWE0xrVu%4Smp^*Pg@yPd|W`e6E%~K?v(6zNbI|ShUA5 zD{^^XzT&J}h9imn9XFtI3CUL};~fhJzukjJ z&&6CXqxyf^M(R2(op53*^_I9L%(}IzJ{Q(e{%0^&s<;`U?aAL_dR}Tw-Jj)Si|Y?= zW0QWcO<-nByhgarJB|6!I8z-H6{=oJ_;oXvt6i3gcMxU0W(-r82fgxpcjh;-q6PX+ zAYkLJD&Z7Pi|=H&znq)tqf?YUGBz$>%wlW!92s5XsXwNm4#%ML;Q#j`j@BpIP2&GdOIR* zW#m+>WvK}=HUxW=!l2Nu)b<>Ju@fH!pUBA5v?vO&;xk@3_b`X!JMNp<6Jxpw{b23fdb(6?%uN&5!O%OER2{2wwUdX6 z-`jvb(C7po*U(*j;6WzPCzhy`J_OZ>gMbdU&X`fje(g1D_|4Q;KdiQdd4PjurHN)o z|0zrohHq#>4gRS*TGFs7Fi2l+@bKN>l6qZElxkX)-hNuL*kanlOn1L({7A7}G#P)y zrbVUYI-6IhX>Mhh)w5IPys`owFaffTd8?-F!O_F`V zpR+YtjB2~o9*kW5URoNZ^RINna91N)bwRb?vy6{@-1fZ?g&Iiw_sUt6{}ssJ2W+u@ zuT8Yo4}i+L*HFxSSXf6T#FivW7`S*b%8I@1JlRKszj8Yw-M0I{#*^lR`{~VbW&(v@ zkrqL6SVcaJ^>uaYo105#M_bq6^ycCTZ(Cd#6o4Ad*4TxS@K}HR;<`8`Cm@jzq=?@g z6tvtVP=Ty9z2T0F(tqP{jQU}P)7uoLxV6pQ9Z#GuSsvd)SzIEFG`~>8001XqFbs)A zVIJH9N~6pZbXP;_?*B)S4!FR7uK&)FKMOU^ggmFpXc^B}m2}6vZ4=c9R$=?yi(e<) zcL_HzzJ5K--q(8ZAKt3vTQ`0GzueV9x17T5m#okz0^C8y$oKDDAGuYW1$^q3IdcT$ zl%~~s%2tdmrROG&B)!3Ww&v>DTIFbPcYuh{;@|H71ml02}6Xh?bs%K3RTr&yksUNT@)p^NWOQQQH+0wJwwV%N}uHT(YkO#r82?{gfYFdEJKP53EHF5yZDAhc%rN#A9 zB07q&$+8Of)vpnr_|hTEDEusYkfnSpm6y2|!9BRMazTVO?L@vn{_J9grwDS!@vVd# zmc|;+^5a@65Z&nzPFdK3r82E1wOp&ol)@`LJL^gJiui-=_{UA0R(m{DmY0QV;lQz* z@7WT)STyBLqsJu`VZRT@8Ncq6Qpd!+AJYGIAw*oDE(l37>_&%a%gG>mwT6ouPHMTER`RUDnmy^{v^5=u3VT#@cB)+DqW!4W zs>W5dY5JPmaNG5U2jC^Mi9Esw?-ba11v-!`ZlJ9w$qwsPjq6x0|E7-cK%{de5A-d* zpXZ+Bg=4ndsR^nq1a>zw(>&IH)Big86QWa$nA`B4PbYG~csivLJEa?&TofIC8ZBNY zGL5cnX0fc9-g1ByHmMi%kRGChsdFO604Qpf5(OB>cv%j@g#OFo-Zs@ zWbEz>`lX9gllWF11yjov?BMdtmn_~h-W9b5KueF$CX^96At6h@AArk18FbIS)wQ(> z(h*Pi;TN^o{&*`%JTJYvf>(G$i_G@+CSHP&iWCYkH$w!ptsMG-(X{kuIL)63c{zW8 zT;^?~mnThplgmeVZsE~N9euI-b76dw_&>KWGW33B7944ezH3#Nq57n{ zk!GEUZNciIpq;X=Pju@W+OE*iHT6|^H?~zdS?2$Xa==>&^2DW?p+Kg;Qc)4GZTA^Z zw^_7bKP9V34a@*R^qDa&6P$3@Szd;yw>V6j#3y9yA>hce<{wBo3azw|1W8oz9IU47 zwL4y|rP`%#om4z55J)s-#<5J_nJ?pcZ<(emJDXhPTl_l|;MZ)b^oyqYVn)y|BJQ>L zQ`$_B#mpR+*IXJHyz{2}_RKkNO9sfAzr1B)J}r!~sEhIyMxI{&ilykYtu)J{w%K)t z`e3ySR>d@&w{d!l5Pg?<=kaTNa$Zb^u2{EEU-CXtMB6vCm1)v<4BPGtNz zO3U4bSuXvA>}zYd)3e<&kEllpXI&ic7mFy0?F?K{kla|FX@HJe^a?$lU_;FaQntTb zBKHh5edD8!gVYuBUhTV!eUF-CBsD_>Pn7C6zeOKw0Q;x=2f&lmu)mRVpn&ISe_p%A zj84EkrR?(V2o;@ZqltK*cd4mr)NT#d*BrnZ1S^l|na@w(L|O&Wgw&w_TpY!DcMzGZ zg-llNWs2fgrZuHo_qhh0(!vc2QbfciYKq3Y@g?W11cB++6hAO_aHgoeH=tMsSSUAGDu{maue$GdLrp5?Skmgn>UGQ!7V*yO$!LF{>Zs{M#x? z!bpK_O;A$TtB!B*gA7LHsjm>8c0{V$U{%}U7lj1EYaLs6qOCUp7SzJ9P#?Qby4tXV zM#pFGiG(*4-!!r@R{O!Uiu zlS4c4FpdC=Pq;)c02ZI&c{}KDi7)*XdjRzP6?tm9(*YphIH_4))&b!t17uKyux>k8 z63F$c?EvO2(es!V*|DVhP>6iMsqj^3oe1-fodXC@Ec?1k3w7Dq0Av3U0V?2hggv0& zl1K}EA|o6p6W?d`P5+VAQcSmC*v&gNQNiDaHWFI_qK6?CQ`olXm#~`@Eh2Rt@UMb1 z4Zc}hHTt{W;CHkO2wxg*k!JrSG=z2+7=FJ9;NLJ#`!jy8DNZ)*cud!M(a%gU5GGpWGOSIUR+yJ& zfG+_>PP1Ux;b>>V;`j0t+S>m(82(~c{S!$9ANYRjnVevonI7*3WK@ibfePjSgO5^< zGH8M}+QT-LW;IQae|^nJbW3v?ycV2UNaauK{_V7H#w=Nzy~NVI7pWUf=Gv=t(#m1d zwvAbKZu9kqNnZ+CJ5}!F;$T@Ia}F*5Uk4>?~;2DF)qAjc_>!u`UJ&G?SD#8q!GYe2^LO{EsG z@*al*y+U2ZuulK+sbGC)DsN~l*0+=>f~oZ8b+r*vhLbFx#W43~WtZV{DOy`upHjS$ z-$HwRpKGnnHuhDn7d?>}Sch}C7_(rj{L;0?eW>lpSoMZSy(jdqzkc1g)s zYsYj6m}=@WO)~e zy4YvJ;vYYHZs>6zU6}vxRd@^DysO{l_U0d1<=cR~^G7N1Qh<{HQ%j8<4V7T}1H9#3 zTQ7awW!bP%k3I31*IXE*432m78yBEI=>sXQB_UNrVTGz!Ag2w ze620%qnAQQw0wkZHVk_q?~MSUd;;dM)PdK`v%5rJb<;577JnfJtKT-^4jL49{MiG7y@l)E zlIP)d+GBZ{>CMErEa&qxX^o%-uPF6Ol!Gr=Y`w&bf@M%>Xv7<(B~HL=IpzEgJA@Ihvc$aA!u(U$4e%sycDZMOo+>TUbF%fm~{zwRe2=Z)nIq+*en zqqs`V3uJoFdXCG0}Q!26nRC-SJh%eIT4 zYjK;sX1_KTZgEK%@e^SOG@CjqYT@#HDHHkuA*>_2r_Er2^1b(6B7*(Ml9J)%vZ+FM z;ZdWu#Vc5NdQ?j&qUgk=8v6E$w_QwZ^ZIgKwG|QNpv3Kr5f|@FqzrQ1q0okC!AuF| zP)!p=RTJd%@}7k#{h5Hr5VUIjj<$=+7Y9PLoCe_q#G zSqyW(&YHLMBAtOyyGYqp_pFyds-m48vEgGpIC|Cl(E(eRR0OAuwT1O$M78Oweod=z zM&AP5gBM{lK3xJ%4C?&zu=u+Aq$~e8OTM+xzn8Y)@=YuLQS=k?My61&d`Q{U zu*Cw;1zNMq7PWU!+_^8-jyKQwrywYqcks|&?3nwY2N2mO^Li16IR0x67wWwWU=l97 z3?B?lHzd3d6iiF?6jf}Ouq}9o|iKhT^{idGNa<@B`(M(T>g=q zXlA#XPz^dGodb@UNn;wLwZsri=TBmgHNEU~SnRoMUMo3PpM~@WPEZ z8)?@LVioQuvZkj`w1qn0xw<`H{%3M^CvvPmhQjjYz8_!oROaFMqvyy2+SgX)$ce_9 zUHJrIhy`BLyTgmC_N()%RQaogmJLpTen~{a_K!te%Fb3_1+#ebF&0B$04r0QE26Jm zjBf}vx$HDqTh3!n-V60bce^-Hsk2(kK}yMF)Yn|!q3ws{48Z1gp3o^p(N?pz5oRk_ z-_Z=#fHEU9ht={v*;1n}sHd`du7wo|&y#7Bp$N;nImgAzdanyMxv^<~AQDc%`ZiHZ zH@gQZHh=D@*=1kUigy0gd+cx8%c(Cu%TnZ~7fn9PIWT|2hS+ZxDE6~I=NjPy0S=2~ z{ZPODdtImbY0l`69Uo@jo~uxpS9JP$ zWUv~{arg90^*%?c&g{T>xBzeZ0+@YkZ6@BGC04{U<;y*I&sh52t_1v50|rd}EaP6; zlPYZUWUJ5ZrY9JYuo_bo5sjW+1&~}~KgAl&LekP~dPARlC8oSJ?wyc?kDuTDi|LJA z8IXlx1+^j9_%(d}$_fSGA5Hz7@In@wrYe`++DiJI!dJ+yu;(Js|%3hp@6A z|NT-1T7Q2U7_JflGRYYqv&3k7hG8LFSslb1v0p{?G@`Uo^9CpGFi4#U6o+xNlcX4!-OgZcs>HHw~aw zDqT?o_4*l!No>CoTuse+!n;OKH2PD)tV0Oz`X=Ga#njRA!U=rv1?-E!>29CW>15X~ zd4%Z=Cv)?FtcR|EBY!a@yAo|m6X?Nwx0HaA?*7rmrT;28P2~kt>HX*bZbU>k-w*uy zF9FYga)Y&^$~pMBwM2ll<-?IEzN9c;YtkSGl5B8FE07|-PFD56sUx@V-Sv$1lj{ux zuL^InfyUJ^faG%kxISPj38RcoXZGRy7pwxe-x{4P0|=mu#sGG2*zhw!L0M@GK>6vD zROgO`O*e!z9$TwU%`TsMPr=K2EjzcbdamU>YqyOViS1LyQde_wOLQ0MbRTt(IF&G* zgv%z%&WW_~1c73&H8je=R+&XWhWe)I3iz$2R8C{LJXG;|zxaFL?9CP&7|FY7(>4>B z=W(n&3Bj9<8)eJ@winIC)^GKI+C!7Dm&l~!Mi84!yQl$@`H+{0h1aph*Dp^5`bYW` zlm!Rgge{421udm9=xsAMD|YixZK|Lch6M+dDBf+h=teg(>{`T@iGM?8nhEku(Y@@R zeF|`crm$ejL;X8-JCEAqWgki)r<^ZEy7ct6JL~=>4Qic70Q8jXxd>LRqc!c&Ay4cb z%jQE|&2`=7=0N;44i&=9e!$H#CEGXijH>x5-;b)FZr{djOiGte!K#0pbZaO6fVIkb zPAtxp*`6|DP!>2;!mKNg4&4km)=oP}jnVrqhTwml9l|~Oid>Sd@scm9phbE6R^XlA z>Z{e2lSiI_)M^c%EMTXPEqTCu(O6Gp?X$8kDuw2a(+vb+PY~VTBH!5fZqc`OwprHzmC)tYLrr%90X*=s*m4=r(7> zz7Go!fn1YG(aSGxI5$AtUzkk=>OUBHYFUe_%`*w;O1>tOjYGXW93aE2E+SPUbkO}Z zJZ=@*!pFE?)rfe#L!rKMgnreAI-jl3EKc+Bx@pl)D|rVgscX}D$HYOsu^?gVCO?-)bS z`pT#5T=k&YeHy!1Mnu+l1{(T7P zF5})yn}@TNl!`5CEb^4#dphUktFQ`{#||#Z@rQ0Dk{R?}W2&sdxuVz!S_5qYV1*@2 zM5S$Qam;b3Yyd=^<{U(m-bUVdnI0~SbGu8&#)nqQtFL?jguk$uYRXXhzA4J~hZlf( z`!H=zZqUV(?=gm3vx_s>A3{F=s$~4WUB|uL^W>AY;ioLRh+&1lqxE~>oPqLQXf)A` ziNL!XiHphw){%H3RU$0i!PV|Kl<{)H0NAcGc+LYEy_`JOC!fQAGr%z22UMU${Y3C~ z*8lIG8T!lG7e$F^4f>j&Eu3alCTl~jfJGxYAb^srxwQT~`f_6bD06v~yJS}{t(JH1 z%`w_L-4+sr-nb`6$Lon?U}hdo0jwyxlHZywi(Pz1h4wvnHT6lzl)w9TUp}+yHZiu> z>^+YH{9?);TLkl}zHc z@l)+a(&SPP-wJlKq;@+EGCTKX@43-F$>qCPvl$u1D=E282&K27ZYBrm{9SFsH1zYjF^RPjjo1X8KZVdi|tJ>JvWdZCJ20%kyS$^0!>4sAsxXH{AR_IoSr5 zdt~voG%QA5)Qkd-tuS_B7j>Zp)%=XwD$bGYfpPF_H`4#CioCTQ*cd~+GWAmk8B5xV zkx(I-klkMMrz3GR`g#>wrD{a^m_*lsdo`Bx4cSE=Bi*HLPXCj;`Q@IcBcJm^0jhK! z6-L8%iCR>H9a{a??X-iT#|XI>+;v^?H$E_x*zr9TF1 zNggZ_qWu|}3bKm4p&~Dj6xHGFCe1MT6Vr_x3X6qVe)AAIngB@;nV)CG9#b7ri{LX2 z$yd=f0SdXi{PCP!>VwCBRk!cKdz;c`#Ba1u!nH*0k7XI6I~o z>*ID4)u~nUO#pMXXS0n-a^pKBA`Lm83X09H{21+;EWfOQJO{Sx*c?=JKE4^q{|mpQ zk6ZrP&o9Xr5~HFNy;DSL!L8Kpu!0_75M0ZBOi3 zR$Km5-c-3F?Rp7E$8`kK)kV# zfYj=f$MxQvrleeRl8%Z17X^Xhxn(1*WWlO^0t__>r#)i(>GNIaSB(Y)bb#Jk>5K;0v-O|bpjGi_{nCRJEn4j+yvZ#Vt{`IY$L=uWkDZEt;z+6taFogt-<5N?Nc?5sP=wb5%5Pn^#B##* z-VbvY@5Kfe3!lBGDY{@@zBD^m$fo?~bL`m<&8XAtb|_|R_9R)cwdm7)N2fbPtk3;@ zW>3)NGWtBgu?MxURQ(n?YmPVYQ_{VJ$4vhP2#7`lF9E`Iuc+05Snl$qy7}+wHj18> z_&t|-{0$dql;poM)wMfcs!QI|QKtHOto}>a{`Cu00i_Pm&sPU=#UsYN$diE2{O2P2 z&T5%Mt!J$LrAPdWS<1Xq1|vusgp2g6}WQCY-Jfn%F-< z2VIf@H4N!tv^8?60E471g6du2zebQ9#Ku_Pl~%{cVjsntd;-3dItyc;KOdH^A{CI5Gq~~v#d)zDoYZDD*;==Hdd~>X zyND?fsZ(5jaY=?az#p%TTaiYy4H~g8I`TJ)NJ>gZ?uFg5C@ap3w!BEHQ3Py(Aw_`@ zsj$ByMIu^P7|;(5vFFF845x!w^ZKhpRi(vV>q0twSLliE&?pqaXi&5%+FfsVzaz3} zPR0>x$2wyc)K!qD7|Lt>?65d;s9ANsE+A{lKYywy1U>R*GI~4Zbow~##2jnDyiv#;j=auy*lYCd5sk)aRhQigpnb0ft)r$C?ib%FP2) zLRy3EdNtZOq+Y&pfN$+IFQ4NC>Bha!vD=_Y84*#C zV=-syHg{8ZVZRZ3c#;dw-6AVAyTPMzu9v{EfTOH6i`z?q!vT1-iL##|K&)$RdjUV1M%8Mb=b zuX(uFB>Q+6Fdspfk&58^`>{@7KSI{jQy7A5P?GG3cV>0I~uosfTdPhZ+j#4Ew=^dm)AfPCqRHfGdLg*pVI{{I8lTZT$luihtg#dx%e8Jx?_x$%h zd!M;8cjjg?V+>!u`j)kxwch7hgRQHo?w|7VTR+#>`)$pxo);Mq0$$G77`^Om+NU%h zQj_?;3IuP9ia(}Ty>`>j?dgXXhGw)qQeBFQibv)*t|0BIZ&gYDKU^#T8K%fNd%Vk2 zw?9E%(br!9iq5_t$$|=8;QUed4Np5*=4uUuUHx+pd(V{XM$poG-d1YR7f6@Q-_uk4 zwO7Z3VcKam?JPbOdF0Kn##5hJwqXZe^;!#6al_`{kn0x94F2O+i{DNZ z;_gi0WXO|m!T6!W2C@N07F2VMRUsB|&3fB$yQ?X$1*XoA{Ke(~`B;_N`-Alf|JF;* zjA~wM3MjS-)6mxf-!~5yA_XRzcMyI_>y$0a)tzsQwZsQcxF`YJt8zS@q+SZyKCiB% zu5G2~ayy-fI8+$w{ft9Go`tjaOl@r&Yeqyi_bDX>$37*!`^&b(q9&-o^mZ@w)ulRL zbjBKAX6AgWU&4BkZ`U!82WIG`m>VEB)jY*;?rsZO$1*jMi0*^7{aUNUx4#mEes8+a zvdq^O_eI%H^n64d)XSv@P@rfEnb%Zz+-JK;YA2?h3yG=tm4d$HYUg0#W!thT<-R5{ zm0wEQ`t{EKconJ<<|YSGoHD@HnPkv4yfs-A_u_lr@3zNXc$hN?sD_x-@$0qfU1idb z4Yo`8gC8b6r~xi^6kEW$LQ>H7F$RL`8*+XSlEo^flu=oet|B>jM_RpT7~-u|z; zoj1alCNp|*yX?@ft8`gy>YNb1@zbAL+Xb2>e zM#gQ7b-FRCg0idawLfPPjwbRaUpS!_HnxBLO&dR!Uu2Z|sS)0dkl#0yd&=NlrG>*! za_Yf@#6KA_#YW!C*TX`>+92~9R~GT-X5@}di^hy3=0*~wS|P>F!x?n`q_?26204}! z7*JR!bA;YmZRe@{@kQqRe6noLIzvvPW|m1TZJv+VizMqj+r)n) zXj`Sdf2ncgNVuoImjeCtu6zAdrqQqwO4Q$K_skg16L=3Xist84igm`@qHWWg*X-|z zgLKUDUrb-H-e3dkn3v?u-!ALkIFZAttM?we8K*Ov-J+`(3z?q(nqOP=oUgZ|!ZY=r z_U}vMTk6ydoG!EB+examUMQ9lXnPS*4)uo9Xz}Q``2NV;=HVOTaZ7YG1GP0ju=f@*wmrvk~eG5Ktnnue!IjquAJy+argUPQirN>b&8 z2|0P_eSd9SMorXN{c~S^v$~HX@v?S|LDr^kFYkKT$18SH5BMvF#qu-m>Om9p^hDw> zS4f_Z+8S)voLIh)Y-q<V8Cni7??+43|PEH@3$`c-+RQn^ptq1UbAP7 zRz{@MA#c!DB){G4Gptfi-V~* zEPbe?I}SXb@F|aKxtKG3)Ryr^IB%rU2}p~K+^%m_dK)-KkH&i1@<6_e(qLpawE?miWX685;Pw@h%J>d*GcUsFMM% zli8Pbp1N|!-EvFU71c@Lp|@yh*CxDUaL4fjqh2Bf44=-pS_P$yx5L@!FGP z-(P+tQ?}0pSsSN|o%{sXkRu73jduvHe)KZ?`RkL;>zF}QeomYvdWG&pOsoMYr@I90 zPQ(`Am$roa>>fJH%>`c`$WDdxEYen)IWB|il4JFaizlwO)Q6pQN57o6OVv;=u4LfZ zI9s!o7JM1hl1YE5m}|~K=aISf>*tL5Q5WAzWOMUrUX=P=^Q_-MYMtJ%@;27pvq#~A z9<6=##uv}*@TsTKTup@)Jh|SZ(bA^lm-SJ85Zb~X(hqTU20JC^NPaNF#L!I_ zyZWIwMmf*vfA|JJmHVh;J$N+6c|Tz;P>u2490c^)b2*t$Dk~fzrSSk5s)R}TOxn+ z0u+syP=1&c`aY`)Z8Xe|qO6rbCHG^C$xiO?ucAG{hB^VnL0_fXDe1j8;Zb|H6Hv;~ z8+}d*2j20LV%~xEUk?#Xf zH>K~f`IMl`nt9ddJX0TSp&IsSTtj3}=G&XLKAnqAeZRzcC({akdYuxUjx9*OU|DI2 z)rOTZzXp#>RM~&bO!ZW1d!W&@$l6~rs||aa+V>Lj49W{!wv!H220x+K4fYWvq4`F$ zvz)3XR-J55KEhZ~6Ckq`G9b?G?H}~wv4k>&J%(*lc)!h5#$$*308PN=q19;;2w#(R zt(MlWc2xa_Z}OSs4HYIks{QnE2cGd{9C!%%rQ6Ns>8y+WF&dlf#JTZH8cX^-i^bYO zrW%q76_4XKdLE4KDd~v~faA|H)6uZs z6%1W?NZV%&X()K`-gA>NLcg3Y3b~!`jB05#JD}Af^W-(ub(|bNeYsKMMpZD{7_a04)D8R3|v0eL;3S{P+j$b%8 zQ=CX}?O!T4_qI>JSuWJI-`%a|TzMNv$t||Q-ofsH3lcN#$518;SN0ql7W|waJ96EA z{WVAd%iCRmAf%~d$J*4%q_j>+?Tbda+%=M~>s1fN{kU>;6%{@czpK=m6iiI}Rw_!m zH`NIkC3~W=mZH5SGAdmAZs(V{at$pD2Eq8Uv_dSs@Jy_sBcCu-o#hrJcO|4dxTZ*N z0euA{v*Z*n?8u*RQ<@FvUZl`KWcr!n*c5%*3f434J-NBN4!krq<5e1g%%PDnzU7ll zHc2H#+HL#3!%ER=d|Ye;14BF>P9xV_GOt#~07YID3Q^g(o=cCv!3uT2{zhxfOtKyM zpkf|2;q9>+qqo9`;dz9D(A@{J5EuW$b`E+#K}!o&0omP*D2NtlX>fbcpuuX`@wEw1-wpMt96VM z*0%mBgMQER$s}_kPFz2av$5q~GR`lcZhGp`AN+XO za;bm$;QRM%fvG@yrG9nf$Zr7d{P}co;qTev#et&df4=-K0qpJYb)y&P@_#4fg~W*SBc;_ z+36oe?WpI40wN+k$ufUVwJK+9+e_>4+v>M>|NLZH>a|Pdjqk_r!~H0M9PNjf{5|wR zQwrZBpnUG(Hb?$1F8d!z^4{?C>0?=YfazaH7M$ z`y9)3klk02yNCzQpw<<5MZ4JwlU#^;IX~c zLq?adHQmO*)A;=qAZ0VMF|U-Lt2ssV;w2E@1@5Tl;bwi5RSq~SD}wWSeimGo-*r@r zlAbGJ;qd^e@tlRomM>IE!YZP8x#wIg;SQSCio15tlbl@&4QC7!0FIKV@o~tjP4BvW zwaGZkhSRT3(|1!cu0Dn0D3gDsUb0oW9kz^!$%plaMwAX57ib|3|(Ic%;J9lf=KRu%DJ z`c@2OrYFQLy`Mx;KHl0K9T_TQR{3m^7*+G-*4;#V^l<(?d_!RCE&Y4+n)wU6d*4t1 z_vG)U0k`y$&zbShP58G9 zXNP_Z8`eI@IVZe~&s#p%$U<8&c&eCdxUzjDX2v2jQ%zCA;d#JK^PujsJ-tl)B|$5j ze23>#L(9qCdO)NARJHoD&TL{q)>&+6Pv96SZDQv~>-5IB7m-QUSNRo!W=TFFh>XXA|cW^YF zPVK|F=@8};T)9hqe(&lr#~!5(V?|A;7muEg4pZJbbLuA#3~=>(^%WLq$6qI|-cHzh z8865p^-jgEj^r^U<_b=ZZmq@qMF`U6lSLC~@D+Nm+pF44l1tBW(mN6G<_VRx50|kC zE=GpUH(O-AxNFcLZ}5Ht>B~;9y2*B*vF(ylR_!$vXWVEZOG^oxer}mPzg@NK%a%CC zireT068|AcFJ#>==PTAK;Lu2{d@?L-lHOvsX;lGqLC`=-Ru~4$IFdRfX)?-yHX*w@ zI&TLB089!Vvk`KzsfwE{HYazykMw!rA&)(l`8%&BrxSh2M&`&e=gF{h+rnOv4u8JyuW7^2#vt?U`Wnz&O8 zA8hw?PATVE+VI-SRrKXB@l_YwLO`u4^SROXmap4Kcp<;^olQ(WI~iIb03h`yWxkic@yvvgEHmpuBl&AVV(rdo-Z zojjA=p=?xq&NP;{$CX>Hrh+T`H=$Hpk*A2=d}z|9!AMQBsvM)q(H0CnzC4r^p;yDOi@N}M= zOA<99oRdO%pC57m;>A2!&1~3n3uvKNR*ZJq_kSKu^dEpe^j?S=WE&-}X2O-d5rgAi zi8b8^`SUxiwbn6>pSDtwls-hfa+v>>ohYcUsBQ0;tiAmh?nXIa7;CKp(3|mRQGVei z2_+rtTM3h94u`!6nAn!x2)lA4lv3j<$VS~V<|o|8s~go8u=7%b&0kqBz)QqooXG`1 z_`F@(*B{s@0~E!mW&?gPOtc-VW1V#~adRpEGmNZO<61uh#1JMMQDsC-@a2wcvq8ql zseANJ5%rHOWMl!ZT*=2!zd&1Iw1p9vbnarq z?c$O(G;))5Pbu3T43ug2Pv(oUMR$R&j0W)kxHr}7^|_c=Mg>TjW6mo3z(tJ^EH4DM z(;l?B7ZdTS8{Z8ZMn6nfBBr!R3keBA3Gr1q`W4^51{hi7E33)o99>wH0$2bn^X+{| zHjjvefya*)vY7%{S$3O& zPcE&eQRSEv&~aLe(C6?W=7zZ&DWiI4ESIOO#OXy>K9>FDeaWk{vxgo=l+HBD5bluD zI6I1z;Y1?$P@lI1T%PaQu}mZ7PFG6WU|pF(cDoKWzy?gAoJl#={YE4%**jqI0#k9VfjJ+Bv(8lj?hOjoam_Ndx<$`MVjKVJtGfQysp~gD7u40K6ICP+!*C9O$ZS zcgDi+&zzh(x2n-R*8rfx;XT^2c3mU?$fBO(=wIp1?TH&jE8`8q-G(uL<5c7lu9Znh zEg7os<|^i+HyAX-7t^pHR@+j?H5p;zFu0JwKEw!}#7>KssSOEEP4qDJ%v^XA~Xf7=e7GH4Sf zV#n=})UADVqV=)7EOl4c%S66sQK7jlx5G~Wv(Ly@ahjh46v2PKJTt#E z{5?{lK<;)60Arf?s6=6+^JU_r=QOXDucHg4uA^D7`oO-AXaPeC^zc6+7 z52G}*tUQMX#)UojLug0 z7*_uGC&yHhcH{71VrQsoL3vlL%7x0{7b7G?2rxP31DXsUlR>$hb-;P6Lw4HKqd=Vp z0M&+3wCUW?EBoih=9uz`aRd9$Kg{;?UpQ~Ub8Q%2#H3v*yM9;etXlv0EKou!oDP7fU zBeA`Zn_Bk|0puCA@tveOE@0u6W!1RHmwFS0D`z*pB*eNs+(sL6_B@<&Enj|Z^7iat zzF5|odR92k8E~I4u6(>gXp%Sv8!k{zq8qcUVt?+`X~FgMv{zv%o09gg4kdE4gn{-; zUB17mGYkJ`hPM=TI@+~Ur?S-Kpz7t~EVxh$RHvUZq8ule5_x)~V6RRHh;uU6Qsu$> z=hA-4qLi1y4JPSJpj|76QjahaCA}(iCg;S^?C|0~bW?fX?Du=L`h*U_%Qt|n0@P!0 z*?@&P+DG{X-%K2Id+YTXgJSz&)K9Iljz>n5V!$ zTgt=K3zZZY!ibRbFl3}|+{@6xY*fL-t3(40wdYGNA4RHPi&YEPJZ&%~t%qMh5AX29 zf3!Z>dxr<9SmZkrWUuTL8x2RdyKO@7t-BhvE7yRFc+++k=TTQdELroSNfGO`5cCPy zUh3{in<#2-W&p@YzDjOuy|ZA_R#t@EfKXTZPf{<@{&QlrMWFsHZy`84aQmFrzEVIgu@E}|>uR;|R^$nbRK=dM?PZ0GkaS(xcXJ}9)1M^^4F*nTM2boFR* z(v6t=+TC^>R^DKw*)X~4)0q1--VsqC)`n`V8vb%?sLP4CZRI#L^z|T|KFtSH;f6ai zW-p`A2K5)xvGOY_(UNpZn3NJosCYt+c2=>kHL3tYB38!@nJHaer-^0HO90T`6n+on zHj8&>9s|O6lRo&6SxKXNy;`AV3PBae(JyKY8aLzFxXx8r*n|Y96O3Id^S*l4Mf%{a z5jA)5*mQEshf5wY-v#)G*b((m()|pjE zbqZ#`d}o6m=qj%&ch^K9)~KvyPxhg+N?`2yn;4Fg%fL8WE$t_<=w@eDu$t!t7Sx8Yp?p^$%-(5P?8n=&{iq|1U> z^*17rlVhP)*MzhzVT}?T+*Nr1;fuN!Kp+=sf=Jbr-L?^{f_z>J9HvvyQJoIueQY2! z0-pps=F=6)2A7<8nE{r+5g!}Fa`U??6*beie)DUI6dM{d%76#^+WsK$oQ4#?E;Nmj zO~5$F!2{)6`-Rm~y5t+*#aT+4CYqqdI-eq5vTA7boS>8a?4Ak21~0ppP#I)PZMCRK zttWMI2E}Qu*oqmB<*?%UsPny63UTi%f3XrFDsJ>%g%5&mL11Kip23*`c(}3bi_Si6 z*DJ(j)TmD+TdYm4?-%fp{AKT_^^>Snv-WnQ>vn&m08fS3MOmQtPJ0q6_vE(7d!uJH z5<|{VY6`JVQ~)^~h4{%cR7yXl^+ zzx<;Q^-99tv4e-ku3dhjn;Oqdr$I5jOl$tp`E#=0h}`nXQk+#!x*a8EnQI>d0ibT% zdD%F#cpuG})DsJDPWiR)_dFN2em^Q%rDAU^TJ)vsIpzv?beRH8UqS(HtckfgmTM#S zW`}37@|e9Sjcyy?WRax)&|Iv0rixC72fALke`;PNnxIFkMC(DguC;`&Z<>f-)g5nX zq|3tRN|(sP7V4yF^um{=6nu6)IwLo*K>KRCM~!$JkL6{ZlbI_gVL}P-os42p$3C!x zU1kKd{RN64r3(xpcHj#DL5Ru%*eSovsd9@XrMstcx;5>N@WNO+@;3UaRY<8(y|du%Ym5t}v+D zpY>olq4o5{d{_NO`JP<#Qi3piz7iFEk80FVVGT94_VK- zP2~CBqiibbLtU59tWwA)A8*pgBuH`sL~6EZAi5OSEXIzxsdUJ%e%Jp|lCB)gm0lk! za8u5YEE||C%sR^j+=kaI`d^ivO{UCBHG57awUZWZ3hMqhVo}}IvTniHR!NY~3m3`R zOw^;?=Gr3qg25eFA-}!aE7-(U-5`Re2sg?^ndK7@O359cN^NXmd92q#a6hH{8zx;` z6sN{hAmUF4ztpMTCO-O&1YsAQz#izs9wXOZVK#m_whE3I4>{OtHrvTRa`u856B5Mh zsLFGk^L5{;Z%d`_Rk_{e;?IWBj|0xwTW~8k7)WAIm&FPKKt4DQlIf^?zzKhwKB)qW zjh!24am-rv*`89-vDIsPh@yxbg~Vq1hzWIKE}!*wSPjb_FG;frE|I(Pcih zp-iQsZ*IWsZJtwl{hSa85W)fj3olXwOE%JJo~%nLIynHTi9>mIeAP3GcD2{YD?+q? zt;(o>YXU^5cz0sQKMa(kj0MUvg{$2>5@psObIh^!f86kQwk^ezgjwxwD)Dw%tZq!2 zAUbK5Tku_CJ*-@X$1{yw3*x(WeB)~Qz2&3~%5!gD^aUu-(1RAJ$DxFz32+?_J*Mrf z7*;L=i_OY>yJFqx$YwxTl0m8uF@BreI`Kva$M^Qe>bFAl>iG$iv^y;M_XOE5Fn{C9&O=nWP>fvxiK z{tZmV6=!xQt(4)V>B-OP-wD!J$Q+XnLvsu5XjZ>HekyE<0c!lt_ofvBUPwSB@;?4V zOZ6}rzmleghAn6pv>Ca(wmk{Md9bgRf?7XtcjFIr z2_TA48SG6RJEZu6_|VZMmJi>^iJgjpFe0VtV4<_(0A@P5ZgZ>F+yP3%x1th4daW*XX;X$kKWnlqJu)x!2+xmu9H|_J~#FgQm@c2H~wecsP}909IUPCZ=@?G&PlVhUst< zCq{t7MRT>QC??8Cb@V{Rj$Rb=>dwsRy#jz@=5&<)-2qZo&Os+s(sRIq=#Y=EU4z8?OQutw!n z@8doIdc}<+N>3gE+Q6+6qmul8B7@Nkocsd?KMG?hij9H{R^L4X4|g)bK@GGG{AXhr zBk%x!s~ejej~)@weg}W#6XAmrb#jISPhiA*<~uPDFt{98{X^5fgjLP0o6*x zamG46{nI3X@|;G1VS-*w0to4;3I8%wE~Xu&yDMg?{7#_<*tey8ZfWHB0p4B?3L{tL zTs_x1*nJ|ZEDERi<*dfj6o!!30H`YhRW7An299eLB!spWT*9b1e+S!SKVrd6U^l?F#TOE z%QhU4^q&Xq;WQJ$rLF5{T6@tW` zxKa6po|NKOU`&L@>xf^P9cHlta_}q zau5MnwSi8$u8_q|C5&cC#N0{+T5gA$d_W?)9CgCzg^FWhWhR7~RP)@i+BlCP_ZHEM z!&|3d#=^A!`)H8h=Y97Ap0e+6AGZ{`FzAapqZdXOa7~_7>wii|0(S|fjp*tS) zE%mJTxq0K>R048WR6Ar`+o)2#lYN_*hORSeyR!j|)kmg>iGUH(2Izi`GOkf2XeS5f zLW(>d5e5Gsd*sPQ>J2SC7{`GZet4BnBN*}|>p*=nd#QjNGY~A#0=T{U!^3T*M{j*~ zUH!x21$M@=Nj;h-NW+by6NP#|7fXll2Wm85@LK$_GZREb=@VkA(Yr_UDet&hU#-7D zQptDgz=)$7rX~V8fUr%m{*mTVkqQVkOGn+>m4ECCk^)=2XIa+}b}IVGnR&e&HERWx zh3W!wm%JrsK1#z5O(*$iXwRC7hR-bxrf3JM;$l^{?-lQ)n^v^!s_g37v3zfcHXwkz z)4-shz)kdj$MtWQ!pDd~{5qT?wwszK_j(app2GMuz^F22{%@UM213-N*+$fzcc_ z^U+(6nD=!mn2Gqks7LWe+~Rihc&k2wA(%!Jf3jXRK%<~ z6Kp#Uj$3?R6+6uGypq@jEB_?>EF=lV5BPw#&s6Hy8no;}1+}?>$Ub0fx{ge0anY^y zB>+Y+i460Oe6WxExeMo&+Ij_En6+p2z|@tP`yc2mz0}uP>zS35;J6@O7RT&jY))iz zDF*so^#vbd{bq5eue{DOR8a{Rs3y6L;g~v8N$OSgRG7j=#8JgnU>XaQ4M1*^zy~YX zWUn^q3lx__JqYP}AX!j};#G=5^k}0hKfPn96v=<(k<5_*vOivkk6vXDkeL{4-2_IY zLbA+;p&h&+){jOvT<2CYz^w}g_xeeZxU_v62Ycp#Vj6gy>R3 zX6F999|;}#ouWl6LgmkwCpGht*&=IYzWG%~t{Fvtv1@*FuZ&U)?-t zpR1n(_>GhSmESnkApT(lGbNyav)5;eB00}qpng4Yo4jCbIbw~KS?~qy z!)ej3wBEF!wS-R$N@SVIXbWA~FiAxP2Bz>-0G2I1AUTD)g)}10QqXI66+t!RlH(j_ zwu&b}zKRqEebFsm-sNrR#a?f4G38a*R$3{$pf6@jib#GjS7D3xsaGv{i9awt){I${ zIn!Vs4^FRoX;I?NgMI#}-K$dPq}Y->sI6o9p-n<+!JHu37{-r>y1Q1|XoTF{2GxRK zy*RX+;KhhB^~(0o^&p839gwwn>^GNE1yLoYE@hn|R==0QCR7=t8hJ!RQE%wFxVSu{ z@sOu{o|xxUey69?NMWPbXL&xH&MzoXShoph1@xT@l4+hr);(a~AiM?I*JH~bX-bdb zNct}vV9#DyFIN1Cte%Oe;WQ81URX(A)Sd~WPCa`S9t9yUrsu1vVW5W@I>~q=CPwgI zIGzQaX-e_;f*!xU4`+AU#8Ay&bYsz2_ma`F^fX`sioe$Ku%+R}K~Q&_C&vq{Ux>c+ zM2;vN)m$e~@Ut!olL(Olf}2>W?pp>PyAq|MbT-fCR-0tOKzDeU3S?DJmhvhFw1ik7 zdC!H5Y7f#-1ndZ>l8nq16PHiWRs9|yMEy{6|Gjr~>|Z|pfae3r0`M0qrd<{}%z9KQ z6IrjbZFcK06rLFRuUuer@pNmzh8jyYLHdLfhXC`<>HiA&SNT6O(d<1s27qy(y#l9P ze;9@VAZB-H#$j;%P5wVzVgKZ1`hQ0Q{(t2P`>^*athu>4DV638lWU(0abj@&pFLs% zO+w^NT}F=&US;p7w~+d}4)C!*pIrU}^#7M6>i>IP0T2|-(Y5K9`0YR5t7wREnli9| zP>$E>NyJNIAk-_VssomEphu;zVQssWsVKP{(|7 zytz7Iofkxs{ho;G2(c%_=m8&+dP>bv;q?rcf@Y3ZGc6DOOi*f!!>YpzQ~e4Dlq45$ zh;CZz@;-}!h7`;P!V@b#AQbZb!Z^KwHt*VFVA+e6MN~c2BcCT;To$)n^9@M&GSj^%+Rkz%`44J3w>is>+{~1=TQ(R)j zU^?-$5G{>=j=HksKTG5**^W9OP*<#YBa^Rd)U57>qBPAvQ_y+4%*7!P3}7ZxSqp9N z_o0b<9JOggWvPipj~cc;VpPwOD%#kml?MJ208Yb`{~rHWOU5|>7RehCXF2 z4R2rIe~If~^Y6Y7(WBUDn$QEc%Ic`bMK8pjSIwL!ekjz2#s7aZZ6$Zu_S#V!cp? zgvf+wfT!bkS8$&c$;CPq>x zsjc}F81o)|_-4qbOo)lL9o~~IWmF8XPrNah1h{TiN476%yIrQ$uCAm3PNr)>%2wXm zJ96<6l{Uh+ovW~Ej8i`Yk)Vv_6+2+LtQ+&5g(3^BV?W@i5)#Y-5QO|mJG9l^U;Brq zs$1p~E0uTh5pu3CJpuDhG)KZ7iDUCXDGRS5QqSx*!A;x8f!^5UPyz(wYwL7$8eLssU(bmyEyhJi*7j?u*WuwwiL*G< zJ^A`yDv|`W95#rZ{22PU3cL4%&ZJ)s>8YF$oC^^?Qq~T5ogSrQ1N0F{au`wN5&cv_XzV%UOx2>%bDhT>dq$m%MAjg0bQ3z*`#aRAXc=FVA_RjBmRwZsrQlLF!^P zAnL$c)hVHmsp~){Uu-3r#p|m{I(ScE(jzL&iuFW-`<=*N+DrcM#4<{Qk+Vl6n?lPvwM=5xfx)$Bir;h{fj?SE*2B^^r|OLxZyheH&F!>JUcuNj9o{=CySY^ohAy#$1NuY^hqj}=FerzD;vX8XL(xu-J@qL z!W=N7Iz5>*>fV5nYG4x^NY}fj1nfd*DPw&)Tzv-W$qhP`2C~MjrK+$x0aH}>Wsom5 zXjqkUGR0kZ(H&g^6~W@@8)IzoLq8D*R?(#8W~v8D3;VmaxbZ;cfDCo#Bb!APAQuKV z5z=fq(klg+onejG{Q)N!Wjz{v3O|^@o`#Uh5f#6Wg#ZtNvZyq?j3h;0hA<+GUL;hQ z%%={4#J#|+O#j|d<+C4b{68I49-x{cPEddk_IsD0i+%0isfs=mmk(W@IDS{gS1rXA zJYxIGaoT^j68i4$ex?c4%jmmZ=$3kKFq*c7S-eH2&y=b4H9wWjV<1H75H0Q9HoKT) zI-a2bIqycm;!5)K-8@N1gV*k}>Zj0@XSsU4ilW+;ZuA1_QF_v(^nf+i%8H6>r#|E) z_AUX1Ftk?9mv3TT*O8al1M+`Rss`QWoAoDl5KwL+Y%4~ZUv*fZjL`I-MPb0ada)ARM9M>rqH@?j!M&U^1Ta zLT+aX>2tguTkF1W*|1i@MVK8i?(b?7SgOtTiSk#WY@^s0*(qcn9L6<)JcG=|tF~4M z92hS2rlEj^%CE$qhA2yPAkL-Sc+49`j5VlXsdO8U3M6zGD2AG(5eNuysm&7%8_Sn z8@2-ci_`|-kovY}tdIE4?J-raC47ce!)oI72 z(+?y_L)&ms$Bxl2G||`lQ{PJ@$J~EL$00*?3=M9>D-#p?nK|cJU(p|m60cfSAAGM< zDfB!@F$Vc6kzD=1cyTJ}4Gon(Oo1BR(|CcC=Ib5LK1soF_SMz_IX9f^i|Eqx`jI%0 zh&=C);^h|6DZDkIvy{5yc4a$LWm)FEjBU1|wpD0ju1vrRRqB2LhPwu=1E zk&3c2XTU%EM}WICOub7nQ}zk|FEcE=0!f0BB=Z(lPj5FMtI9!#;LLXQaCFgFbb2z-KLu39f;E_O3O z!gAae1*~)LeAymp2(;ECZ^qkFmlkLD7EnLCwsv=RD8tPj0fp&PxVnL2ywPq>ZyG6{ zSZ3W<=Vh{2)9YB>H9oH(Q$z9|m6_cqb)}Ksu5Lic>-uS=ZC8yqRolp|D%`@>yE+*N zyBt3sWn1FF?^hUjqf<<#F9<~nJ&W;Gl9O9t+ML0Zk+EISnB?BH%@ynjDK!3|%LP&c zmf!I&?6W0DB`gI9?AQ2DL)argL8Ha^gIQ<7CeXx=LyBhV(zTnTkiT)aztT+C2rFSo zICQ47@<6`}j)al7lO!I;`}JP_-ILMx%uI&LYyi>CImb}lciE(JiCvw4*ciJBR*V)l zDcqDDjAFqIaYbiqxaZGZfTUKTea&$4U`(xEm@qnd-tZ#@YLRX|G&Re#B%7~>gpG|H*s8?B%grABr zMi*WnH@&VAbx3U5`&LOeH_o(HTs~K;GB74YQ?U)pJx=46Edx)u>g05#L{|VZLZm&+ zACXNg1~&%aiRN??!^*XY6(cv0vEq?4>0EJl60VziP zGSD~urVcMRXlk)2@4QUcfs$22t!hBI)W(U}VQCG2q=}pNjr9FSB)+LlSH{!jwOWF~)d!8b{vf^Y~-$Jkm7qN&=pJ{1T`7v#YXk12vm2^vK#;-RreK zzvLjfdHl(#nz`RXQ`PUfW~@f6Vr2_vTG1w%%c=JNyl<% z2{gJJcqKF}i(l2w9*M15??`_Ub=i&a>clo{gGX9PIRA-(P+1g_>F8p$*?JW3Z{!Ccyj*l^=(f3gngiT#-DVk~Su}POnp2_1n zf$sUMousPsq9w$8e0hG&QRLx(u+-JsZod{-t{CRzH4E# zV`jY_c;7$I6kL*J4>B@x^bQa1`(B1!WEq0p4ofEAMC=E+Sb`ficrtegmmtJ8DM^p* zXj;7X85}CHA#b!k98icUSZ&XKRplW)k6{h9R)q@PJTMLo}q8b8@| zG#YJjEm-ax)02-=W z$ze2q)^9dBR@}rGKmI_|L_d5S1@;DHe(Db zBx@q_oWKW`os^~{3JPx5-yhTjMqDyLi0LFP{|R&T84dv|&m7H%m;V!e(r^-WcKT}T zfKpI8Bn61DodA)zsiU!jxt)`_tqlqR)*Bi?{`9Y0%+}7$!QAYt6G}1O5I-Qr{h!pq z)bMZD*G}fvrYPJOcv!#{tiM-OY{5i^G=wM@RV}{aBwiyD*F#oyV*}>Qpl=izm z2I~KsZi;`}e}7Yt=Q8|%b%`Vmj{4$%Ew;3{PPRw3KtV&B!(b$N4h z6It399r}Myn<>c232gPcF=E?B)Px50oBS*<|17Go^ZC6x(LZA~C`?UFJ+=Eb%TA0v zU<1X?f1Ur|973JUuN$QQZ-(SWd5=_J((h%)`#|x5qkjg!K$?;>T6&G_aB?IS^|Mkt zU1nHBM`U|BFSlYu<<8WwRsXwpz4zywQ`qlQMNq?qkVG({L18i7UMhYg*}0cbsc}aFMTB zfF_OBt_2mRaE21~Tv(6lhW+1s2`0ZJsyOVBD6c)>CIn%VZw33r2)x?J-WD*x%?5`o zPq*Ra9SaVWdP*)%m0({C{NSsKku5;4KgH@~ynN<*PG1X>yiNZTAA}se7`HvbnboTZ48@BtRj_e1A8ox@XJMVP%toC9(qOUrlpctu! zDV8tyKan^$*CcSasaAavcEGZ6g=fS!EJb~QOLv8sd&s;d7|g`V4a)xspPKyQc;5a| z2V1+qg<{^cThPy3%ldwY^k7a1+TI)VU21vKRsM}mrynw(}o`}o6=2ll?mGH){` z{Hgnj^E|5i8D4X#cQtdLrtZkb$yJxPM^IaOp@DXP4R12RZg-)_O?xi&2spu!YoZHw zBIJ5}wGz>`ANB9bISHaWtV^hP8&RA*WO_y14l@dR=(Bn0_#IQnU9|LmTcRg87eQ#U z^_->bZ8wbZ^ivIi%@?aY>rF^oO{yRp@y%;3X?qVV+7}Nh9V7d6C~q4cIxn<+Wbsr` zy+w8;%igs8YiS)uknNq#}O_^z`9T)cC zA)kcf_^>**!~C#6C1yo8_FkeRyMn@ZndFO7Wz@NiSE?Z%r>|G()al@>BbTW+Y|TEb zQTH2<<0EP<8|>|_o_Npg0#kF+BVy56-kmCnAP0@ZbYl^A*Qe(0XS?0Y9Rca^1Tw8p zpV0gJ`y)uXzb&?S2s8<#$3?~ZE~<$0a{|i|9M_hZcyCQs=Ti&q`w_X2`J(f8!xH;e zIB)Xil&8vwr_Fcz(#@+b^Wr^P(e`Os@L9?H6QR?mD^OPlH^DMRIg^o!?#J`@2b13Z z1x%@f^aoivKV#B-R4074%Sc=#x!~@nJZ3g($=lG=SKJLGUv3t}qiySyk7wtHC3GKLsaFNnOLczK*C!cv27{Uyd7IPH$OVOj zUNu_=N5yUneG(VvmpRr~`+VM15{b!&8Z1$H3po{hposXn z6YqU?X0CSh;um#w;CzY6CxpFkizSY04PN!M0N$(cXGEa|o2t5ss_Lg#rI#TrD;7N$ zU+(SvifP6cuBjeGApssm*W&}vOhSq@A}N@#_3>Y z!wCCCj0nF{D84&=&0>ALH6D9Tcj_?exvhma`=2q7wc%X1W~(Zbk%%|9)`fH)`1Vl1 z4D0CV*g?r+}w~$ZJD8=PeM-1 z7=nU=T;1KrtIQCxw7_+a*>Xd%7E`FBnOiY%zs*SlSF#*(t|q*~xR=9e`*VZ@&Cbrw zg2zD%F?RY*Vozb=`{R=n5)Koo)VZ+maN~#jyXpCohTy%?PsTHOB~gtS%yS50)WG0i z{!@N)B=?|FnYuj1#rU|gk+E?yhw0PB#l`6jW;b2S-LoAnWad1yR#!)7SBQwB|HT0V zbmm)Emw497RbAWC{n-pPD{FMNWHg8Az<2kVs6FoK$(pIj+FEODD&gj_wVB!4^O=S3 z3@Ry}`*ZpPQQoYt%=OqMMZ6>BdztIRLa*U#PU{QJ-IBb=TKg~6hX3HzkEc0B*h8Kl zeLbNOI>!oMj*65R&%~n33UHrR?!XiN9hHkEZW}?j@a*;X?&M@97nfeGV(-r`K|Y;_ z#d{nl45B9H|*pdr8KSRcyF0gJrqv{QilP zfJ<`tC|>8-8`T%)daA0gwnj6}`eNRkZjaSc`FMJIUT(1ZnBN&$UVS8b`Eqids9_pV z9U2;%fVZ+xjf>dW*p7h&MuF33SsV89DO_Q{e!a`ue+H4nM3N`7o8Ej{Iwq!}rY7ch z`gLZ{uO%fVRTRK8qWtB{;}4m_)>IsDp4S9KM7^;zl3J(a_7I3|o#V=rJ?Dsa&otrN zLorIv!wz@U-v~pjTUe`&#-l#55M1XzgsN=K7D7wKdTVo&a z6~@WjmV^f0Oqh6-)fuS)n0Tu@JN=Ah%|=3yyX&(eNHde)(C4Pnd5P@U)m0_|Q zdZZqDI%wf)6}uI4pMoSo?j)ZTzB%!OOnR?4cD1Mku1`C8S(3@OokSIye}{RCq#bun zF)hrg4o;Q5s+KdU@ey1}4#z6FThe@AcKb|B6&3A~$Fk5Sp&&*?US4n`ikUOF>eSSi zB~JnPgPU(roro{u{vr1;BM30A#vH23s;U5)`u#;!tnCeCb-Yak?(yB>?Hx^XPc=&) ztRD+(SjdQlze&X9V{?I~aL?_>R8RH6F6Z^UwEGqwF0g)WZ42x?3Y}uc5HJRx{i=BC9Plo0Sy)O% zQO4l#bdcjF-}+f$?%avddlU7&`$xUct0d5}hOIpY znd>yrPWSisu_^eg$7VDFIzD{;`m4rASXj8ep~3!acM1dXjZeo=m?)`VYX0#+>l#T} zpv=y9jAa2(>fomtjgoB+SiINHV~{NltxtK(tAo%AI zOxe-dKQFLXXWNItcki9{`D>w45oXA#(@3Tr@NH+keT9ToMNkOTj`i-Zt%+%Bk^s1Mx;LMw z+vM`% zpKdR;`2^sfL_}c6#l<~&`gAp3Q5cmJ>M@si!mBD{VUAezH~`K|-0ZA|e?S1N%|}F2 zQxm83YIDvS+2}ConA_4L#GNch`}Qrn3sM6cLo9n^sJ8dX*V?Yx`%8_=Wv0ee_R5We zgV6$&{CCXE-EeqIKjKHlxXoat_uchanSPrDC&`|E8B-bT?&hM7l6M||4XU>#Z@z=j zvgA~kry~GBb{bJgQ#0c+Fjb^(@95as-5nH8#JakU4f`S5UVz#Vd zk|Ap5@tN=rt5v5trxZ_+;(TYgrOWi%yBj9>=lwd3b2DSe|-zFNt`p zfAg_?Q>P+}&i69++;c#by0rDB=+=0Ab5H2)_2573keMO+(6>(0T*aDdKCK}w_6e(k zJXtWBSD@UCdFpI%stMY9*J^nBUGK{mr~Hc;`$>bWJRZPB(2eXc$SNEl_bGgu*7tTa zRZ8}b2zcYbpdi%Gnwp8jn&yQVZLtf2r(BdRGFtFV7OHi*2yM|*lamcneo)FR9)6$q zYkYm*Kiwu^EtZYB*P9$CUc)|eg*6VCwBWd_)+_M;j>n)T`Jhg8*~a;Nn2GSrG5(d` zoBbh}SCI7=2Oi8|GO{RmgY|{m;wfSfQ2(QzeL=ku22*|9TO*XT78AXTNRJRDhi0A= z>aOgLp;HlxEsP$HK6ZP;a>9G!6JisBzG@_*zc}87b1|H2uj!z*$~!hXJbZ25wyg%k z7_hj-rk+rT^7i%*mhH^1UuWqR=-AlUwA7BKfmB$(T5yp{%g9vL!Zfhp_jfnRytb48 z2cu(QiArEp$0s5Ai+Rdrcz_*yNl1uKOx#zjSyk+p2b`mjgbTGVUq0*TEZCTa6aLjH z3<$F^o7TW#ghY1Dml@#?U;9H(kB;6jFcgecen252BC>>rZ^$0(!<*a=J1_x&g>s*4 zw%+V#+b*?w-t5&)b0EjZ$K7G+3(2S(f0~sH&+ctEqv7^eA#$7FC!;FlI5R=YMn1`fc1+ z^YD4KSozdr-$9hDZtudI`{W2qQWRP=%;qSE zrjSKLgA?b6t4q=N8f4{i!xV!>MU=hqbG~K^N_4_Jl(JtP%s84GEnY>VLEFug4~vT3 zhngkk#*!xi8Xnq>#cQ#K2@#W#w$M8)s>0=`>Y}ZNmm3VC4Q<=H4g@v}Irt zBrP5nrNf)WKO294kXL#;l~8h^ID_k;7qQZkFm}7!FgO2WMcmdWI?yy$e9ntd&eMaZ z2NGRT&z<=q@pd3D-3q@o;_Wqqqc1`Gg`fV5Ju1aj#~(AGcFQ+6QBxSqR1}@E#^qq= zR?k~})<}}R$rwR4wIg2RH*HB;1Hv@EWGcNVy{YDn3_O}YphLrn(fX^>mejw!R>ZzVhIJ%-gp+UwFwCc#Ml@%O?x~D_wx;dbC^41!5$MZ24{1)PoGwLUsaoo z%}f^LftOwA zqDGQrzK=$0D5Ng5g&&Nwy};BXRdi!Uu}OD}nOdH0)7 z6cA^Bfx)uh#&PfZ=0+QB8oCvgUEM1;c24q3zy(dORs@-2OUh>qvEN*sq&NKhT3nlO9Dzpe8=%mpbB6W+xqfH;?kOUe4As`Zcpj zQ$zPfL1>J;+qy_FcOS^nLAO1=TFi?2o4R!+XGkQktvFqrS6X@^d8pC^X^C8^V~p9*^y25VD$sir)3eFI+a)f z+OL9rb=&$pqc;@18gzk?Brx;A|DGIJ0~aSF)wf3oIQxK zZ?u1HGWWd>9D{9pfBGz6786v3xAz*VVYFwKdM!&G%L7Y*WsaKh%=cT-!LR2yq?T|Q zYj5U-K-5p_pZs9P&d}q~k{Qw^7H&`bfpvIHPro}HWnNv?7x5ybr>BOkYUkpT`(ZD6%i4!tR447 zMe7?L?(Xdk0oKuws>4wk5XkqJ1?l4Vj1eTRWisoeR+7>; z7Oii*Hm2_8DY&lxXsvX{)n4UJ)l8v>+_PAH0GBPEL7q!L%?A}DN*sOL0nTBh!3V*c z5V?WYcqtOxtnhCx)g@lW!!Dz6&E}Bwu8v!b5mq;zp?eY=yA*?vdXZ92p@LuUa)0i! zw{u4HBeM}fJDrLE(b&_K$9UQ6dWd1#Y{j%P;kT&+=j}=E{60N? zk;aI9eTvTwwFfDtRX{V^>}~fnGN9+hsAG*x;~+G+Uu$!<=WABO_?4@ElDzjtDq3%V zcnQD-v^lMjoK}E_>9EE)pY5v3$jYW#l{Jk2M&P(>_QX^T^Volp_(5YPY7=Fh{3|^C z8Nla<(m+-HtZ|(ocy$VtD?2;pI4QGDq*9oKhsW*V##zk6}yHOu(qUvT*|iQJ~vhY zgXx4k&XI@gQlD%*Gah4vlr!*B5eLtFNCLU3>IUbQR0}l|Zw(g}sU@Q&21&v$Z}LJU zj!sFj`>$Sd%K0gn3t9S3DCY^sg>EfUuQpg(&-VY)X%Ra+t&c1Wr#l{(?PpvRJ;2P& zZ?g1x&-mUB@L>R#1Bkc;09+3MV`4#9Hh2@H*Mvh!S9e&F%1c~I>IneXKm_t*2p z38HuJik3IcFKQY^O44-U;rfCC!Ql^}7z#+^^5&4HEGu2Pu?N@6dBvcp;ZRD8|E0LE zxLODct%*mc)7pZG4tdNXqPeo$3h?<&t-p0)52f=<5fYNEX z``gHl5+tDg3CIjdq6bx4*;1rV2tWI>PKvDJc64+sSu41@yhPdTxMx;K;}eyZo(RCw z9_U|NT`lhTJjm24AK5TXKIm!<#A>P*6%-Y1odx90M>S)ZfpDWnlM6Eeom@K{P7%=I zo0&=284zHnimf^c~kQ|KzwR;cGmsv$cGlqFlJ6-ObiTVEvfeGHg*4UAE`@2ETJK5J5yF6+lV0m^ zLT4)ifZHsSFKbFUW$oBNAQHf0BM<>iO#;9y3=q>LXFYFg9(zkhlB%*^Cdb7Y>5e)G zGl`f0v05#Cv(hcs+H>a;Zoqf$@9Q%F*cr~8%c&y)`9p>g*`Hdo{%aA3^(O|xtizG> zR)ZW3lVJq(#e>Sq%I{cN+rS?hnC0kHS`gh1%$hwU0QFu2+}6Km9EcEmU#?&xYJo@& zfQlNuRD|a0fD$`a&w@qS3;HEKdJfgJc1jGJY^4b0a90+9I41^4%bD)g@rM<%*{o2flaW`k`J=tzql8x*$oabHXp#G* zz`)1%m%SpD<`Z<|6BAdLYtgU@W6Xo*6I?2<(-*+2c-|iM)*S3?e1CbDzEU^!`SUDV zqW8n}?!C@Zesk-h`0Y??C4pJe>5{1@8urC@j~&_vyq+a1gXhbeYYH(C-Yl|!U{{V` z^nc*&Z5Z_Trf(`_YpYs2gjxgPL><5Jj4u1PgEreYtmg4g=GX}-FVQU9niI6|h*A=5 zmK070E>ht62WSYG_w-UD4vK7ToyF>#8C+1$BK5L8 zgxhcv^xR$1+=`lS5R?MoEMUniTcLHEEz>SZsP*@bGo%;+KNim($!E3!WabDCSvrE5 zWul&yS;o4|%sk_nVwEi8ExIb-X(p|Soze5Gut6V`+gZzJJL%?b{+f()x0uW&(*Bz* zuS}~egUI?EazL%-_b7e5n(SRW)_e5>S9rbYz_XWWky``ZA1jsBmOad#H=g1EMGODb z0sx__UVw?+-g>&9Zi^Zkz5()cPKfD9PP38E%F4gn{m^!%OUP&>qiE^rQ~jBUFcJ@b zcV?5JifH?Wdmu2q_x>ht9q;fq-!FN(M@jeaaG@@bh5NJ$re)REP!HEvm+{1quIj2! zv#gpx#~Xn3CyU7813+<6i9rrI@gA$L(1-yb;_0H143;b`EL_cexTXKgP$&gw8N2|u z^flnq!|8YIY8ll_?N+<6dLl?B%!ARlt!z$>O-QK4IkkBYB)k=0G`!eYU)KmZe!inT z2Wl_a>N%4F!y_PvH%n*3X#}axp@#Q9CP&D9biNX{w!Cl8jwV3yr_5d<#B68Da;BqZ z(hAaRP;Hwx%*;4|sV*vF1e~AKefT_o_4khDkE0nZ-}Qt>V}z;J;u2)2cp-E{BC?Rg z=?7w1kF9dcZ)Mkl$iU=v~dDG-?qZsKWvxJ-x1KjA*R1NHUr-#r02qhWysxo5>8?Dy`TR_aR(-*^&BCHSLC~ z;AwL>_{lSmskA)WE)L6lvIp=*8lST8A03= zMEhCIJE&O&PJDg%bios>3lW*qDAmhHc9G=mbCeHrL>W7S5=Yh#>%7!m5jwBT5C_np zDvaZ;!|9os@PAV2PK59KUzw+6kckMJb`vr1oj4X+C@8rWCfzdrvHgxok9ST}X2qu0 zdGk3Yd34#ER?_hS2ZE;`(!+Kb}f zG8L8&FbnF)3CFeGlE%Wc!tpzuhC^P3+cira#!-6}SKCtX#g@zwb3{EN@$@tztLaBs z=lRa;e+4K&9m^xo-`mCbQ}S;A84~y%%OWqT@b3ct}2cW53|b4V*m%$4Du;wVtcVgfRd6DD7(1r`zrVEI6&W>@$Ujm|5u{( z|C4&1|96$o3gFn=xloDc5cG|V(7k)t2ZKNV=N(^|a|a|QCRW|NrcVC=)D!@Tj=xnQ z|1_zh0v+A|D|~6>LI(kv_J3NAtV)c^e_zD^|9y#5XH=)eCWtkyVW5dMw-(5rC}}DUi{KGCTx+n8Hk17N z@c$_?s+K7loPs=X4;rE>XeYdyLf%_KJLg~hyEZRk$+U|C((Aob%Bq`%-BKvO-)8oMZl{o#sbmo71{c`=~e*?v`l<4}Wod_p) z1pCb1dXWqaozK2NY3OQw{!vP*vkfn9&JZF^HM_S3GNRyN@Pr#z9C+9u9XIbNCTKtygOQdoZ=GzJRGiij-zms@p^F?FFnrc<8Q|cC%)5B&C|}eP9fcQGd&M zA+y8n-Sdw>r)QbrVyCCUe%-jSr>Jkvh1hZ1c{&e|4kcr+R)g+hEHi+sp*ly!i0X+D&@(8WorTBL@m^2hS9u?k)Uj_ zuUgmTTc^iG64ApoK?bR1Q>G$Y$g7KT0rtek;##+T;?on?%7U@=xK8gF(^pF!rgtmt~OM7@~@Iq1i zyTiM==KG(SQC0J!e02Au)3+q&COYMsts&bx9#$7!*{s+rh&t-}!+W^6&y?rEjCc^& zJFz)EkU*4BsMbFzUa2QMC9VX#m8Fo|8`+8@*WyS}kKP8ue2o5~#bTSUjjf*_ z{c%RxkI`j=5S+jk=1ErN*IHZtIm&qDd8hVR7}w2nyynczWR_Nf$Nu1zF-C)&iL%rI z?w+c;>SwL?eU&Dd4_E|i3tx&=%680UBhO(#eq&vKn4X)rrsEFv4(&-3Lj(g&9-Hwb z_I1+*#A)UqbCQ#O_Mm&?naFtAV!@PNAokCRFgfrP)?R$!QPo$%$WFygoLT%V2L&4D z|C6lP7KpcXUNQ0AM}nfq(;AWoV?2DzUT=7^MAYEOYWe50d2JiC#|?wh-+0$NT;tF^ zDPMPv@-RT3cpx9nDErwUKubE`UKGUr!NQHJ230e>Lo7d4yLec+WF~vA)p7K>sr^9o z0CY`z7QE0?O65``d$WVSlS7nKb+rvf*>Bm<+YB69S+U2f8@&I|9GcFV%PF9VhJ(vj zs5aaBbqp50!jM*(>D;^ZHME}mjFjcf+ZiL@gq#U5Ng^c{qu4^8^xjPhHg2Za8a3Df z`b5y{Uvo-vGPF^A8W^(1lhWKO+|-RSB`#^SY86FMJR6(U4e zu;t8Lf{CibQop6=YH&-yYUy9op`5SF0pb;GOvTw7JLKl#iP|`Q#X1F+k~r)t%Z8np zHOVQ=#~oGFyhZp#(UBbvub%VvfqYE(e*#`L*c0lSc4!Nvm)IJ1ylist3ud6$h* z$MSlIs6&>~rHbAi@AgXRBXYhf^)=Sl@(i!qUsCE0_s4E(y=CCLA7>-`Pp{NZ+_tC= z4o5^54ez_Im~i!nV!TP){sozwY^Pb|F2!hC#Z|4m%SL^E&>RgWERllsZi$cjmWFa1@jnt|@kU)`884B}GdxN=pQh3povrJs^wbZD8h!K6vK(hmGYbeb<#ChUf=4ROcb}p7EVx)U z)h^vforv~j7n_@;$;Tp`0RRw4>Rxb3bKM@#l?CdmsiygYZfd#h12J z{tM#OT1E7fq;5s@4}v=IJVlNu(w%Mq z5|Y38Jx>r@dQgI9Tfya0P}MYM1MOki0KWcx!+#oYgj!-z0O-$Emk%z)Nnc#t716HU zT(N~?2FZqNQm#FNv@EY@{5xwWuaq50asEi)#cq@y^D!^Zo&?MMYj4EKmm4_%Dnq_^ zvOa3NjenNM6sbG#Vbm|(h~p=6bjuOJSs}lG80;%oionKxYh^^d65mO(GxY=BB%DXB z(7R_azu!Vjc^w5ri#IoTgYYRipamDhh9h1-E*tslQgL)5486BM4w=!U>;ZK?Ej@H$ zwl|y}xmORNK&tE>bqPGf+Lk1ROcV%x*nNU!AC`j#J@LG$m!iJ+BAj@1!!<9_VhQed z;mB-KW2N|!h9vNSkyRxotu5KVU*X!UvS^UV=Rhn`hdz1M?yiNP7=1ELS4!^?6VRlZ zqA0V9ic2Nmkp#u_-D>~f-xFl7?)t=gzXZM*ZU~WkeLE5sK{fp?jHD=BI&!`T%8Efy zW5M64Rqj1^Bu38f^!@uJ)3>88R<_V10(uVn1vWwLBS%;JUDR4@_{g%P8v9*}Kxx_O zxYD`jJ>-~Pcyw(|oA-sOY#sNjJVU{2A!&LQP-4m_cHdF9j}q{n!2Y@y>y9PylN#CG zIV5dcH|sBz9};BL*nNpQd(iFYDIoUqUs+4DRsTX)1MX9YZ=n-!b>&t8ZQMiJ@C{G+ zc%-DZ*n*K+6(jpHoRy&TnBkp3S0mn13{R|RExFTiw?LP11GBLeXTb*~qASC4eZ(=W zD^r%%`vybr0>`YQk~hrTfHs|Z8pa}{Ku~r3R`2F@D-Yk-qJ2SI?+f%t;I`j$8_)QM zK`i_vodRthk z8)UHK4hh_?X>F;w*z_C<>E+K|1Vfqp#aDRNc}C+=`(~qyXgTYTuv=YvPgFu-r*E*# zYwEm$*(12dmGP=L&)5XkI$b&5$7O*>+rn0>4`6K`c$f+)0Zq)aRjTGLPeUL+9rxLr zS;l=`=W{%fcWwHe3OC&i=ERN@Y?OlSfxU!>hxOCCNOS$Ro)q14*%N7jj1O~1k8u}{ z_?~SB|B=r4`1kDa{$=i6JA^*1m%%BYT58_Qy<)oeWY>S#wKRj|j>!KA#GD)zc`qML zf0VYN#&eXaN9}zftOu*kKsV-BaV<|<$J;#Fu557;6?DwYq|)Sp`FwB@L}a*yu1DZq zxhic(Qfv>+4$6)S_5_PJZPaWv-GhQp_sTfuT~p37TRwIDi9-HraZvC%*QWHaakTC! zz*&k7j6M&Db6O=JTbO@y%!wPbOZs~#Q<2{4)L?-*vs8w~?lL^m3KTam5?#xA*)8QS zh~!~WG#<^1Bp*4Wwd?5=mw)zq0_C&J^jNwT?E41`q@*Wk{Vh1U@?jSIlaD4Shb9DM z#}?$-J~2U19$w3{`v}tlEiFSNS$a}z0;^cwpX*g#x!DQfc@Ev-N^Qrj%Y7h*D8I@I zx^hGah&sm-Nik5 z#Dp+C*f{&O71nPD28wYXZm+IUM^dR>H_DbAc$FGhH+O7d$Cbk%;kx9j(PFxaE)X2! z1mxAn)4oGC;$K&HvbQ705lz9SpFQ99mh*&(eoc6D_?IvRX)zDBd(zucp^;OAR1|vO zUIV%zuQXVv@9JaRd(O6wS|Z%L^mOxO(2gNx+YJ8lW4m5kPg*5BbkuJ0S?ADV4DH0Y zMjsk>OqIS1?Df)LZ*Mmf4VibV7^eE}x!O-ye*WAA05P~#bjZ^RmjFeqGCw`*kTu)jKy{loBH%bvk+%BM8IJg^K7 zX}1^O?NedK^xVf2X4}-m37!x#XXH`3yL?X<*3# zT!0uHAZ?sT5qKqLz*hinG)wh5#0Bdz%7mj!8PP|g3|Gk5Bfkp^h~Dch>Vqc||9q`I z&>QtHN6|r`ztP#@q>EGMc}TCpn?~n1&Tval3a6M`!;Nn?Ct zX5dL`Juh?As@|KG#ovl9x!pC!%E1`+D#l(HPiRf>Kd=)WlS#)T_eU;0vNcYd5;g1| zE-j-$TG7u$MtIuG}gA&%#MZD2(yB6NTf^aRq z{3XXJIY3B-Z@97y3Tk?muAmO0^P*z{@A*hhGSA*q&MWYhi4gYtXm(&&axul#9I((; zi@qKTe&gF`YRf*#FR93M&`n!sOP~Hm1d21bYcVO7=-HP^`Q$4Y?F6LPT5R)Wa6KWj zvd)m&NPv;r4;7B0hlk|&Zjb!?QUqYDFg-CIP z-AvVGyO!DTYjkWHHt}hgHZZ{)_zq2CC|~!n*P!&Uyt4~0fBNLY7wCcZKGLRIsvSwM zVTFTBS9PF4kh}P42YI)Ym?Uze0F*o(U0iI9z)swDeAfC)iH;cPy{}59oo|;yZ8;pv z1^3Sy&%nhr4YhbjJg5W9`QD#QWP4&yQ+j9=r#9~1`jivRzhNX;Ixm}_nXkDp>8&!{ zF0&D({o)EGTY_WOF!JvqlTrbKA+flSzm9-+%Qy_aT@8H30ltes6WPqBJEkGt zG(194IMOSkZ2QoHGQ*QTx~17qBURdPoWK}%c-*8U2Qo9snfBf~;9MOz$o3*R|LBrOc8;iu!~EsctLScdK)9+>WX@Jo0#F zUz6<7@CZbMft&J;Tr_Dky#$Z-x0SD8b8Bb;zyTiDdX{6+=*hV*mj=hbg@2V%xx7a_ zTLxv6k42?mwtWA7aN&rm*rSL&j@oUrw}=ku-9FnVbzcM9r^uZ2^BbFt63w&Y_YKi+;*Zx2 zN5*BQf3rVusig{O52a5MP%!`Be^6400>R&%&s)z%Eh~QzY5?9=_`|4C@F~SAvXpCZ zxRXw&RwzB# zLhF_Fal6zHD~~d~?6~npO1+xH7-!3E_4d~Mkb&0DYk?zoXb5$Q$!8qFijgLwN=gFI zqOF*FQ+SCmrA^74`}W}zEjyDrQJx)oYn$tH%TIQ-@$aNfN4Er|JL8Wo=FP;R$~u1r z&f`wrVf31!Lv!r;?%5bnTvv&>h)!Yo1FIfBM(1hD!go!{9Z&&6f@&q~{Hanc$v2?AJ~XAF?@Z=l@5E z7iuVdosv9h*i(7pVlX=Qz5E;21T;Gw+(>!sv`Q2HyL7DYhgY{tnXSG> zuj~!xGPwheRpY7@DzmcOK&$mSkqNt_R#K;bT=&C5XYH+EC0K!;Y4#vxRR6E@W8OrF z2@=rG5*KgGdq}i$bL-(z>AWKrnCqdu5Z`tO8tlx)IZXJ-tzoX^C!$ z!s{SY;wwQ%#&TFymdjJxIL^LDk5HE8^9e*FuI%?c{BEeOqq^I)+DAJj#`8b zvkJm+_X{@(75FJZGC^YxkRSX=Ckh| z;q&^b%uG3hJ^lQuMCI3>aF5~EvVXIZ&!%`}At=^-Kkm@8LM`IX{xP^0t4 zM#dVI*_3N4`bM`&`dvnPrmfkQq@*;KPaHkv6NiOBiNA(&{GGfYEj0yr@Q8U`-`eF+ zv?A7rJCnJ$4&d3teVa}WaI5*&4jRjVw6nnon$&%L^@-^NB%*QSpwMzS6qmOzewpPyqdof(?g!DCn8tYNn1&*>io&TUGX zKxS!ZdG|+8*I;cnhOz`cFL($j&?7QbAv88<74)P$Gv?p*m)j*RXNeQP4N~A$tv7@u z+eMC>1>6{*L^KRPT&ifLq5I}%CK^|wvTjX*S(XAb6*&=SC!2IAarH5XPzs3Nz8}F8 zGW3`9b{xZ^sL~f7=mOCnb(DzWN_{8miisri1Qr=}vt1Sm^Ng6xaz6tRom=6`H@Lm3ps(e=PA`ot})I}ku zyFS>+z3IHVbRXJMwPZ3^v+HqkQF#^6XfBZrIsoUos3)pB$OV-a@xWFn){V$M-14nEaMHqej16#!Cevp0U)h@BDP=jf`9# zuc{r3t1RVO^#>5a$^On~MtF(pnfKCMGN%9(h|cARA%$z^VY**Aft-iu(K^vklQE@t zhWF+9xoL+Yksb2N7<+d@+^Y)Bsnu9r{224(>Z}PGqxWuXaMO^CgN%P%tA02(!s_~T z$1zgmW;vM=vd~h`^Eqj#)p+MjW{N5-WlAb*FyT=0XEL}Uxy6qN+8wi~W76?mVW^U5 z7c6q2+dlCy?ev8CelUAiUNtW^?Q|ZC%?%66oMz@n^`-SIy!7yF?n_@RXbC1 zAk8$i*N+dpqhQWks?w&`g}I3#Yk63O#lNhp+w$qC{^mi=&45svRLHCkxUH(`4;`hD z(52_%)&l!!6vo9F!YB-UsPL>$Hl+j*$U@1H0MMMCq2?I^px(9BXo&^|P zh#d2?(|<$u{9vLNu;(ljaS(Y{r$v)Cq>-fL|?~v_CC= zGxA40G|EBY-o$Q_n5@&;OmLfYaghJy;D70ZCK)cX?I!Ke} zA^BKf#%^3BggAt{o4}2nHk+GT8m}K)$D2F`Pk)p%TI|%4o|}Cu#A)fE+1?bacM;A1 zH9)dtKo5B_xQu@t)I?+wy}?QzYn1d#TQ!2>Bc%BLY^+-_Mr7-VsU!FVG>;1r&o=YQ z=+nm{4WD!SIgp2I3w>2CMHqT5v;{RSlpQQFotWZeF<)j#>yw1&-SXLmk}@hI0~qH( zK>Vc;I@>72TuAnt#CFbB}YspAM&s7Jhad@m|tX=sg_g)x9MhQAL*QXv-+PxlHX(Tb{Rdxf9T> z2AK-+*w)cq2dqzShF=9t-8iF+FIr$UCsTjHupZsIgPfQ2xTjw2Znc@8w2G2J?|7zP z{0JE?6`479b7&^FMPhh+PgsL;d7sGjX4R$#7}v9MOuKUqws-1yr&Sp3*@5{ut&Kkr zrLh6c29{=_%ZnX8u1|ap6c~}``pa5!opxMy-KnWx4_x6%Pu^09%NE6#x+2_XUUkko zo>>BKna^{WI0O7?>npE`JLwG9+|v9E9h?$%!?jLw4&IH<&$e?Zuit#U=%!~bRN|58 zzJD9xHy8WidJTCw9rm#1oI3aPBs{VUmKI>AVa#>3V%W<-}^6FLr zeMojmegG%}hmUl86y5dnc6ti?_23^mMD48mV+T!kyRoJ*hjRA)UiW=B4W)OT;E=Nj znZxVtCH8d6XV|Q_Hq1igP=e2axg8dQS>FZ{Z_l@l=c}Ce7Gn;`&a}LgBf8;U>CGyW2o8;PVD&t0 zvj*Ou0ZaZ5wDj#)?j*ly6^U{s{MRFO_J5(fNpoo7CNO_Bo{{e-ilaNI>tPG;VRHuuK7APO>id)P1Dp+HZy>%-Cok>_~p zA0Bab4c33kJ`%YU{lIb8oLqB~scYQCl%F6Y*u zJ-SAH_a)$NV2~`ce{gW_eP6fdQ5SUwEwA$seU<)3dYaxO*n{ofJ_Q@f6lBIT@O9wx zgjF==pAH*@zGaqd=d|l>M=xuJ0%@G7VZUCWc_maPc>G?H5UkqDprKM(vVkV&eVyZp z$lO%cL8d@CodCfyXmX4Ifs%LDpFJ6Z$@?8f_!p-iqhp}%7`l7e6KGcHGc@OYQZnOd z_t}r$RX->Km0R$BM0`NuX5Vvyv*QB;)q|=#_lpYoxl>{HDZTdAPjf8R&r2C`Y!K-^IcF}z)*Q>a?!3#rLa0kh9#L73Cvd5d?ca{)^Z2iM_}=bCIAA@Np^(JD;be*?aO2uWzmV`X zcY_nSRc^<&No&~ix`g#ob<@m~Vp)p|#(GYpyk{akht26Ref_A$c}JJZS>I=Um~6kc zL|-PQna8LoC#}M|iTlITL#{LT$@F+JYQi$cQiH|0iubiw|EBZlC16H!0{eee zDgRT|^X*dw2)mU1z44391-{L0KU#byP2aoXONH8Voz*g)TISM}E?7F>#(&={V%Ck0 z3w}9s?Q!V9C)%EbZ>8IUsI|~@DfPIWR&u`EHnMpOy~f&*1R2|OLa@5R?1Hrh^)V5& zm892#T7A);|F8mqMSU|lU1;X0&woIBQZK9&82i5%%!u01ntl%$YjALE%pwDkdZm5J zhG6?QanfL&p^+`k(-ozZI^9z)&A~b|_&2<^Q8EK$*^$X|3r=;j#=VBCESC$c!sD}J z5B!8;gho^BNV>k%y+K%_d~EyVuHWhRxGchJP%i9UByn@>-W2-_-H zLNM5^$#YR1r_wl%O(UD`q|^%j5htn1B|AwNYx+GJGXBCooi9oZzUN7-Dxh=)IB z(HAwzPnX)7(#&fAd9O`}mx|-7{a=6V`kft#uwoD#PeUtHM?i`@ITF>dhggb$^*}=I zuqj~tPDMLlf?zA5k$-G79K|SNskJ+$LU6yKRD5~;I(8XUG`G2Af@-Dd$Na74@~lwQ zhGyZ`WK;@m>(%eJs~qB=Zg1+^{opDDZ&IUN>av-{rwfz93`Q+U8N<&&z|0!P~9>n<2*SJNhlG^q%%^x5?Eh1yK zO9W?7zbYhxJ#W{DX>Y*=hRb}PL13VhP3p)=BfB)#Vb zF#Fkq{1T2lbvW;vhqdh8KPds|w4`MulUfP~Bq&BX>CjhMl!=-qliEC~@To}R9st>%`{84sag#d3UpNLX z-{dT?*?*?HA(?P`ADVi2ucX^LXNzcHSfXmIJ;d$vM9=?hgS~^5GWf&+9f5Y>ozL1G z7gIPQSbeNhO?@&Z-k3DC+GOP`fWXe8*U^)_N^!ETj&}eHp_xSB?7BORIYqL72ILM^ zU$70D47H+Sq*)#^_OJNu53C36dy!E=5@{oWr9z7GOZio$)RfE%Tqj9>HA7USaQnV? z4zru)79AjIPJLaVPI#5?&xr!++L|iCYze_pLaV5E^E62f#4*9!PpyF?#M}cz?d_Il z?ezv_%cwp4{jFjsy62j&P#80I{xExNu$yxffzLQ5Z&;vU=?<I<6I;g&r~A%%?UA3_q|@a1G7u!g^3yGw#}iKZL5a;-XhXn(Y$Xp|3S(&nVvs3p^zQ|q%cY+?zgxL8 z_q$08BtT_hi46g}3U7!g^_Hq9qhmr_FTLJ8Rz)NfP+td(co#(3j}bjX#{0wj7CM!H zpwIzp#UsB|+U{I^1KXbkCO%BRX~0OwsGcngS={vr$jO^KLS_}Lb?Qy;#DIwIXa{1* zV&<{VY{<%9o9d{$xRcXRy}>boR<@5}My2H|-n_xA>7JUC60I67g%b~x5lA+ADuium z61cWSOVe_K;7lmD>wF#vuc4fel$>`>Qyki(8sG95>c$K#?!uUd8|du3cRlwrkzu71 zR>sfJ&6J4~sziH}y0bO2;ZEE52m?>)77P_B#%)xwKNH#mo;q4`tV*x-@?@(vxcKYb zuBhiTY@f6P`l5mu+^jll%9cbTd;jpR`q=UM6B0PU2HIn+@p?Q+++Z?d>EU~T{|>oi zd(E1b8lkI8%m30ItwUlVdR$+Po6DCPvzr}Z1{+N&M*xTYi=wpUUd=;s%C`4x0;0s7 zi^+#bm+wJ;ABwJ8i#wFnif@yG*0*~pDjIUxY__0Ga(_*KFU^5-@1#K^LvNOQ?diJe zP~^NwjU6z9x{+}r`6u;&n7Cxr#F52u`u^8x(@yq+ES94nNU+N6qPL+VmHrf!PRW&d zO;DP#l4z}4OhOEF!02^Ihl4Y_ z$vuwGV-lt7^*G`xQ<4^P7@lMnTNmj#_RkIM^&S~=ve^j;9UJTB^X)zOeG3{|OZMUw z10g+~@i}1T^*jOH0dQ3lwPMX7Y0WlSOBO1$xNr|MX8|mFU|9k=3QErV1}(etIolqz zz-bK*j^NX_suO!dSx}fQ2KtsinFG)?y86lJmk!x-cBE9nnhKUO)n^PYARs`+FHK~< z>q>+@YT%kOm`JB(+XOY4;M+_f`B!hF=M}C6b z(sDk;5sGT!eR(Y@&r4OBM&IqAqBuM!$OAFR>X5h2g_PnonXQQJjrP6stpTL9Z5^1a zPD3G>9kFJaa}`Hqm79`$psY#WZ>NJK@60x1_8FsGy%V43K`;!_8WhBwGYwFf4Wx0% zMLqp?y?O3o)O6BdjT7cCF87aSEfJ2CgeaocFxaiZ$jR>Kr;|r}4G#-f z6p$kr`ZKDigRH3Rkk$Y$r$DZyW~#~h?Wbz&L%_1BEWt=?J8Xg}Nv^&WB?=w{`>-rl zxJ0R(k-y_X@R$X)l>@?QWX-<6Nia4|rm$d8y_6%mK}n@k7X9*pcfh9X z<9Mw2a*P&#PSfKNM@FP0<8{;FL@qDQ?fWeYy~jm)0a;Wf-4&G!BMf)1eu|%aETh`| zJmII%sidDsbKktT>Xh)>(e>n6UGq4@tjWV*>rWJCR|w@CiJ)~i=$1yZoKYX^-?|=k zvJ3QTt_7~BN@5krB-L{md{$%VQ1NCGIgAkD79(;aF?XR9gUj|U9J#L?a49_jiq-F% zBGLJ(;H|nGLF(}(R9yj}xzMvR)beT^xFuvONd=tQZUc4P6#pQ-IP$p~|^uPFx?weg~+ zjqhFSo_HTd=4|yPfczoqfnkfFDiJ$WTK5ZFP3Lz`{nmHfM0fc>5&!HiXeP`wdeTBQ z90)W~-S}KGZ&jR!TqL_p#qM~-CAmlVJu%Qo%!~kW`m=b0(}|9G?O#j}Sd1_#3lU&O zKAEAin2$XsI)5f=3T7>x0|)9qmsT=`kzHtYQ1*7LPJ`CLavXFf_- zy4V64z>7-Qz=nZX<^sKb+=2MrgNuGIlm1{XM-31uA7$GDC=@zPT4;S{_*mHz!hUJY zkF;ggcG3{Z`H;;C42J$BCX{Of>nq6ae8Zj4Cw9efACe&&PftM)+`*dThmqi8f`<)Y zvQMRe5fB3vTARs%fX2=3o=62PRcV4eKY{C8a5mya3}u+v{*(*H ztyf9cHQa|4FZiXK`$c2%^elmnxFZ%WU;lHTySVk#-L>p53E%E|jj4c*Y^g%OGc@g( z5-Js84*Pa!-{wZLIxQpqraPDs`tGEZ^3x*W*U;e8uWV!1t9|{`4HtJLtKGfk_9+<{@?EHBN6wb^P3?H@smxqhVcx z@+0ANc!R>(CEms8<_m|gEzcU~ZI4m3bVyLs4h=BS655)Q4-88)k8Xc8^6P^B_+fjL z$(y`Uh5m_+1J3*7oEg&x(m$Jk7(6ffy-=g)*32=Vaz}b!lYeG%p|^g@|}Jl5cN6poj-9 z+er)lMIG9C&eTb7qvt!k2mC@=8QMsA!#F&NX&>nj8N}(rlh%!Lvl+!(<6)HY%c5?2 znUk$u16`LnqgtUN+lkw37R>C^B|XsG6Z@N`e(hoLHXB%L@qQ{1}7I#FE zm+S8Optm-WD^D$5mScw6=&v0Axt~Q21I8@1Zyi)xr zU@^45+h^&_YRzen{{BP`iS#=;JSA@D4(pqgiqrb1uy`;m(=!1EDps|S%S)PW^ycp+*}=N)`XcsGpcw-Fxiu#xh6Y(r-O`*@hP#~3 zUenKe21deG#8LRc2s}LTjtTJRLTb(0N#%72nvL`QF~L76NLFQkgh4SfJqwZV^t5bu z&I!aHkL753p=wzyh1MW)Z*(Pj5ztw=;kteqv~A3~;V7rz`<;tYgJXyTrxEwfNO?&< zV^arWWs_<{->!pQe~lDg_I^p)U0#8Jf;-Thq7@n7`C+%u~mQJ`)^D4i1J%b{&bbPLJ zltYvA(+E%`+OU`{;0#=V0@^Q%Z%@31U_oL~C$Ey~gHvmmn>g5g-Qi6&`O ztlLFO(+JDRcWCgGw^PqAK?FKD#M>k+SxOdA*%lo!$vidy?DlVbYZ$Kn5fXhn{CN5# zv#5GOOZ?~+zy<6G$e@&Bs2Pp8P7vld;f&mK6)!I!7E~p-uK;G{ty?e~+o^qXm%I;} zA_beRUh3-=+=RijVuj4T@r<)}l@8TAQjNG*^>!joDXdos6)?=V1G+ndKiP}zfOGVBRDdv1{_{agL%o&Pr#IR8Cr0Ae=}}0Yzt`t8KX*&yy{a28dR`P zmKhYR|iLZ^xA4eN~@gBrPY$f!Qq{h>+ zC~o|LnHwFboKoyBS>#|D9%U?yIZkJq0MB5;Dy2a49XCEd1s877e8g;b>F3abfBU42 zLU8M<65WMUhK>ESA(LeNpUN}*?gb}?>-{nz!@#N5F_$lJf+)R|`eJgsx%L_i-K2Z` z8U%6Xhy=^?P+huF0e3w}F1+y>ZU8Vh*W~BlCH|yD$S#iGP{rnpV~FC^p|DJuQgARb z!?~!5??X|Vj?~F#6LhPjzhYD+I*ts+>)U=`!U9BxNZOGWp6*Yln=!x-9e?-P*DX5> zkgW3)&rM&8<6G$EiYG*?DiDxwlBrM-kke7+g-c;T)7RaQONlYzW;x8V0}-auujw-i zA;ir$BiRixNGz8SQ3mR+ATXxGgk=hqRe}VNRMYY%nc&kXL zly*{ChGR2Jdbh71msKnlB$WY{vXgQiwO{BYK(GIxY<|Yr$&XH^otk|xy9-x^1)xLM z;~uPs$7O(#L+A)q!U%O6Pw}g2X}=L)#N>kD_EZiIFzcPy+tbcxmsv(6+7IvRW`+yM zKH8v2W)zOJWn~Z$2;z!Jy5!N+Xq<4zak>Wr&!&+`ZJOt@@t5ToVE}(|jkR*ODw&`Y+$WT%J!mNMnUf-6^ZR z_RTk10d(m-T^(tl8R(ft){se_YLvR)3?azG(1{Bj+oJ3cd8olzzVY<@rexnk+`k~x zWLF5jAMe{X30hRyiCEv_7EdJjd;+=#jBfK!S%i4$O7ACeMtZEC446^0;>5|N+ZRo0 z&nm29z#*@`Onsh4_Knt7%IkyWhX%g!Q-guhm{(KtzHaz!5d@juwg3RIIh|282f1?p z_`7Rbwq!E=><9oaLXao7<$TLN4tryYBSmOBO4uy&RZj@=t$LrftNeRdJUt;8vIdc_ z#wUsSTbA=JxgIe{HnouUOFf&btaI&AG9{bi)sCJWm_GtHsylhfEA!jDz{vtw$f3E; z%6W_rli2Q$KM{1g5P=^scD9Z|EAJXEwmTM0pYjD)DvU>3$gudW&W89BM6b^N!29EZ zL}n@tev?eC@t*m5Y4Oz1RSx-2aC-8`vEeyzQ~iI?VO>AY zG>(6oge?25|0@|XgvMAePOaH8&B82ns-wj+fsw9MWy!xMUCfx$4+2j(!T5~l=g^^r zabgNS+Pq#NDCsQufBXw|cQ60v%fPD$Z6%_OHJNsw5I<7Lmj4bXDZ};y0y?^X+?`3$ zqttPLxB0Ub6Gnf%net!%Aj_5v02@zX3^Z!b`Fl$2zPT;K53-@s`9G{J6VfJ4cHy?iVdD&Q)IBl*uze?Ci zcP4gLXf=d^GyP$owo<^~hdyAI9#9e=UJ zedH>=0zDdVxd9^lLNZ5uf7^be_96BrgAOW<$S?gY9y^?Inr`Z?@i)xZiP zWZX_1oy*0JH%`>w>Vk3ffDdem9S0@dzta_G^ET{q@}|Su{&FdSnnfkD`}jR89)Fe^ z7RHHqW3mOWuc$>dM=i*bha&0U@28RpRm^|!(|{p_Z3pJU;iE}{YQgrD1+o(ini+6r z@%y42cyo^g(16foSJTM;#qq6{P1`01ARCCu9n6$}Zgx6}_S!YkhlL(I^RJrVux#V zI_J=}&yKj!^>yZB{{gTJq5~CFXvZ6A!~KPi%>3~jyw^UuoHKxR`nZ)=wFCEXcsF?L zTUYBs0SisfQRAoJxt)zmIx@9Zw4hH;Cjw*scx&^2u}IZ?K10}_BXgt+XkQ6)6Z=s% zUbJ;ei921et!P*LEDw1%nbo^;wv*Z@+fKH3gELcoUn)l274@1e|VBE-DBZr=a!S^=OA)wfwvjr-mj42a$&MJ5f%;i9OhYH zf*RR$#NTVX%Y&Pxr$>*s_bh{6(SI5!<6;=qwe>{a<(D8Asz>VX=&7pXY^_n&wBnPM zMcu9`I=Ga;8(1w`3I3JC+s7bA?m7jK0o0p(7y%OnP;Ycqa6GGaC>X0;-xuc}#jx2e3kA7m{m@FrYB^0$ z7~QCX#=r8l`smH4Q6S?7D2R&EZU_Tj9m89<7M&UCjtwX$guM00Px!yS4lymtn4|o> zL({1!9%=TZ4ZX|PZq^6QNpAWQqwA><)E3YumU74TN3D0Pr@xpc5{pxsp-C1#wg40@ z;mk<2|4&8`rk#qo7(WE%jpp3HL-nP9dvW%?WCt$2(SGfSJMUo~Y3LX!&0*@c{wc_D zz>7C|$3y|BgJkf0d0)~r*drR0-n<0`^)7hzxUz;?&(a7{^Dz5t9_POC(DZEE=>aq# zLW6|$il4(Ift$JahP zVtpYg%cu;_Kx1mk>Ft8Lh2_9{QkR~4&9^SpYa+tl_52N{i^E)kNwle zmLa|1l&HP(?JZz``y+<>(`-~56Q7iHnjBg_!44&-c_4F_Vxn;z+kTT`?yMC7-y8ff(aQd5jz29}~&rS0?N}!N>zyeGc5t48rT>M&u4| z>C1Opw}yJYVL6{RW_s9O0d|Uo#e`LO9A6=@K@nM1Cda<} z#s==@6`}GeGv&raeTofn8|Fzgl)dA#_xkFUr+<|_^+Qo5b*|T3BBhB5)rG;ZAX#N; z-o2D?=pkER-s%4M-x>XF$0mAOJ1)bda&!-T0-6Y0$Ddyv8~4np()9 z@&&ogJlv)KDtB{kF^=9&qO$7UHk^Lc_{||U?Bow7R~@QyIn!vQCV1oU4!j%Abm4bH zr6>T`>h}JkVd>vIIx$)pUXUD-T zu1t-#Nn<{-o=@=YT9&vw=AV71u6m%G+K47{xB){{$4V7F&bQdw@Kq@etK|LM8KW)0 zCA^EkUc>9#!mM$Zf3{)OP6jIEztj)k-tDi2UD^OkCO#hhV3J@M0^`TkEBvSBrCwe4*#1+R>F=TC4r@ersQ}l!9`L~QSvPXzy|M=owNDTt7Ys~=8 zCk72~u>?@60L75ZnDjv+@-CV8?icAa_MRknltqN$hxVuEiiqsLyqOp*I%11Uf6Y*;h8+tDSszF;HxV3cuUC_cw_JhXC-3n z^H7w;H`#8pX;-<1n|??pN8_OWB5Nkc*%fcxC;NoO@q{LG)!Oy?C{ z>4gcg03&K9xL>P_`+|0g&Eo{6NsdlHgtd6vrOc3L=a^~hE%DWq`MRv0_tXAv)fdkH z9wz49nZBiYVReN(!<#;HYDBQBk&W_Z?G^hAg=e_NlC{S#sheo zSz zTs#Sh0F6T6VHLw8BUNNqR*B|+YM?5guh|EaBF8_Vk-T~B4vGg%#vYW3UhQ69M4Ylj zeJ!4M`1rOTw5B#2VFJgJlgU_vUTe)f0SW~xW0{yZJyO?y*HPf>+g9Jnk#6)=A?0(Q zu~1$YIXHXEN@RaD(m+jF*vLV<6TxxUz{SA9^F>$=$a|~&c3j+1vHM>{1|+>qWb**} zrfvCn(Fq(#m8;N!&PpexG4fl~FqGX2_Z|qyt3@2DgiZ4*TQNVd)0f;-tzvfZ0S$$} zC1%~3`7*les}$9aHa%vaxdZ3%FbTjp2q4+c6*{56-W$WbIXtmp zM~I}GHXg;r{hodKWF`{TJ+TIGMeHk@G>fi2i#G79z7=zEL)g*-JpcJ4xNy!8CpQSH zaotXAtx}JcQjkq)nxkT*GS8@+Ej{)xg$y`IaIT%Va`;zWHz(NJ!l=W$i3PWW1Upz( zI(Gw)gAq;x(L#|I-^+@B8`9+YljR+j3i;YEnT2}CNSKr2(6q3xozEU_7D z$l|TeK+waz)oCk`W%9BJ zIR2aHf!z{Q@iEt*6NS-m**tN|GpR!Y>@AlO!XSGIehZQVbPVtAe@Et4)(^{n0(53r zaBlRpBR=GD2+jC^7}u7MB>$ZQSu}gm*wWmB!r=(STQI{r1HQ~(E+MYxUJa9AMnIaE zz990vHx0M0F-h%LMy|dp;Qmh`n#EmKG*&gF?a#ufZ&w%iKt zBSeVMZ!x_q)s~)1IR2;a_HkEgq-22bHg0$kz=&zbfI(i@CJU~hW!F@ulitdy&RZ$$ ze;R|l`s)RI2i)7HA!yTQxp|{UqVRIJqOQoa5tb-C*mM~r%JC?quvsX3pZfIWKYtkb zV9nx>7LE>trW$N5|N6klb&8%};{J6cfjU5r^pDy7w-a&|Blv+1^uNV)_W$8WWOu-{ z>?f2T_SwId{{KalW&e15A3cV^^x~TbWmfgrQu1&=9zp(u##gZ{d;R{DBVBns7yA0# zLxib#)`eiPv=!%aulpTxBwPzy~CfC78K0Qsdq1B64O?#@*5hLQD`KAyHnou zZJdbkM%*tNkWyfy?*DyQQ*ro?t%D>Eu8w_4Bk2x>BO%xvc(kR)`i`)}Z;H zXQER%MC91+yqe8g(C(>k7P_vqhZD%Chahx=i%+xZ-SKrwF*hf;bZd)vXf0m7dTGBe zSKlM}=C$XkgVP}x#!+zvRgsPag?6Zc{`beCr5ftWy{3N8$mG$ib3Fn!A^J4`6!mFg zsqixojOuQ%YE`OSa`hd?%NL878B%aQHKC{@-$UBB&^!Phg5zs&aM2)~~@*uyg>WJu6+YG!!fB@1DCRo8YiGniAPPMG}7xr6gBPk6095zlIev z2hOKcu_%cF$F`lesaZVFM14|2>&Pq*M9)-@FQF{*Iz2-po%c$Wc}i+REwcVVsD>fs zHa5?pnb}sqn7k}M1vOIx6u(h2xDd?ZT;5TCxy$S* zMi-t<+aG%yFKiD|40Ubm6tE6ga@2uJFp-c`qy%AF9p|q{+G~MlTCQ9S6ujvmSg!?; z^(=#KzE-;2S&%Qu_;6lVY(G*UTSnQGsH?$dNEvBPp`D!;0>Mzrc9ZQ5o{kU64~B{U zk$5;0F<;fN@O*vF4bx0eyHmvZ$8d~dHp%6-3HO9Jf3B62+0bfeqZqY_?<5VbbfZ$aBnkk1Z~Btev7@+pnBK_ zH3oeZ=1U0sIh2H%@qyhuce$1THb=j5VYxJO5eJ1;)UnIpeqJ_i2ld8-sQATSKF3eC zTAp7F1k$LW-k$W$J6?XD{}3#N($ZJEM-*6tNlS)WZPxc^Zlmx{J6UV?#1meQ(t8Ni_g7oA7mbf!4sT3f;Ooljhe3cVyyZY_hv0H|}@;x%P(Y~BO&h0uFx`ucmI zv7JuG8L#4bUU{Cx!EM`NuUFzleFl7FZhQ9p-S0HpkS*;rK1}n>fltx1Pheuo!{UDA zH&NXViWV$V+rk>Awc5Ffs5Ox4QTM}ArN!!#=KF>9g|9$8h}1WW%cYZ+3;lC7-=B5b zsZ5lh{j6sVYNjGCi|F|!^rwEP=Cz+X2gU@&HDRw<>o4$?Z?v{57TiCuhT1^Li!jhuhYN<8dF7Z&g?cpq2IyhN~9qd}mHjQ@B)qCP68Stede+JIR zTIL^?gWBv_PT2(4912)0b1S4)8MH~IavyY6y`F561%w1>^6GZbxJuGWa=0R=KD+5O zi+1h)4WTH1HFSmz1s*{F;p|^Jdb$-2dN}xc&K9ns2=7k!V=B-<*~0XAYBpGoMwI@F zo_cHsV$D$ubooRw?bfa#Z%l{1oQKTFvM;+(i*IYQK?9P*?7pmPIq36c_q3mN3EAlW zw=vLk8nCRj>a)kV=CUc*vO}oURM20;@`JvRCZURR(|rNe71uG9HxvU{{Z-;(i%R}& zuAN8CEEF2l>RE|X={)$uYtjJk!Yd<&MY)tuLS7nw|vh-AO;^ zsrE*F654?ViU(D_Uc>K{!5+v!cEp-fHPTgain+51RCGq&8SK_13s^EjRdM2EDQmFT zLpvfXt5KLsWPz&Qhs|cLz+mkBWwEp2j4-Z6Rl>*RI7S17WscDN^?5oU>|EF9h+t5k zf$Nv5_kEI!%%$Jo9pmX(N+zr}|;jR+{Crm%G*JGG6K9+o|WyJ&Bm6w8mFYyj6U~{Ww3} z{(h9v2z3&ym)0gIFUL|I;w=yW*uS#Dn<3fEkK4`+({OIxs zS zm*WpR?V8GToy*}h9OhmY?Aizd@j4DGOr0wk9z?lG)HMiP$?@eP>XcL(GS|6PFU)d$ zxd?93q&i8Bmh)5K68(vuoQdKs<$EL{5U$oI0Bfd_W|cI&Mp{rzM^VIaSn7Xbbvb2a zpj;^Us32hyGCyPeYTr?o5ad{Mf#=y=>sr)DWCWp%q7Z)-HXd)H_x7Zv6gfj#w#G<= zk24IP(|KN@CugXj?dp#i8@9P)XU-=I{9}!Gzy!r+1kW!jy)>rug1Uj4Iaxn0#SNPo z))#4$X#S>xW-@3i&*#i=WpAo45Taf-mM3|~7vrdbxW2k@gHR;c2lJIt5T`ou7p# zXsm|**85~ApqGYKB-O*Y^)yw75CU^y-~dK-Gh>55RH3D4t#y zelEP0buC4Gw9B);RpO)H#%v!}1eMtu&DCQ|EEB>+*j_a$cD}DSiq>+4&rjPYI9eik z&jKR7KrRL7u7WPxo|#xV_lOaN{yBvYe4TzP4R`3b{l|L;8^%TlC7QJ-)_S$$_Zu$VKd+ zw55!7Os9@YlW0W(&5>)gy8-zRHe>A%CNa4a;oRA1kU1^#=`)38cnWR1EW>l8WhTTS zJ%4j`5{3Z1F+`c~j=(8^Tr?lE*4`c0pTH#p;Rs$X$*F3@OYXjLgvHh~g2T&k$x{|1 zb12d;WUPYwloCt6(w!yWERU*1JWB$B7j%Dr=V8sX&-J#4%<5)<#|1hQX9CjdeO&yd zr5(AGIv9@ypw;ThYx*V;Xz4~-m7VjA>9d=Qd+>|AoX9kTwhfFeX)u5A6yXk{ns4Es zuG)_n82M8_Pu>)b;I}&pDjy2td9bK)51fJtk*J_p^X6Wq>~8y^{(fi!XX_I_>x7}h z3=Z@4og7xhP48WZoGk3n7u?%VDt?&3stS%{&S)pOrlgJc!n;i zG7p&>0uNaO8-o2>DRB3VqjIc0IUu_LlXE5|nR)WchjOnZX0f&A0!w;eqxN+8O+1zr z48f(CeH`jl6ZKT0%YMk?@}U-W$Lq8Ux;7Ft!w244v*XM?Bh0y`WHs2+3}`avW>0!% zK|^cThtRxCk69EI6*;0(Snso4n=u7&$$pXr3Va|WMVt)z9##18n%_*0I8cpbhE0~ z#aZzkuO40Poykk>nGQbnfg@7^a4>_V!4Y!qbQnICVZqVbU=daM9C!ItyCKAZdOb}& zpO!a1^&K;IU(MG`=W;toUP<7}gg}lOYlMLdtA>GTp-RgfU$~h#JC9E{kYoW??7hsp z8&!U_n12s`h@K2cp(M_e`QC_;RhcgB%%E7Rz_C!xPCQ?or$?E|N8^~?C{o?Vvg+DK zAw%n#BQF7#Fm+1`0=v~xad_PM9jKcnECO=#MSezws~8TKO_z1o`YA{t#&AJN1TFjgn~-6Z>Fq2 zxN6NPh!>OiGz=grt=Rj;n*AeH6wP5`Q(&-E`$mB88Kb(cJYq|!Oq3jVZ6(m1fp+jD zagLbDYQ*ZR9#kOEk+(Xy&o$0s>cj~$!3Xq>uspga9#%J$E>HX_uLeE9KP4=p*xa$R z&2q?QTmTs>A(Muz3~Lrsf{CDnjcKQzEp+FBEKI-)K0}n3=YSK+6zOXR7ivNNYCd<( zucU(&+Ex2&4~&eG>kFbh_Q4DkUFV}7&l{ULW+3%9fws}#96vY$`w#`2`|l)=WNU$! zKRpv&dEMB(2CKs0^KOO&ujGsF()01GkVf#MleiyhL1q8OX=I&rVa>eI-!bu#4}doT zFwA=XIg$M(Sm*`{G2Tb$phj^;>Kfxo0Aw9P+`mI3MET;_3N=Ab87skPsE;xjvac)0 z1WVp>l6#V14UzXF?C1*fZTTs%y-5Sa`r5o2H1o{Ct>0?~HA)7mJHq?hXhk-w79}p9 zyeN=&FWzPRE>1X`COTpRCjB%8_+E+o2Cecr~*-%${pwT_zGej zHAnozq~T&Fr@rPTHx<>l=BdL0bi_23V7V}W+!bgn%WE{G{z35S8HTho+wVfN0N4_< z;i0wzrEYrWMPNXb!3bdOJPMamo8bKjw+jn(>?D5(A`Ex*q9hk$I~YTrQacoP+?nU5 zz9iy(Z8o!5Bc}xOsX9Am(Y{()43?c}V@C4*8)D1j-AN^iw++ zcDg^qJ~2Akx^Ef&dnhiX_7lFV3))8f5xovYB5Gt;we;s0#vCYDAz?7NLb%n0Q?U*q zxUR5x6NF|NFad8nJtoJ5cxVvjSI1x9zEK_b;E75NZPP_mHE>jbU#sJBUVJzK8$CqM zxa~0Za~^X3Tg6{2#-vX~)Ho37BbO%O46OQedT@cr8KFPJKY&?WcQc;sB%cn%5z@A2 z_Vk_IRZ*ru_UB`*?&IXpc|XjJ^!80vZLoCj+4b_hef=LK!yrOU3#W!Cj9d_X#c47u zI+-4%)+WeTK_og!U*63eU(HQ@sjy*s615N2%BvGssU<@C#*HtQsu3?c2_0q0OnoCED0`!e7VWEMe7}4m`O<4Hra&q8;F3+F~P$sJvLI6Hx3$jJ~#N}M%1)B zg={8XER4B=t$gY9Af}~z>Het~E18^C|DCXN!rQ(m(9eKLPk*Lh6=P-yF$HB*l75*DMV2yOpB#F6 z%XrUj;68Wv;q5C9qnw2ruM)33w2v$xkv1NoK323o8;EV54w!gT=*{*VcV4@xPl^1{ z$cxO(s3s>@Xi9uaK`#_UVr#rpcV}6PNuT~vblll;F%)-NsdEZr&JAZDao|spQK9?7 zYo$G9w@TOc!;N_Le6-f0-gV=$PXaK#;0Uz;A3NKsj&uVHzw*vr>NC}2`8lkksxYui zC`k;ThaKo_@p7{{etlqxt3hys3nS5({o#MMgXfTDvBfs0_Z4=4IqZkPaQm(@X-4I) z99fMT=W{yO9J1g~B^`yz=At}=G~PEf{O(}vHhn%}FDN#UYs|B$O`%%+!mg}$j9U^> zJ?l&gV7{P;)%*pQg^xIaIaxWSMnvNbER~8mEEnvyooaJdl8%FE`!AgN@t}4mV&xw@ z3U_l%$@d5nLMWvb&xSD+RS#tVVAS?|7w_F^PkX*Nbe+nqV2Yo|^F4v6$(Qy|!c$Wo z3k~P^Vol%pZi!7d-BEU49tZhn*1bhX#zhgHwkCvTLMZ}`1Q^|7^mE~L!dc}mejE&& zV7tkvcWB1y{2Gk`XC^|6z9{dil(y!?h$HS;y|EVT?&94^3;;lNDSf@qq zs>WJpY9BjzFMlE|0@QytrznflwjmJFBoqD#Y|`Lzg{VjALCzRl*WHoBvDpoq#aWUS zi$#7dkj##l%&M7-!IfH|9e^gEV!fz6HEO*3adr~zfc?vc(ts$Vl5B(kod>j;UvgHI zOn{ZRc1@noM{XP%;qgEdWPjEEtyjxI+xJ1*({@)LFHupcZ5_R`C+lp5U|z-Wz9e<2 z{pJ^73c}b)vX!neP5orW)NABAx0x!Y&fVNJH8zOeNr6)OgogDEzsU5glQQy`pd@K>MS~N9p;0pOh(jzyV8Z06{`<6xNO7kI?3w?McJtlPL;FBgSIRoO{#U~X0^Y#sfYo#?R9K8lP+wT+`#jp24{ z*^*9kws6YA0-E1i^p3e&9Qz(acXu{>*&=u7&7Sn`(ayDCXJ_j)Szyi;uZN2}ih-`P zc!-Z5TzB2{mtT#RKHSw<#9mjgb1n)h%6}0rH6nUgIp=Y1HuXcLZ@t3dYF1oe0_q03 z3-NY7q;_FU0m`SJjj}IG8}nCJlN5g1(97HdC`eG@EuazxCL4&FFg0ddlA3-$Rq;>GGWBTj)x);^5P zO7O4l>Es=_%B8e@uYUMW2+hQu9PI6eLTh)gUAP><1eA#*g$B`3bYUtFOV?3HL9WG{ zd0nSeq7>{Gu!=l_9!s5%hUdv!!Na?Or#@9WtgWhgdJyT$MVxQ52hl6XdZl>hcD`1p z_RovG&#TgfV_v$5wCC}E5m?FqAjEY6l%QAb3bIe?guRO%r z4>^(b@o70hd$=X=ZATq=^m`n?8b`&r-{B(=CH_>_CJe{h$yc$*GQM{a9zMWJ~5=&O8OD#6E$imL_n2zSG2)4;I zq=8KjC9L5dy_zSTjP@3iL@Yx?e@?Z;w`=F{LrS`xRA;NO>WiN45KKXelD@bi=^8yP zT6T_~#7(5^I8zNJpAxo(KLCYjm%7tQmVDvRB9W9LjP^@XiqwbD+D#=}Jlvd56E6 zd*T17;q4P8IOR}E4rN>-Q>SOA9c^oSPZ)9nE*YG!VC(YM#P-f35X8=RP2`2*&1MiO$1j9)d3}X@IdZ}zeXT*sj zOp4JZmam_&J}xBqz9i&=0-CL({`T75pz-fhex7^s(^jVfNsSS3;PeD^LRP|Kzk+7% zEoWk&o|#U6z)GfKVyfy z>nB4ac#HCumWM!LG%^zpA6=34vFF%&udJ?drogs%bhYg0*uew>nXh{Md2QD`XI%et z)!d4_l-MdFA_5ULpOJtDmjwmw<(5(e_lVDPDlGE04$j2x^5W8#UhCL>rr<8;#m1Fy zyZ*9QwnZHN+BI?A>A9&N49kpYZ_r|51EV(;f41Mm?=5#ud#?uk9p*d!sy{lNg@vpV z3eQ2|A!t*?&YDkaBdm!{7VuRTJ0`ERe|T@`=VjL?;#!KuNPyeXM5BGOlu0NX$z&e^QruM#Ehi=Zyi z7d3f{T9m?jU3T3^u);9aGTB~rs%qk2FQ^4sf`XYw^BvETw(9Jx1V5`dnw=^V4ulMU3N5X*zWLHDVZBBSy_Wc?_3V-|i^%7Y zDtpbX>Eaf>&;Fa=eh=sM+U7=~hAKeosq>>B5T+CRiHw8e%RWj03v1z0W7bLg1BLYu zE|QL4M-dTC=}l_SF0!W1GtD2VPQbArXLL;ld~aklUvobp`a%+f56)jjU*~w{r78!V z3O_WO|g(NMsy&qd-~_{-kEbIb8+s{&1tj9)55ESYq&=l z7v%Q!v4eC{tY5VZCB@X?kBSNAZ9|*Y`Vtf5{bJz!)rWZ#PsD?#bMjPyg=ys7raZv# zoxaqEP|AOimrx?q$Or=jmtp1I`OHfxz4X`N{U3W!RS0~7Cye^nwhj6LHi<3;!aRxi z{^V)(hfc=kVs8fWQ_>zLn+f_e_p0&r9^GcJMR=aEZWJ-Nn9ByCB<~sq4)3Suu2M-Y z?_4Qw!an2NME6(qruN`q?6s4HY+;V-%ABKV! zO@=u8f}G)EbU5ym8e%86{ESDJg1Yy5zlgU=#Xi9oioW;n93G|vO%;bfzmd)pzVO;9 zE-Qlr?}oYo3ICC_d6AihF2E(_(bg8n86ig@YbPPhGAr5A;^$GKYJtB5lwK&;mrz-f zP+=;IkBqT@@E;GwFT#la;yzHD$s#(ix8cA=*7ysb_mQbx$xTyJa*Otzfx*hOdYt`_ zL(Nb6`iT1N|L|f;<+Yi!R}{h4cF?{9V`{h@DIvWXAv9x6(nQ_vfl52y8o`?M-~%a^)CVHUNv;v9P$_l%Wzx&<}D-=gTxXdJ0! z9q_y|6x;jd_3t+QrhDYqV%8V`J&x8{?0;>zXaBcdBh}X^IL_Ud zBW!#0X>KC>cc+L&&7dVinREw-RAYHs1zd3R(}t}Y`ml)7lwJ+Fs#58IF{Ut*E!Zt& zK#7nyhlPtzho0GH8AO%cE|icqGM=vv#?Phf?mN2lqdZ(Dz4QH^Gfp*~Pg}ALo*kni z2`%kMvHI| zyP5~2#pOD2;6@pLNqM_IK2;y%cbmtr@NyFN~i7GI|RNDjgz-j(I&--8)`8Y)cq>)$)n>Qg`_?PQ}2hbto9 zGtWxW)!ebsE>H5q_p*6!adVOQxtkVoJF8TnJnf>daNpwv36-8u>4axC?2zviG52OV zfFTN6)hz*1{d{;gLZv1??Qo|?&sc66+3&9)%*ViOw-*@o^$Oa=Byy&8FzO88;j&Eo zS6J$Nff85`#zadih4;4LY?trZzW!s7;nca#t{llg2a$%=c%~>{CE-0)caXRT->CbQ ztkBVnZ?x^Az!=PK4eW6md_MCy^FIWfgo84~793f(qnye;wN7`@k!mZSUb(C%xYTzioS1 zYpv>Jr~3S;E~cj?9>F3KMMn2Kz&#YM$xL}h2)8=+%w>uj@Gvkqdof%9fsd(pn03)Y z#W;vyF$Ba}mE@h`L^UEAAx9eHf9lb&U5Z78bm8Z)Tg>I)rJXKn*cz{n?PlnrIL?rA zM)S{h(sB5JpNil~=k`<`{}B#QtxF9cXg6)}z*tN0XZJo50ld@BzG)4 zCag@bLY#h8LhZCuJA_i4l)H6g0?_Evks^amml}pL~(b00`!I?vkt~&ynlzlmN%8 zL&J;V?ly;}U7;(uF_`ZrToM_c*7Q=-dxvfi;TRzY;oYg9{!nku^IMDlJ@y>!u$+&D ze`@(xvztu~62d+SP++DAoo=K~tC)No$?ZQ9$TV29H2wOY3=NY*Us%#xUU$sC{{b{E zFWQbMe(W?Vaqv2Jgl?ODAR6VX;*Wk-yejT4zykd1lE-_OhW zR8*aam!D7i?K*i`;X!1x`!q89iSO^7?|8;9eB8H+0K-K8YzEY@n6dPZtCsjYwP$T^ zaIiJh(Q#*{(y>>FSP)oYWEk^duCUC>=#=lh-g;ic29Jm5`nDN@9z4Oi>xTEXXOIx6 zE4*=!@eYo^_vUToQyAjxGl{iNT_)3=P7YW)BAyP$j2KMZ?K*4&)dRNt(t z!c=>$LlL7R83@{&=+5wOGpE4PtOmAVtZieGI69jnT(c^x?5NoKyw2r2m@k%iZw59- zCmP0cUQ=?pxVoQ*oJb$HF9vKgsb1{&J!Y1zZt&dmw+&5IAG`7U`6XRWLQzj&Y@M}? zD~+@>!B4egIn4J{c(H8htc!hZe&S;-ISuJ6Ob;7ulXey-@BUhoBDI18q#m`M%ftnN zI^JxeUIr3ltmV$gqRX%<1*{!bJYFvQHCd0LEc&p@{n`@mAvUJcY-3|3A1y7Bqr^Vg zn5_Q5*6x16xXe>HIIXbim&DeFeL5+g97kfY{b+&j$fSLCnUB@pM5v!9z$W7UK8l3#zDUtg_2#>&;BL2)o@5&CBx{aOm&c z!`}t+{hc(sCzP|8NOmXB8sBu8#*s})PnW{^I z@bYEFNm_Vz>nUu^baqG;-g!)C+w889XX`p&eQg~ts6u?FDW}ytE6uR3eZFe6UQB7y zgyVeojrax#2}k@s_SMbV7l7Gc<8VN5fno~*<@jI}-R1Fivpwd#U|v+KxjC6_9t%lt z6U{MO$gH5E0gr>j0Ru_uG3)>)Mn||mHu-ET@re?M!A=E_T^n-LQv|?QC;SW-=miPt z_=Ir`FKfYYHrtHMHnXZ30;uT$`>4ze6ofI^Tf* zkh6am!-$^JI+VbnP?5A#v6BVS>ej-ur$oT$IZw27UeO;3ohQtMQ=wcQ4pH~6^vXFg z$l$pDRR@s=Gj~EO-h%EYJ3kuzl^BZeo4ExKJesBQtUNVw*B0Sr%`k=Ag^@f=POtmc zFX8m&GiGvS3(KBhIdWk+%H8@kgq233yni*HS(%rJ!OZquTneK%Fd=+l3iQ3!OlUFO zcHj_y{hsTx(d`xfu^&m!#fr^^Sq@(gEoef-;O>|NR7N?RC*IZ3$1u{ zK%OWoD_h?npT@>Mg(5y-CWPMwFxD=)*BsxAK{cP}ATSLNg z9(6VX3Ep63MF56i_U{VfRmRsPz|Za)hE$IkSqZsr9mBP4`0VK~EsR9Q3i{oFY=2L7 zUSJK>XnOKn*8GII168AuUcaTLb9kttj%|6rgXPMn2CaJgA%xlcQIl4hUMrL-JA0z9#1De)9&;Wk6wJ0?}v9=MrZq19B$j1_(6g24U^6Au?3N?{5;KOUPvAoPGh6C z(d7}~p!~4&rW+JXQr290=KbrHoo5bA1z|#3Rm^kAQy7q0cmCoCx9wyiHqIB?O0YzD z^`N{}g*d+MhT6yF%ChVr*9RVY#^Ylq30Ga-NVB6|Zw4POq{}RnN!q^FLqEXI;m#m` z__R+uIh%j#798Kd6T|o=cVDd{jj(ZD>DkkA3fp3pgi-k}op|<$)@KIgAzi1OB}M)D z8O<#R%i?BEeguOrur%`|X1>z>El5~*Thm5<@U)wIR??E`D7VpNW#ypTpf>h$lvT?* zYw)3&jtlsHSvWg-DK;g+$5vo!SG5oFnq_$Al}X@v^>$fj0VYnSLe>zClo zS~XC~=PoqrL*hG0k?i3g41*uAGQcM8_wPS9MNOaBcbrTxOB+mFn%89&&k7d@#y#qDoSS6$V@xG^2*BQ^oLa{9MgnK8noLlWwZ$*pcaH@qnG4(^^`Gn~$NEEI8 zq>|*Q8_NYGA^Ab*&G+gwLTUp)WrHvah2l$$UgurQr$!$@aC@fo4PsRJZ%bTn=yKNt zx6xLe_=sVZpnHTm)@J(7S7JRVG!&nTaCl4j+n0v8?tbAPd`X9+11~H`P$YG4x@=;| zMjN_|4q0qj6g~`=#cEdEM+i`*i)R$o_u!CHshEyfGDgRKYu-9oV5u5lJ06kKy4Y=L zot51>m0uF3p;!ci2-MvjlZ2<%TWuH7HyLA?hE`+0WNd^rgJotk%U(EaDj|e4okX5G zb_I^I_3TC=L}w^&ENKO>JH9BtEVeTR#Dv$s!CfQo30vF^QIyl!5 z{cQ@G;ya~IaKxOqF!2*j-`zmRJlDs9JQpt>ljwmSzZ)BF`d3C?QEA`o!dqGyV$v=~eI6xPnunvL zb@Dj{#U_)YJzG*A9J<5P592emlZHcp8G|dDpGFT=w}SRYT9{#?)-lKs9d?Pi#6%vJ zkUgFFidNG}`4=TE0an0iWWfA`6=NfCdzCZ$X3-es*WSD5XRk0^*-5R8>{!s6R=!F` z&~rRy$zq(ula-%w9|I>)2}h<-yl)mG2H1)CR7hmZ5IY=Z)KKi*@ExR@C^U?fP z%BSZq&{L8vomYPE0B*xlV)EAKDd8JE_JO*I1DHLyQK48W7BU{OIy6>=IZk zH&*1|L1N5Q6IVPvCkSygm<>G}39qLfW)ig{Z@wl_3nqR3rGtovmR;z%XNi0!S+wNS-=)Zj{xR9@ zc;vBEqgLJ*&pF0;db`(dsF(p0I`=#3ZO z24rf>Jggz8I~pzMGVfdEPHN=Wtllpl+=8?9%;;gm;pdN^i_1UO*L-&!Var#(s?=An zUiR2ibG>O!zFN@TXzGiedrS=iQ?oo6ztR#LW@Km&J6ng{;=5KNJvNyC_}y`lMZ<2e z;D;*x8AQ1s&$z_Tp}M|l4E;%Zg|q0X@knTQQ?6kZT*gb9%E)Hql~+6H4Jjex{?+$V z9H*}3b4Ou{r{fz~3Str|Jk?-~bt znNY#%j(hTAsmNE|Yzt52bxspdQQojE0AthAoLy@mKzsA7Hb)-)@&Y@wJ4uUtKC-lm zfcz`MwVhCf5r@j=vioEqS{Ah1Ao1zkPjVv%ZbfmhU0khZjU9246eGa<*tCn4TkCpV zT%H+??#Ti>(XloDQ1$)1_ek|t`Fy6m*?3m9r>)y7iF-AV`^`fc04!^@W+hK!*ps_R zPZuJfGPO$k`lHbI)bJ*E8h`^LN&iSNy0!q{&*|7@Z->NVlFmy+bkB`4$02d;zK|B{ z*;}s@yZ1l3!ZYp>Vjs4Uez+Gj1^|==cQf5F?$3PO%(lBKY*2Y6uHxTENfmIruS;g9 z3R0+ng_6w(V5henydr_2QfcQ~l0;&HNfL9F{DSSrAjN($A0c!ivChw*woAO-;cuBN zSD_p$YJi2XHqTpbm{UkpH^gvT9!}5LWVjgNub{vh7zQ#DLnjs)X{GsY+L9yb##)sv zd~#FrAsH4lO7)Rj{2`>qcq)56s@;M>J!3Y(v!RlZW$?*^ne{w6s$rLlNaPl$vU5AH z<$~Rc!40LZ;&j409PZn(XH+nH0p4_kFZ0*HllC9)S<1uBb{>LXd2AU-Vp~+a>TMk{ zP*`X#PxKilR_ro)<>4$uBwk@i*!wdWK#J^mphU#37sk-g=uIpTKNi9;Xi6@_>GA|; zzDm^5R&rD-yvEn2dQDwI!5C5D8!Z|JI^Bc+FkfiDpZ4B8n?L_l-$BW4*c?JZp_V%f~xBhFVjA`|t2E8LXS6atCr#lD=%hqN{3fnE&3`}(FCU}7jz1AZ zC4qmToJ&f%5o$PqBC`ZT5X!x<9K~bagEO*aBD}8chEu=9m+t5%4%a1%&rd_qwjw(r zNXW+EEycGZoX^QMiJd4IhD(J07&$e_0h>D*RD}E*TZs`rKig<{jK0=GK<$`9B5pp& zaEmR9de2@(KS9;2GR+B}iHo)eyV{Sw(!CFNWl7ueII~`AUtIrF+w<)Kw;Opsm#`Qb zzEMm>FCMA?ylEGQGlofs|B>9Z_DL3QqJuzXeNGnFp5W?Z8)in==ZpZ(jEArmph)h1 z`gz?Zg-2D6Jx{=FfMegI2Vb>Cv!N8c{|lK_!GO1hi3cD`QL=&WRlP4PEU0oQy}hx< zMtMAF)nql|tE`B3dDz(p&AScsuF$YM4#|hY2Gzn&43(@^aNPoN69+{lwZ~RcmGU+C zbN9yYIXrk0Lqaz!xIZ3?2TbJpm$Mcj{6Ke$*P#G!S*d|3x(nq-NVw9J8tmUB79WS~ zoapPW8&uiG_biht=CzZy$KfiabJiuvE;Ha_{_~KlSvb z^O81p81cyUuW>)@4wqiiS;yD|9sZ0vsOADBEVE%_f%< z!_Mv8=wOsIZ{UKpRAHjcqqLcyu}BEVUvyZUpTWB|w>dV~Uo;Q(xBd*PgjQIN0=5f| z_(t>aiye@7r^5(eSKrf$7)TUhVmbIk_C#Y6V_JP%?HY=(h0%C0gJ_e_-F~flSUOZU ziA5Ls6>GCbL$~Aq0&axrs)DeJ^}yyllBGg}@VyTP37iov_c6`JY^m||^PnSddp2M2 zM5pp-d7ckP2O80lRl~_kyKMMD)|=?6`zWto{Dw4D4C(&V#T2q7W(D{Df<`6BKd z&F9X7dS>5!{NAwIjHmVQf{|)8Ty{=NK2RaJ6bnJ?V~`35r{)pn`H;r+n#ku~S;xJR zYrgM18ow`Z%3R`bujDx4RIhVJ8wQtXYA2&dF%Gm7CRwkq)Kak`$nX!u@m=pPL(`D1 z9ER^rn-*f9Oy4>GREav7A1>93g$)GhiadV>fkjaDcSm~NY6!?f$#UC6mkV|fDz8-2x(s45$(P#-Kj8> z#cHU(&8Kh9EU2Z}t{S?mpI$!b%zv(PVj_>ivJ*8x4dNR~hie$hc>&OJ@C?)LCXZ2d zu%&f8+@*$3O?@g3w}_Up?fIaAbm(S=J~RCsl%!zEtyW#>;w$zL(1nUEXp`R>H|oI7 z@Eo#7zr>H5lg%_}c#Ad&94<%cJVoa&BdF0k;hmgXms?fJg+?t>?!2S}#Kj{@?oetoO6+4?o%!=b-@Tc$%7^q?QYP>jK1$uiGaDv$^-azC)^` ztbsT83B2oeZ`x?3t|K#42zMU?}B_<(=`orJ42Qm35bZG9gM*XpY?20QK^N{F6xU)7PA$tlA_PM zlxE77qdm7!XvbIw(v%nSZ58bJhAyV$Mg^j7XJ~?Q5(fxgZ>8cyh%3@n5A5$dOltJ3 za6}ZkJ)3irjl5=l)4NSTlwyKKDH$agIVSd)es1lb_<7f_Z?-=Q$A@imgzx>V1LM6T zLsDq6akoT6F>3pM3MoKjZs}9Fl(X2aPZ-_NwV5#QQQk;N{ zbj{PR2m7eqm8W@AzauWd9B`%1VWp$2%h^`_yQzbY;?O$ItH9;PWF$J7FI6>R=iP5U z*OljlYgq0-75BN3=*`k(mdw2|pGhknS?A{*%2eIoZ!&pltf|p)%`fsL{ZO4DMF7_tG}%jo6zOge0!w@&ueT}uRe`DkdP$6%oC6%>}guqCxbAsDP3YoKU;XK|=g z8-US4L87vCDiGywbxJ^$cGSN!O73CfLU@V#@n&vbguBiTw$ugF!qt?a=!8DeZzM%- z*p({6#uUNhw~5*-6#^yP7Vv%SCqd4H!b+#Bd+dm`p}7F{yayNNr$lpZKU)H|UHS?^ zGji6aF>Bi!JZ@VAd}NqD$G$Q7jy7Mwpu@3SGz(~v?Zcs>n8nx?Sa3J1gCcypj3l9+ zV>7As2_r`!oIK=p*o#7app=E>=RVIaUv|q|vLk zWr2xl4ztMJFA0+m-5At_^U`h~agvd#0)WL@_X}<)QJv=(+FAjN*Y9XvnzNW-mzXVQ za3uKZQ>cYvhqjiId-VB;^;>XkH)lOoicI!|9Xzs)+zFOEda#xIp*>9yQF(Pp7V8wx zUYPW3c@I7=TAzqD|dg|bsSn&2aQoHYqp#k4yQRxvDg#&pH^ zL5n<~=iVhi@;A%_kAq%US|%m49_6^!(bjpwc%?L9{G8H7IouT}%-24VF^%r5O z-hJ;I7=!CmZt$Nwd|r(%H-lv2PA{xyd^7tdXD7pJl<0jQaH^6Ug%=OkAcG`$!%K)? z^BfdRW<$)%;y0ldp4Xj;);BmZ5pS?(K8D@8D;ZQNU!#d)CfB;xVNp*#qb3MuC@U&3 zRfD*i9B5RX4C~RFZ17h75o*Y1I*rcXtL)s_#TyJ8tuz1Px+moMh*v`kE_P~Z5>egP?pX%&d}W3T5v`|Tl$faLy`uEc+&Yh)0Y zG3`|Db>(_BZ8`;@fh7ZzyrgFpP)e(A(jwk8r?1MK@;u5X=r=DzHmSOIc*`veJdv z^&g)vyI|Iwo@gio6e6#b6G+w>srT?(3HxU>vGQsX|MkWH@31JPY5|$hBUHW9;RK_S zlz-}LEpKs{Z}2;S7P)JKDpG5q&MP@*UBCQ#ck$&*P;SZopP?rrRIUpC z;(@p7@Ty~eJ|>|`B-|6Q;j{~^>N&??Hlr%udewP;PvDMo`I5O^d`j<8uWaWKsJx!y z<2kd!CpHB(KmTp#{27zDLYxEI#26*$m)jMlOWIReBq&SQhoZ-?H$~}X=(!4b*`{?r zcjFC<$SE+1ie_D2@*+4Wn(8iZR1p~XxN*ww9dFCi2^$yu_dwc7q^wCM3(eER#EV~j z78MV^a5hf`>>1Tr&Ta_=DFf+u{#J$?erW^ANbt!Py8d#)0xrvp!4}?p zMj5&9!pBPlIC_>s|K0tqn&)5YSVgOlcvxmP#}3i&@Cq&8#@Or0ykA1FM?*lN6|g7Q zZ7U(Sf%4#m4rv@FhPjV5t<64wM?a8kdRTiSzLiwkQ4jfp!CzKc*h<(-bXly173?k6%e>V2r>}Z^VB>%J=c$pFpud+A0m9}h-}SlIyKsa z&IxCj8TI%-q2l6)oyNj22~fn`efft@1KTnZ zDo}?l*87xF?ajikO?BxtAgfo)ji1>Nb%mgryy|ZV)Cnua96*mP!pN(Gfw@#$JFxsF z-07S~Z#(`8D6zBtS!yOzV5fg+Ur1w08n0pbdg<7zaepTzvF-E0#mp?Sr~{QFAa?a! zz#XG0aA83w%0Pw!s~@rW9~_vR=06L|!a#y|E1+DoA}{y3LzB;8avJjep?Gk4`)Ta< zp=0-w`+7sOvfX%P^nw$@v*{{8c=#s_7q6K756*9L`S;G)UG|yRpFJe+Hrh`BTkiIX z^{Lh_U59)lcGYs29vU4DmhNbw6`IF$Wn+=(8vmJr9?Kv6pA~%WL|CWg3oBW?SuuCE za^E{^P0gY=9JZiOpZur>7SkLyp-;E`Acghk05;aV9Dri3Cee@rKdFJ$@(A;BAB}n1 z@3-9b^}qAoUo98{E_=V)ax8(FcbPGeKp20*dhv>Z?**l$VeYZbd@`CtTUy{LSeVz= z-a!J|K1v5+8)=Qa{6+`ASDHF*HfYJ?yx^2xpdsEXJ5LRK!V<28dUp?SpKSL0oD4@m zE!T$S6Wz_owY9Zb^-}Q~LY}7BMa8pKtsM#vxshS$HoY?9pU*~9NDm)=_`@TbX>~p> zwPnA{mF0RhQec<#tMI%8(bN|FqTmz;QMSaN`XkpYz-LP!1oK$xM1$btnBg$GgG2v5 zAWHkf0tW#k;p7D~#! zKXAa|CHXdOh)$s&nDpQpfQBz{E~HmM*YN?|355%i6X*gJ_Dzj zWwj<0yChfd!Ucsi;O@b>{b1F-?cKD*Dt=1t8I;|{CC=~P{a(i2(a7h{Ca(KbT~?-2 zAYd%ob<-ZZd-d#c>IMU5TDJ%8S!$h3y{CNL{dm*}D#6OqkcGp#kE9pslF zyW595Q++X9eWJR)d2b*wxa zA`%m)XU{feSXEAmEp3Nqor1H*b97!}EVqNP7O~%;VC=zSmU8Bqw#;Hc227G5{qu!> zmCgcKr{mi1k@6tw*}Sh}`2G$L8Yzlw`yLqvv(~?sVM0m>@Lw|$_gXCdoRZ}9YZ&7_ zK(zgaihg?&qs-5hLK!5QbUbFnxn_5{gMIMaaj;kJ4g?A>3)aVWNLH8y8=zdPty zcXS0NZ6yGs9A>^(*h8{4kjlVjt2skMNU-wa-dp!BpFCcmKPt9s9`QrvRMi(B zaVIdyJne^xHYB`@n8eO?|V7IVhg?f?{Vzp*Y0q{ z6IKK+mc$xpk}`3tN!(O83*d)^z5Fwq2xa=XuMeZ1{onQUmCDwn;O%)TfHB_9$-V4EK^ezc*vB5(Al#eIRqeK6{d^#H zkuaOy>ULT=RF$CI48Zv6bQuZp++l)TEHP=^^^NV^zEQjt5DoVvHijzhqvte2*M~3` zQmx1_3~qV56s!z{M@kY2k?GK~vhYg!BDIQenfi916|a2uY&0aE^CmqQF@zO?U_+6M zRVC87CbmOF!Mr4|&p5)t4Ph?SYkd`3jJ;l1V+m3kE0rp2C#Kq{h{rj(<(T%Sjx=57r!eDm<_Z3j{cvm*- z&bev+kYG4UvN(hp6Q7v2%_W)|BrFP-d3DEWYb+8dy7Sp~WXHcX`U)Qxw^0swY*Da) zSJ##>P|S3){@p!+)bd(OLqpO)j}zi*jR-XhBpm{}X^ku-hKm(K=c+BRyF)OWzucD$ zuVprQuq>k28;*l=jwCTeettd*UX<5L@A!eN$(*Yu^d`3AT@<-!>U#VvzE3S~MOA^i zZuS^FLM9D)f)Q(2E+LH zT`o~)f(Z~5-r>NLE5n#rUv1y#h89tP!&L!nhGr)YSZ4}(Mwzq>j7dzmGseYZq?DiUYue(ucUBe8U zvv+H6wwNN(30*$Y5cyT6D&J<@T>q+v(VK+`*~hkIAv<`**_5^AN7{G@qL?h@emq*L z%M8r%Rxup&-_fB*#$NLhm?C&AhX0&JA(L~L*Ac^BZs+6W>5Cyg$gitW*^eg1&xAu< zL;>a#R96mMo%{s)l@48edmG3Y&x11`aZi7{sNFsB=lGz3><+880lD?;ci3(N zVlG6wsSxZj!A*I+TamL*Y!2S8n}8)Xk;F^nX+U8ZPp`r}>{vOr3F^VDSyDXK4s>Vg zCo)!j&vj>ZOHcOq^?0D4yT2uG4&x(g^YY3OeAciVhsinEmHZXROxU31b;!x_#=D5zN*Gp8 zN3%t)51*3*0)e29ceq6Jp}rE`BqA*7zx%7q#TVdy4A1Fu#v#FYVVyg z6Frb*N)NTKcacCoed0}F4V-IRTy68MSy|p~G`mI&Yf?rZcuX9kO>BF#znX<61$tKx z3@vo?BbKovJao}E*q>_kX@AQ&VkraY zJ@kf_3}@G*yu9z|Ym25%c<3Z^%QA6pp=(wy|nCdk%KRT`PRC;d>D zgbncR35<2s6V5#Q188eFmyEUd3GvQnqtOZ^3ztI{sIy?R5f%Fts!Y}kTweE%t%;bh zG`-EshL3(<06iIAA(t>f>`i&!riPcG)sgvm0Q#3j)jUno}nltJ3b%_Us3xBH?=&$lWfBmX}n;I zE_sI=brn^cWLiNp`gpPSQTivZMO8{%ozou`$|Kr!StH3?t9gcQfS72kaKPMGUUR47 zx?A0r!?I)+tbnzn>CD;gUt;j6#Z%d;-A_E}R3a-{fIMFCooA-_9w%Bh^`bB-aopH( z*&w?Y3KhbXaYSY{Ya}fh8a1jn!vY+)u1p6@ZS$9S`Js{`lPACPtne=hL^K77r7~kb zeRk?p_MsHjmh6*#Hdc2t$sN^YX03Ry@%A+sTkOGpt%7}Mi4ZqFQW+Uh5R&+G_^z+a zJEs7=$WdlJymTZ)B2lMp z>j>%af@b1xI7~RaAitEa18luWz2BL$=AK&8cq?329E`J1LJHKJTk^KET;p=up4G(s z9$aYeq~Gf5dc$6O1hFAPbAehjePPlfIeXcSC9fp=YI19&R;i7lCsw!hsY{i}d9k*h zcgj^X-tG!G-$^?KW9}G^Ow55d^CQGWLl$Buc7oS2$4U~5wDaM~5pQWdE`}Z31c9yq zgU;rbs${E@Wsmx^63K9dZ>u2G@F3N#TFR{s#T9q*02yX8%iv^ z%}QKNc^8)<(U<&ce=|v}Tkgi`m2&TB;ZpZGe{yxffh@!RYrYuJwjiZaPBPrKs4`|? zz^#VuYZuL&R%2{x--M;ZM&Z=9AoWMT(LkwTt*bsf?sVa?8IhSM;b_>{UR<~9d*I!R zqR3UpWn$>9Z#VvFbt>`pXv@?H=HjW1K(m}ZQ10eYE*sP(NxSKJH`dZ+9S5ASng`B5I#v5(fpVBA_2QJhgB(uO2_k=JJoBI8xEu?p;AH)UW z5-{RaXZnHCzztI{HN9&#x<`gVQYd&dlv;A%s9G*|*_zLhD=Fi2x%IA$PhZ)jj0&LvHm4w%Ll4G=#6)Wkpa!|qS}m(M()&k zJ+lv2MOL!jUzi36D~{Z!7&Y$hNB+c_uS7O&8@G4v7WXsQVf@m;iW<%#YFic(Lw7io zKO-m)-U)$KX-{QVil!a}!nW!gMo_q^JUK=s1W;7jF7J+|*-=rnLI~}^K1z>9f@|Gt zi}^U-Y6zV&tjK6?)u3)SkwoJQzWlhBcK`o}x4#aG<9psf;Rp#13GM`fySpSna0wD5 zxNdNF3l2dRSlolVySqz(z~b(dZCLq7* z>}o{3BLo9-I6DZ5_F-X;q?|iU-`fg|3s;sujg3Vq?R}qMXY<(>mZX00+s4;CCI^F- zx@FE79ZZ7RK_>#yUaXUg)Oqy%^~U!E6O)rt3c8{O9RhJ19F3GR3}+u`7h9|_{L($6 zu&zjN?JJ+p8B9s$)3n#kwiM$!L&wlA)ww3Lb>pzOq;Dmuo(QIA5Qt>7FigKXHq`4m7aA+cDe|wX|eJ z3(A^(WJ;B%MhkidOg!9g*EWw0B-`I@X>L_HcjzoV4$LoL*(v9dbOC?>$`Y=bhbrNSQ`WroRzwgxT3Ob7+=y*pVh86{h?2Xy{TRi0I!6F@|Wcc ze!?;-`|GY72U{;;Qgjm6R3YdULGHeR(Ak4WTgdRAX68ez&cDexdM*0m?1=L1irv4p zVAxgH9bgb^2V@2A_=NHUi@&4{(R5^&UOPC#*9HO zRd39s+$D%8|3dfGD_?|U9={vzgl~lazRMYQx3_-)f4{!V;&pkzmb;MjWv`{+Se*_L z_hrhKUtav#F^KivbxNSuNhI#W-KuN1z`?Dv(swl8w9#lv(sE043}iJoH_5jUJvnj{ za4O}NTMO@DLv~Nj>Gu&c_A?S6VJ|Id5umPej*QtArv${miGt+k{oJWb)oe{E_V%cd z2NuFx--2bL_q${fF#X9}K??)8EkdvM`@|?Xf^+OB2XtLsT_=*6fgyL@qiTCC3=c$F zd!>4>&Wn^X0dUsD=Sc5JGC{JUq9XhwZlXR{_zK)U3}K-(ZeefCc`m{`nJdCSw}D(o zi~X6jp$VK$IA{{dcc?Yt(3$v{6x6 zMXq~L83+niPVl1ebH~-}FYULnp5K%<;i^e9V8aoQbe$xldnJF6I{mSt-2>ODDfTmX?vc#Ld+rx1s207DT~(cOM)qW4-Qk*> zfGO#TqLz79he&k2pYC$FqL_K~ee_!XcD^|G?|hoPtPc_rY6$X)Wsu+@*5 zPL9hz{~=@{XQ(4LPLzN-OBL49s9ojyG;ZOWaI^u5Sp;9{d@F;KzcP`vofTPGNY0=ZOW5tj;Gh zRXT;{JF&c!{n2peN|=u)Kx+b0L3&olh9Rj9G#2$`_Lvh5AH_)*dz&3bL$f6(NzV!H zCYy#yem2iV-7`CJK8&#@5bWL+Faw7WiVo-*reuV{P!f*D;&JxboeQ$LXr8WDK* zG%Eb+mhj}(YH&J}_FvMyNGMDA)4eSC(my~#q!h}b6F=HMp_d_tyNoOWO+C-=aLM?H zhwlT075prQ)?vi(B=_q-z*3n3i^6aLVld2kZ`bqTv3f5)d-;YsE{xM&Zb3#M;hdn& z!;4ec{q(70Q~T?szK+NoF)Kw0*eTo-A4A+iiw>P5>eG1|5zBQZO}(N1`nqGBQH4N7 zZ~!lF@msB&LqfBW&tn!1HRNxM~}#7iSYhc5#h;=N<@@d|w(v!OSmTrfC|y zSoIz4~RFuCei$Rj)2v6~21@EvwRy=0M}bAsRm81DDjE%^rcOJAA8jC-?Y~T9Vs! zluG3Lo1svddCrEh`W0IbulqAD(#h(-xtOJ>Cb|j~#9C7Gugb-5tKiDIe<<&Ri6|f{ zY%S3RFBtG-SZ!1LR!B#dZGln)$+D~=g05Zb7)%feubQ)}H{Bt?$9WpwN^Y9hi^$Fe_I zkid*emQnZ33U!7gK7M)0?3|GeG$D}UY-Cf;R9g_C?9k|Zr zu}*dd&<#jK;6VfDW2VVF`yOod;Z?ZHwkH5T$;Rfp#}j_)5s!PK2}~em1g-D>@M>67 zm40%gN45eu75)3_pRg4DPF;h{6WDr#sp^KCIl{B^77cX+W%bbt?rmjEL;Lh2N(D<> z0p+mXnUBvknWo9E|L)SE%#ewESULIcL4(Y|_w;WNBh*%!LToiE@?BH8ytI6 z=!R>RGaBo3`uh5UPR};)-2hw{?0GR$H0uQAVrtv5d*%6>zb?-Z6YwH+y+t)N=obS> zF7sM~mu6jKC;KC9x%VEtLP9McF^^kh+Mtwu^%yDe4Q-jezkVUn(N$_sk&tAS7}Z1B z=Sk;}Os2skGHbpLXj9#GPZs4EgX+CZ{TnOqVJkgE`Rq-0%N*rPnxzL0L&`?!Ow9RJ zL~O-eEd~zF({@A)gIkB2KNA~Hj!xj(YN`%5J)melIK>0b<$ARNh*2iFOXb1*#W-Ur z#|JJ~9|z|=riBi$rt9=Obf#*Na*;{8et>pD!1MO_prhR^jg8&-N_K?AD#FIRqXXQyddKWCQ!& ztVq7)DnoRivHW;BE`|ZBwbmNVQI2E#1JWzHBHdw+1Wsxn#3az78}t|q1&5mIrl@$G z=glBVVa5l(IMd)XQF593tDasr!XUd7F-cDbzoe2TXqA!SeDcCP+}o)KnaZ8yD#ox1 z^-*reRuI?vBL2vZOUW9I!5yI{?W;_yhTpl_w-)+`3C4^c90Q_dg8LO?5jBa88CcomsrU8+93Jy1sPR@l5*WJtw&oB8~=&5`U)x zVoS#u9ILjGbj1&9ju%Cdw23smQxl)lI z@xz$?Q7BF4UYPZ36m%ftuXa@_^X`n)cO#uWTCyvh2LF_lqyVb<_e5<;L@;bl<89PS z3VmZV$J)OhZ_V}+w#E)=zu`tL>FKqU1^miaQ5eWC??I}+Z)3X$axB7LuPUtoQ;Lvqtn zEli$*C2Bg9?gmxE$|X$}Fb2X1hiL9Oz=FK)Gs-)$Qw)ouz00o=8|i;X4cNOSeG=(> zrC&yUru|8AKm)<*7P;=UEOamI&J2I5m)lMaA0zN)?n{E8o z8V>hhqS(c%4&{*9s%}H9&=Elqmwjs z?Nils=@EIM^vE4BxYyfKFf(bC-8(o z1HJm3Pu9EK_ZNH%R3&oUsOv7corRn^KtLh$WM`X*Hua0TvN6k-pmKL(yH|N)e~Fv^ z?6@$}E_P{_;l5g>Sm4N#XPZ)7j4MstyhxLH^;HAL8G=GIclz1S7oo2Ey;aD^-+J`S z#zs-Fn{Pym((;ceozxfi7Iyu3$Y1#lZ$@8#8E#>y3_*7T@t)^6OKD<7=?mTyc)msm zN$R-I$4Bjzg6B^@`&B+X&a(>uzpHkRYRo+;DMWUU4M}g}FR#mhluL7Y)jz>|VXnC1 zf69-{!m48jj5?ivGJ7vQg1QU>wcqu6Kkc-+Tlh|9H8v*ENnnrNUngE(e6{FIuY1B@ ze%V?&yXWo`pvJKAklr@7$m-0lzX9jr>2Y##V%*t}xIk>r4STwO*uqSicn!zOH^?8Q z*gonhCs(?eu>v{#YlUjGm-GH2T1dRlT%Om}+KPe{q3KfG1Z*lH?3Xkj2Bg5q5Ay}@ zM|{ENTJz=lf)EyF_;|H1FO;M)T%Ds<1Ce6>QKMQZylVA9vAs z`5R|z`JEa_+f@;fpaY=ZwEqkV5)*SPvpXoWrYfrsI7yM8nLW?k?<$a3;lvF7Go02E z2nM5DZ?z5Z_VIQZ2-%)tCZyz&q^_LjmzJ7Dj(tdLyrJzfNV88_FS)OC8-WvBq0{!J zIU-xSndK+)I%WwX6&U6hb`J_#BVprs$&gBIF=5d>`SpvnQDsfJzD8x14Zn5EdhBJe z^asAmRk`^c7dhU$Sye9Bn^z!KZm#Cfb`D}Tmh@<`99$(|-v)`>k)yB!6i~w18w*cY>Pi-M1yZMV@SdvN@0kHZm+io*$BZxpjc5fBMKzd#!V$A7h(8BM!#iq-{* zk!NIA~{sb_Qj~$G8?YCtq?8IJxz}t`}OLk4+BDraJ9p3cW_{(Z;h+ma;UKQP# ztjImeaMXK$xW;*xM+W1*g98^s^VE--z5ah5lpjNaB^CZmrkMd@IBQ~$@?6_63)jAO znk}Z(A-GtiO9CoL2$IB`CM0Kk3|RDvjHH}okK%6ot^)x^Rgo6U&MPHMCD-*TZWGWY49xkPV~i`|Pei2FY-fcZEdo6xzDJ<`mHk`FZ4f9X|)dPz5@ zGKrN#b0ZO!iM5GD1O0C-XAR7PgcbVw%emBzHf=bGy2{H642-p`5Cs2IzlP?To+G+G z)M^%QapC*u5{~p#>y61%WxmLK!g#j20w_KW^GsK+ub`aO6`pN)Y(3Zc^r4d|70VSh zB9TV&H%O##g){pYY;ocGaTW2NVtm1VyNs>|601*L6tMV;nn};gVQeoH$nCP2cl9?R zBp7cL_esAbJ;J^_yMbc4E=EJYWk(duqSyYS*0W-y+ywv{cyzp))u=82!xY$uo+b0P zu`+B$yynMa(fg@?BK94}pYj9^N371~2`$WMTH&bE%#`*eU`&3G=$dzZI3#Z$Ubx=E zkZ$$w`>tV=;|^Bh*TCNucyQpu*E}dS^L-wShnHJRlRnK|9CpI`g`sT2A z@g=~K_}l~<9W}IGQ9?Ys*45qIiJ};dm?UJA#sp>7-8zO(Mi43Na%1_u1Zsj}=Yjpc z^Pc6H)%*9a->|IqE*~GCzdCKZPVpW4#p6)?6GMSgO%EX|iyWbeAzBJ^#2LaDCl%^L#k69{FebNTq46&e zzDC8&-Hf{Wo!X*1L(A|6@AGxedT_l5IXjj7hx{7OV)4G$8NsP#jc!w47VTcg#Z@}` zi6q=+>AquSjZbZGFZbR`k~J2qPee39X3tGR+y!wqyi~Nm8S$3SSqXh5^fVzqu11N4 z1r^9f3_&3?s7{ou!nb$PJ0rCS)F@{{Up-?MB7a&Z|22fP&}R67C#Ao9TukhXeuKp; zvX=VqA6F*ej;_COq{HS1TEV9`&FvRLNGRbHYio!JWz~9!u!;w6ADgwuGh8u`D6r@9 zc1(=R!{~)GP=U0%Jti?xV-mZ^f{VMZEcjd>G@7D+e|@sJi1Pl$>FH^?Is`OIGn8A8<}o3gFr8 zR=q_h7;atjB#yvz`izGuLiJT!+wxP9Tj1WFS*A!PLQ}>%<^J8TtAhXI2{*<@1Cf3c zpqrap+v|;0w7w90Lebeow%6bPR;38oM<-OU5=YoyZ|Hl--a`H>V%!K8iUN2;=|*gc zG!M0ZBh}R+TBG&7x==!beX^U#lm*brohkomY#CE$m1^#+1fai&Gw% zXOeGKpXQuy?(WvxSp2p$>yVS%gliX%dKPO{i6*re=U_blQJ1s!i`l}DT+M$qYj$(ItdsvtiLE(Nc4M!RZ0DJj1btS&PP*p{e!+BC;ejzF4)-)pi>#_+nX@KJTZ^*85*OJlt z5b^MSX3gn;3U#BBsCn(J`-IlVYkTScd2_F6=JE&mZfIUpd|uW0teDbMO_BDv{L^9C z$mL4$n1;r{ZrekR_V&NY9d(rTUjqbP!z4{Rk1Vs9B#lOQ=Dz)A$CUDLAUu?^PaC;i zX5!7g{$ifWb~%@pS2}T*>z>&-I7`SpQl?w$oiTFw?^3(WF+ebMl+eJg0~@)XSkQV( zi9l!>xa=k4ULs&67TBmb@Qeokd@pFXpwt(y>(Ig4V?i&u5!vMb@TV#yTWC7TmfKnX z3>8m&i?ANE_bPriWNy*-G#{(ov6}{}U7@B0K#c!xRB`3}Id2 z*WV}EQBR4x2db#~iTZ+}jn0ykwV%g^z80fTM~vX}u}5`>!}HE4_`)@uG@H!X;8LIFX(ei3fP|GaKQDFi? z51jK84FR{&K<;I$B@ViYX!^TixF;_VvnnNWR67+{B*8>hg}qHH6bVll|86ywBV0X2 z%B15nk6q-jlTOvY+2fu4pB%{NL83&%q?!+z7nebhl)IrzLJaeb$f({JU{g4sfopWq zlxQU1Tpyq@Oo$tK{4gqPQiuA~*E=0kq=uCZnfcWv!d%;KU1bh3ySf+PX&Hz5e1z{e z*Btt%SZ>2x`TG-sCE1ad<@FEadTS{nEkZvol(WY|>h!UVt1P^fj@@bpKj zlj3>~SF=ujU#f@)#_ZU3yf3gDiGaxHYxLycL)!)QrL(=(fRIy#mn~JnJo_BB)y|=_ zQtRc3>R7oI0Z-)by5-qido0p^zYu$~=<*(zNpwiSohF~n9FY>J&)`ny4eiCUP8M@- zC&uIH+CcEB2vtalbjGE6-l>b1<6Eb)ZzlUlI2x~-N~9)4v8^bLEmc#$X+P-D zdhiDvc4#|~cGfAY%dpj&U%>kTLg-EdjM#(Hbq$vVRHP|7^50ePtHLD%39yIyxh~!V z{rgGSP$=> zhEu%M9B>{6ins;!(Kf+KRS$*N(825cTl|)M5<6fR^^`EqlZ5tANSmCcF}WQd?VDZo zj}Iqh8u5~DpWjZ8Pf8W^_imB;JQ+aa{vOU|3*E+Z)s%ovAK3~bOK6K+NGSOP8~G}x zv*ao(4SolFvJu`^t>DZr^DtHKpN=_%W7PFGPB52yZr0*F4KVL@O3WcC-`amN2?9|o z=Y~_GX07b^{2q>{MQA+(ya`<_Px^mOe$%_hM2SjNo~?|c_2IL7gpsYgO(XR*{(iOp z)-V(GVOQyeJfLr=+#QnMq8W9Ql9bKXDFPrK2jBaLe;eczor{cZ(o*vRR>lA%*gk z{W4PQyF5pOW1M&UpM$!Y>suKM{wLCGK`wB4M7oMtHfDpHv&q2)Lvn?i+jp1Pv03HH z4@=srs%6Ec-zXjBdJ4TCUCJhE+;Y+o2e{UL2*|rGofQw}&rYte-7f)im5tTGAPAE3 zWf?2VTOb`4anCe0<@s@PcYVDJSUa&imH)1)V~SD}C>Jh;1U@>@KH4s?pD#ZS&K5uQ zoNVI$G>`uM(;voue#t+-;HMm>sG|xOX8+JM>N(^IwqLGKYRs!S(%IhSOGXz4zVT~_hVcU-^JaqW;B4z0KMRgcPp&tbV(B@Aw-sY?Z z=zgjk*}7PDLJx?;5&FSFFy!cU*Nr`c^LCoSnz8ylu8#cDKE6NYy!r;;`+xwsZr<3w z+%T4C%g_Z&y6ivKxJ7-0dIaq$w)QUUPa|l3bM?+2vrNJa>UEcCG=#mjc*9?uw5ezo<*Hb~f0r@#@k9)^gNUH>2NxIxpfpB)CpJClK;SK;C7owB$^nB0fiyVoMuD#eh>>&iq1{p%VX#F1lLimzg`1()gGP9yLMpBSnz`foEY zH@+CBfq{HO+;_aaMX0N*50xMZM@LSmn2w=jakx9T-Rd7?)Q~C6utq&B!YeBdifPU$ z=y@VZ=>&GAdUCXgv@{a!5nL+$E>`g7cNw{Hx0N1~VfP`e5YdcX_wVK~N0Z{A7TA=| z)url!dq}$W{Qj8=$$Z^kPgS_@4F0bJbdB_D&e^-TB>`<+epl>)8NC%U8)LZOTwUh45N#qfP)RCy)dDZ!FYPK79U*&nu` z8u*fbXv(>{(bWC${YI*D&LmRLAe(gjS6sBgcAXUrS}zGzqoO~b89R3|FnmWFE0ZVl zYottn2$|faVB?vHRR5Cq%f)fIXt>pdOB5cBlfuNASKBq|z#C+Lo}3lfP3XMJQ%LkJ zusixOBQbjJExTEhI|Y}c!v3F@QAcZLKO9&KD#vZ{3!1zGyqUUs*yNHL8#3PX%1_k- zO&s*@raRL(?2dd}Ik3rGr{l$S6r(v6iQR>-MIo+9UuuR$Sz-oZc!Z{RzR&a}ien47 zld0s2kN`&oat%9a;|G+5)gMkwbX2g(TZKsXt#~o;Q;_uZm+Wn`t=D4eU+ob`*-Yjw z7+wji8`a$1LyCuWf0(Ylmi+(-5JSDtd2aKfNam!8Z5?$$$pg#yEL5+G+;f~G z#KLJSW39X}US8h}DJM0sUK#86p@^3qhv6FhCV5xy;7jiIGZLBAsNb+=w#We{>F#=C zh8D3F<$n3u`Y64Ib&TL*k=A0@w^|a+_1hCBUFOBgl!Ob7qr;&AI@`YBg2m+~hStZ& zrw5m=O4qwvJcH>Xah+@^9!`j>5{~)uCEcby_%&B)fx@>V5yS%S#M9>b_0s*loO~L;DX?9& zIbD!?ygGZ@?CK&Vz<^OJdu77q;dM^Yv*uIbt9iBS%=5PvxPMPRa&%&|Gl%`&bWQGW z*Vb7$XsLT2E~T zrD+TT5gXTYPyrSilv)psGrst3%fd;+N=q%No?>Fx8pOj+LC3Y42altr-<(pDBCQJ( z3y+Qgx=B9;4KZCgyNK$0H%$zTm=)B4I4Fm-(%k{6tJq>_eB8N&61#oB24W20rMBhO zNGy^@>&Xko~lwE(@hrSs&!>`O?JqQN^!A4Y#tY@kdOa#TIuIv8wO+utxSRD z-VR*{(dR#`Wln(M)XC1P^uROz8LLFTqpE1Ou~Se(@k#mHx1Qk&cGOVNyoq7Q#v2|w z;ufX`5L+T1J`ct`SF%1UNJjutNEcfu)A#1P2_&*I4$GOmpD6w7-PLqC)sbo5oLw2a zA?o7XDh zm1A;w?(b68Mjxc19;2lSYT}&zSGvGmFk@=tp@r?R)10#hW&b9oR!9Ca~JY}#@ye1 zJ!(Od*ZN1 zON(mDBb7z*tQKGS;b-=#HY4mv=1=exTCcLnPI7}3K$8=48AN&KE&-?}l}A+q#!oG+ zV$V^}*_Ms@TEu!Z;}w35twt?xaKl3^y@H|{;-E1_)KSw1qaCs#;gpu(qOkr}>Trr8 z450msBhZbZRQ4kdh9wA0Fr;N>sc3L|Of}VbxxzD$lBXl~fVlld*IJ0A1a_sPC5}lf z2QZB#h5s6F?!6FYWXC&Kzltw*=Xc{F>=pQP-3#1|8mEGVI%w)=9yQ3`mpNVZpsQgf zUgT&}N{pGau?MhnRi~z=hFdI{yjs0d>{Hk&wkp-)PRi0BkV#2N3yX?SLuNHRJUn=G zUDGz=A*i9d+xvZvicm%Esj4#VY-{@wz9T`jYUv~(UNgIGuQM&B{m;NKUNt0TLa*~J z=%iznNs#}ADZUQo``Jk;H@=X7i=hQU>0kX3$m^L&5B8cn1Bm_<z z<3Krv#`MYEjq`>{3hh`U_2EqGU-j$WM|wYDFFZUNFKy>=goK1pj)~hXnU}=JxqH7U z-Wyyp+o)W$+DhfLAyJP`OC)vvQaZP^}5?C~6_!5m{BV^y|XFPC4J+_+ezC5c_C zCfGM10mz%%uivkO>|n$0sNpwD9aq=8$ih9Kp9)}EhuiDx754U^^wwkLCI0KQ-xZKj z=}ze1oHzfMn^lfYZ;j0K6DFDzb9P8jHZ`l;8X4G3nX_&FmS40l2QI;VR_oDgf4RU; z`P6ICQ+SxxdZ4F!80yZPBRd_kp|I2oIjSt@{sg8>=nE;!4Z zQL6;Q9@=1z(!OVHTaUOtey`kR!Bf+8w6v>PV4=+Xe1M-iy5hhGz-TGF_JNt1e>Zr5S3+lp58 zh2K9YDFNIVi-TV(dU7{ABO~Km$mkkw38$s~!_3UonqpJ=jphK)L~icCXj(~n+Gm*M z;n(DD_XbCWRY#*de;**f1AqH+D<9gOM(xukWApeAwesi{l%*&ETo<%wsEo?ob9D*T zd_ZN1e7APzIX)Qw-*}hN2*8CgL`l) z>FE{@i!u!OyKnEHriLe>s`uVdyS@M7lf!=h17i3A9xbh5uFX)kCf^|uz+i-&D`9Zw zEe~J5orS-v;h<1z_Vp6+-`|A(+tl zhxoN&v3&SRZRM4zJUHF*Y(iMwZClDdP8v-gYV|Eex2W8yD0}24oK0$fN?8#fRhc%E5j4^o9Kfq@NS`K?RurO}`u;e)^C2&gEV1Ig(JNrx{9r{EfuEhQoNs++7udDePg^frrbV+sZ zJsxOywL2dt9yYKyPXN$n*3|}-7gjf$A}7Pe+7J4Qd%nhz2Ew_BAXOgr@zlG~QIA(7em`sEEi7Nmm3cV>CS7FLCv?9E_NmSI3} zwCO&Okmxg&dMxLOeN|B(ofFDvq-InfUE1XQZ^i<1Ht8SWZp}-CHk>sq;CQBde;=Ff zJnISw5m0ni=lNBrv2A#&FV>E54}bgGruLM9dMqt_ZnmW=LD+fUUdwGYM@3cD$(;W- zP;BC9=oh^l!LN%Yl{f*Xp9Z;@jqZd6$P>IABULbmI3eV#R?V=BzEaMDE4PS?{`L0v z2|@%3TrDRgx&LJQ!T+CQL)V^%NS#p?km$W>r)RWMP{u&H7tQ;Qc8Y2j||_XEZBWqk|nPuDXotPb3yvBK~R( zZry9LY{+O_UhO~V@!y0P0a@P}LjI*C*$w)K_LkBVAR@JaxxG=fG<Ck6WS@q|RoNEU|FAdVQuEQ~$Otb}xfG0Tw{)Xb>w0?@sDm2GTd68AJ@HDSt;JuBnZ-={&3yQvN zxx_XE6L1#JhNSMXC(4EaA5X$3mHN}_{euH8Oca+byS$y!)M(xKWs^nsvMNdxRE}z0 z5BcLNkmuajtW=|hlB$i;cpp&)Or;&9Ckv6;dENG{^WDyL2IFYQpI1`UfAdB#qQ_wO z)Ls=30vn#0dKbesd56(P7aT%d>+V&XuiA@(o2Qec0%EtV>dv#Z=4@#(ri`ReJYivB zriP7ZRhahxW&FzaHdJ<=j>kdSB(>7+X*N<@k^l3%PtRCnO~vd~a)hk(XFk`embKew zP1}8x)#r9d_<2h%Xzqc)G5MF)baqLX^^uv?I+yC$g<&d2>O}Bfr)-4KG1{Z|t)LLQ zm%_?|Gf#oobK-};hJ(Yy#k-mMT**yUj6j)=(G=dU>y!1SCVcY6Q6R<^V23{%c6lG0 zJSHzLrZ72r{=K+2TorEQ?3mR6mY$h5Z*Pd8GJuxHYuO=^k&$UHRC*Osbu`2^kzZAs zY&H#h>vp3b<%X?qY?KpB9KsC&Qe;xhD6EJB%KNeTGXlXigK=~B^Kn9 zaatHXB4-!`3zqhlF-!WZubhF9@*@oCr}CnTch94V@a$yy3E=rN-)H&*k9pS2 zgtXpZ@Q#PIoQvVs$~K0ArY{Jo7TWKImZ&+(7nKLk)qnf^HlhX@)~GjuqRDna@+X%v zV;spV=f@O$>8`t$@|+E7KvS0xgavx{<2e^Dk3jYs?sC=cyh%^Nsi7lB(rR%Yjfo@i zi{Bu{D2a}^v^mMHby(8Umuyf0OtrQpAW8O>k~&gM>oA|rc58mEZbS8W!x-;l5Ws9A zNfX;Hs2;Perg8#G28v?_P2yh^%^{8k4oh}}CO^~7PgrRoj!r-^5o`0fZ$IyEklx<} zT69(^5n9d1{TiE;0TK|Cw6YMVPt7MCp+0-29iN>S6J`Mi124=Skkjk4$87jgfyDs> zA8SD3%DbBpVzqljg})UiRd+o8KzgzmwVYE~se~xM`>LznNpT1mfwul8^`@Qgft(Ez z99M!4#V6T@k4-ba+ia6Xea8LH+iX`=&I39A&WFiTtP<|T??#4)xTuCRI38u zgWPR<2JpFxoLps)N^{_%Ep0gmhL6oHXG-6UQHaf#(5o9E9_&p^a|5;YddD{UibFva zK(xd&hu*8@2D-Rd%%ySh@a_JfFx>|t#NQDa{5}(xXgvY+``p-SnJ<3IxnpQwJW30R zCBDYl)M9kW5VvnHEGkiY)ePG9c8Y?@X9ufuNa=+$bAR3h;^kiKE{_Vz`0sXyKxdh} zC9zkk4fB{>@NG9XN8$?BlV9I1C-l!gz`u01{#s^tM>ZaQK?0;=-_=wpWg>r2b4hU* zAtM|(iTujm@l^}6g|jO}(<&fLkb}!3?;IVli~&YqokCNpA3fS>vbopfqMX@yW#SOe z@yg5STx!M5{La-MQ~i$Qo(eWDRV^pf0sb87@pq#pTaP<9GZoEFQ z+Q;EP44QX<23M^RikkcaERbE|XZz#5>BlkkR6lr>Egy4|m3BXPb&@(F;pH@T(Yo|9 zQh>O&J`}^OAq3(DXtzJ?$aaO9P(W6u`l-y>(n5>FTah**2xJ0qmvJt6G}@Th0lMnU z@{a^o-JG8l^+TXMX&tMwg}A!6jbFt}oyXkdEvPB@`q=cmsJ<-?^k-V8%p2+JWl4>y z2Fu%0+8>6bu+u-U`JU;|_Q(j0hkFq;XvXeTXRMt>Sbp6OX@yR|%ua>1+Zkb~RHs)B z-LnVK?|tXTNA$=kBtoed!a8HmUp`bFZTo)4U0FX@G;KU*?x?eY8gp4K?BMgT#(Nt< zsc5sxG>~V9TpRw@)EMlTXQcB z&B_&AH}$OuY{mX1a*;Bi<^VccSYgvcyrC3_3K>K}q*x`52;@Cz2>Nx3u2gO46`*aoVuU+Wq=x1#8 z;Kw|#i8O9B7~yw+*4x@XW1l7wsUg5vv{LC778T+P=#@t&Pgs9pzV@%#r(!qDG3VV3 z(qXTFU+!G?Qt!`q%#wVIpfg16yeMK>;fBau*7V-X1x10=zQ1@%=S0cnfeiML0}YlZ zYp%e!D6ilde$>&m$hG^d@r%EMC+=ms_*cA*B@W@#m5bD4V^s&F4h2nG)YEN3o7gFC zK1}zaK(S8+&fcqySuGLv@x~|UWNDD+=kwVZnw+CtYm3vPn`*`jKxAAO$7TKqdC-SPiGs#-#%0sn3Tv2e@(z7IY( ze;ZrmezhY@&PbiKVB+r5c*(jkyl*J!)>vR)&3R+?4?%oJhgq{-ffet+V`2b>2r>y- z7=AO%FfgDmRdqMdnn{}HYKq1y^HO@i?FY%1X`;CN$Nwcm6w6*_VHrpiSCS=&6m!Tj zbTqq{`^Woveq&7ov+8RJa@*V4^$%$HHjGwY-Iji9H0EVxW#ts!z09r6F|=m*DcI6s z8*T{>2_f71&2XR@hgr2$Rh4?4uxVsz3sVMp%3^Likt!>}h|rA{zk`~b!y51E_8R~7 z)$`l!yVq`ZZf-WU5*WQTZR<2ZhqPEEFAnxPOQX=%!{J$tUCyUgIT}cXT&-!ba zZM9|Wq5rEaNeT8R2J%Z04E0pRAxuNbH_;Q#)bxW?oV3Z= z)l_aauf9qvz7&(Q)LtG+%8J+$HF9VnNydGT6ECNT_@@+q(GM}ypZv$_|EJTb{Gw9? z%O&yvPeK@r&d`7@CALhZdYZaQlOTo96fdGnZ@+Ar6hd!w5?7F=)Y3jdymvL$a1HHH zR#25sfZP$Oha#2{uHvr-olN$)awh;0hS(Svx>pSRe|j((1&GGUdd%j#@NTpsCsHdL zC{Hpn*zKF|FEur3gc^wePpAf4iG))H8^A>ZGKB>3?DrCDaR0Fn7-x5=I7t9sNB$Q3!jRd-twu!>48g z*&|7+e9BFz#4t?D{$B^c|20E08DFb(3H%SPj^mAYR`vaV3rP_e+BCQcPv~u3sw+)( zDg95HvWK1tj4xvUFTG!|BrM17e}x-?IX(4klyKhP-#0cP{-4G$_z3|O0jDDbBrNTJ zT>fd*|NE)sA0+cX%~JG#K+V7N|Ns7E?acj2?6ykepef?ivg!_H!}s_^%W3=%lNpe9 z05~K`RXhW|t!Mj0tps_^c)3hA6Y$TQfkg`hTsdycr5!FcjPvBO z#}N?CKO6yALzt#=n$P-Yy$RzZGT4(_0QD9ggNtU!{8-wrq(|Efb81b!pDBtEBSugWx01ER8=Z zP(jdN!-I_uj13V9{)}RJGzQ?F2EB8(NBO<958gZ;tThnXUXUHmkMqTXoDHhBhBwAu z!)mLDp9ghrbS(GGo0(X4K$DT0MP|tj4FCO?W@U)G^>te_v_H4V`wj=Z zh_w)u%BOUQN2IMw}T}v zBz@GteBfsCT4&t~s$N&(>!B_VX${|QnZ`RIVeq`rDZNu8vKACdUplcO=~{G7-x{Kp znfW^{mN)icdcpGOa%>g=Zza*M7$uw!*Ye#9Dvv(|;BtNg>cTx$*e(ck#YWH9ZN3qj ztptahXxrSC6lO>Jpjdnnso3+NL?MuLw+FvSVcMu-1}hT_#0|Xvh?tLCymw%W=4l)0 ztKf;pK}#fh*B$X|bxSiGh32_S1V0a?t>546+1{^Cbo9POOB^$7IMaR_)f7Ev$93kx zKOa~hzqhnNmyT3b?QHiEhs~j3$E2X>Inn5}oYT!d+><=Et3Pgg0lCs-Xnj;Ecoz{n z(uG8=tSptzAbrqdM2M+eQk8@)_597D=Eiihwe+mRn4{R!zVQ5cTJh5(a_cUuo%LRf zs&iU7VsQiE51GtK&^z;^2oo>$t2{i;HQ(TKz14&~1(4gw*cX&tz3z}KX8*}N8m?^5 z5q`CpvA(-YW!0&BuW!_sRo2!*67+mdtrM9Tbb%52Ym}$}bocs|xZOZED~h06XH*%X z)jtHX0CuozCK8CYcVu!d5fdPlJB5=91xo6+Hy&@< z9ZytLZM$Pvw1_&&*OyOEjz3o~R8+>uT`lzbEVoW&K({vBkM=zg<)vqC(s!`Sp9dFa&B=m?GMHm^dU+~^oz6aRIW72fPydP!Ws6j!6lvk zJqh(5tFooTwa`8JSr*pikmb0|?}nXe3B?8RvA;3U#Y4Gfj>rY<#@ieDs>-H$q*7k; zv2@SJuT=lev%C~5Tp6Zw(`{Vsj?N$DQ}f40N-Iv)!#guZBgV(G8$@0xDb@RLnQJLy z^VON7OQ+rX*a2MTLo%hi>v(2l>GyNyys{aU{l%0qS9M4aq07n)NCk;IelH@@UcXS< zdGcOFtuoL0$`gTe5h1L)Xv*5DyrH1|L*MIs z{>J2z)*F<2u-AQz?XWL5C!7U(W8BA+D?UsbY;tX!c`4jtLWZa(PgIPfXZNH|er~vL zh3On)kRm(CXonjAvqLyC{k4VPwoUr%mc8c;1KJyP;_KPRZumLHn< zjym$O(EO*gK0G$`W8yG9#gNo@di$r?!+)EI<5KyqZ4U^l)9vbicPa{Md&4Xg^B^ef zh}WIyO6XIMpRWAJIB_NFdzjRlxH7q{wOxZ+5oXZt;o?1K{!%fE)o=HV$K5_;CEEHB zy!9KO({q>LX)loTa~u@xx8xe!d^?~ZmxVf@ECHqL3mWOzlno5i7evTfe9D)jL!ZFC zQOC)|i%x^uQo)7626e}ShVJDBLJ9DNFHgf~mD2jjH?}tw`YtlygnxGX*0g8uSLU@o zB6Cp~EPH@$@(8TgzvE(>1}8*Vb9o+nJSJ+6os({b;?-Bla*%^^>EpxdcPf?-{P&6% zAB|Ufm~|6}Q~$acuirc5?DoF6*zRon_WtURJ9jjG#02LAv_E}!|20j49(;k0TW?Y; z<{a3%Y!EdeuU(R*Q`}D4w`lo1Ixl;~#A*JeiosL)+u8TQ@;C2u+m7A5`Qv8!C$lZW zoh`~1F-e`QNu6eM2b&+wwwCM4PSUTF&G?jVOe9HyqwA$R1XItxqJC|6(J=S(;V&G} z1&=(=IF8rcy(?G!Huf@3L-J+L-Ld1h-kz0|pl1vq+{%zB#O6i(IX;7_hj`-q+0Tf( zd=RM;0Gq*a+C`jwElvbGzL&WSG)XTpFeX&9;yI+wPtz(PD8Z}eFk6$M^hCJK8Ad@Z z{UTd&+ZtOx)CWGgz<`<<;AmWf*;&%q#`GsGXBk%{-L=%4@u@_mB&InQwmS>0;0BLx z7D~R;`IKu)ZFk74s&9T2t@f30B5cF|p*r z!=Ch(Q^t;v=uD~3)c-&z#C{e^AK&R}4@B4F>QET8w` zEd{wx#ZFD2GNT~8i%tK5RYtTNd_Mp*Q^Q%a`9%BcTPj86)_tYXVkjRsimlOp~0 zBWnt#Te+g@MJTjpYG)_8Qad_tYuL2D`CGUq%g`(&WSv96OLfTjq67JL04#ExjD38e zta6}-VLa|29NO9FOGfzuF9Tbs{o}q8@B|pq4|P6V59@T2mMuf z8$G~1XDI;V=Pe(~%70W%o7VPt{pXFoYpDt05&efxESSW-v=uJIb349^6*>6E{y1)1 z*PG{0E27f2(k^LZt%Q$7Xqm0uFsfnoT(X$f*7%Ap=e$kKK}7Ua;C7}TnvL6Kf}`uW z0pPM)O|6e7yxIh)gZYIR>_s~aESZdN>pN=>=8{#dx+gqn85EWoE!JIkYirDQ`8Km_ z)O_?j-h#JD*|u!`hoQc_65_pmZ{Tv*+t55)OT@UGYEDW}+g2k;Uda|*BwUh$s;pdI z@Vhq~9{DUs1ROeDpU_e?a5u71_jpY&Pq?$wlMj8|Xgt9y^Vq*UJ*INW-5VTa=)lO3 z_pzvd7A*RHz0UZqBY^q3M0h2?h>-+e*-(6}oWA$egj?Co`dMNkQ0fgp!+-$NM0C3EsZ)Gwb<&Dj63-H|(B>^ZS4kehocD1c2W$-TV=CND)?&zT&Do<} zPXVrLBF+EtRu5BCP9T>ZJV}O6LW<0ZiHQ2W-z$+8HcVV`v8zMfJmo$582+#2U=V>O z%NNCDD{}Xbboy&Gi=olFC){(Vc*e>~9^wL4s^rpfnEHB78MAhIEIxnw-|ag?!d_Nr z{tXfS?E+1yYV2@KM#IwS>2AxGVk-ZYk%32VSS6CghD)1f(JJ1JWh)ZuCYzm^L+Tz* zHC}bjyL<5&89A=oMpv6@I}Ipkl+82z;9+0IBk6gSzlBj2YmLvZeBWrD0KXQp@c!|t zwdlFYB<}|;Ll5m~{i`xIOCCo4NOuyT60iJNbn#(7{fMNVVId3`K~2koVEi%T!fvy* zV5Y!y^g$t%h=|Aw_Dt)V&1SDd)p<%XbG^lG1e@1lK@^=X>~yYmv{mm~I>;@Y_za+KU7auWPqsJi2tk{(Z7G}IB9~S|ht<_^NRu1lf6;?5f*?K3ad}%* zj4Xu9476tZ)s3rb2kU7Ec|@ho>F}jW1CN*A z0LD`dbzZ5O4h%57OA5Z7TY^oOmJQVo9G%aE&&eY<~_c)>sI9}boqRoPEQWy|wZF~M8*3{J$c zJ53vGMdFiBAX7C1R(_wqjKzOnY-A}l-apaKD}z)x;kY4P$>^&1`g?^_$0~f{eu!QF z9wKkUB*ML#adC0OEg+fvY$Lj1eA|mvd00KPfiATdeNvk!?6za5wy(oNU^1fSUJaRx zr?nOhj}^2^p4sg6L!(JkK^0}j!%JvIci&(S7Kv3Wagze3A)aXFfjz#m6U=l0$GR6y z<&@l11?^Mj!X?#VF_5!SXi^^u95#ec95SLd4qRM3Xy$q6 zl+C*?_6sp@Vy}x6q?%~|p}a8L&L`({H$|*N2{V48qG|3#zR~t{ee;t>agy zb|!QT!<3bWdN^=}YwaILO?Pne8<1kT6dquly{}N{17ANF{4Il>iPiaus=ARnWWs z>6&Q3y2Mc(dH{PHu4PkKbueBWCnN+~=NrjTNH~{G%G6O`8k4@Yil23kg3v++B=Z_& zh9!fa?w!{|cdKz{_MURdvt%?tNWhH6`@(^s;h^07%U1}KVBXMkWm>-aC8Rro_BBK=m@XkQ2jm}MHuAJtlKXoU}*fTo`KZ1Yd#u>c6)y>!a4b~Vj(4YWm0i0Cpj%nMp^&kz_S(Y*3&dMJt zDgninunydz@N~bR*qSQ5ZnlndFq1J()FAn2iNrSVO@#dy2`$fd_1fv}{nSzJ_MiSn zc}Xm3uHI`71FI6E=mcS_bX{qQ3Y11QF`N;K#a5u^hb#Q~{{w zh7mli-wo(#UUS?(9xkG-0OsIw?U3ff4LCyMGqgY66!!e2t^ewwZ(I&3tavk8-wm;3 z2O%umi0D>qZkHC@;FnHFFGF@##U3GOdtc>MEoSfGbjp{)>^_&cM$Xwzoj1a+5pj=y z?#y&)l^#z|lNrEb$@1QFr5P}mES_uwOnCd|a|sr+VAd|q&(oktx3l%J_a#(MXN)~M z+QZJv0bb6rdE|~S0|RS9g#S|uP+1aN9FdrzogQMNkb-(5e>1lswn+O;N~S}82>43l z=+V%XILH+SvyTlJ&OkWPczDC~l$E>P*7_ zB*~K^zpK_%1usRfb5u=(|d50 zs@j!JozeIfNK|r6X+sqo80xqp)=z{#6 z^LL}%`#BQvEIFR|GR-Xr>V)8Q#g?WbAd_EUIxTok5s~R*Nh66P)LtC5&PUXlr2ika zP5`&F(rHmK=Sbnr!bl3Mj{RBQoqO9$j<_g-!of_+PX=cojRv;04px4tiH1M+JS7Jw z9_NSD(GO=^4i67=a&dK{r~e>L#OzpF-HA4Gg!y}9Doxfu4=u)D;}5CFTPSSAHM->w zYMvIMFMHO689iwk@s7=&E#UTrXHZt~gA26lj|8V#$Z0Nn>|dh?fd_sE9p_) z6(X<1{CxHiG`jfPH;oX}!#b(Ue`5(Xu%x7vb@yY*9i{$o@;*=ChTHpTM*wEfOY5O&i zD{&sSnIt4q{6eIcV+BNcxB`JKb{&u1eJKA9?-ADiyf@%!>`ezM&F}t(uAWm3WMrDH z{~`Qa>H4}lWpXN-n21rdU`bOE3jZIth|{Sg*hsG>o7K;K?lkj-2%5dgmHhi7&7Mbx zwSBn&TG(vN=Px@Dr7w?v8hUIds*)f+BswUp9P<4Yl*pcQaD%3)G@CyoqtH7Ysq~R~ z^TwY+9Q)42(noeGLq*)bq;RB;63m$ z%yF@1_bOa};rYfYmK=ZNf{_y|MzyIzBoNQFj8ffP7yYe{M$OJ}O^Mvk>JJPrJiCtj z_$2XPiz`yaYoDob@W%RqvJc$bBH^~VY<>^RS@T%$UCC; z{pGcc!i#18gM+q`vpW8dWw9CiD*}Rfs}+*elInIkD+0U1dq>q7?|S$2?)2+9=+4jf z>4z4J*=9K3IX`O%iKGF&{$SZ9Nl_kKxkRhvov;!4!!^%iiMyJ+@`%pb%Pbs~@7c$R zKRODl+J7mbydmr}Ns+w0xk?g1u~_-*Jm+{Dk1Xe;9{3>O=w zTZEQv`iClq3Y);(L zJNt7sq=qH#&e}qi*jh4k;e+z`4lZ$@t7=4sd8bQzdQ{6odeVpWYSl?~&}$*KEmP7t zz|cnN+_k0aVK^^Zg(~tHKQN=&iD!l1s1V-Tl;g+#;FK!%gQs?Q?3n;0V0ZJ zjs98lyLIOTVKSUoq)2ZeuNeElrCy-(F=LSgy3lu0zynhb=;YKkHO(TYa5?CawmwQh zmDS&MOn{8aD@$;%&3zr+xQ&VY7R`yJOVJsK-ypW)uv+6gKJs03eaxZcFRM8@zmpKK zm)SOrcbOKfbZLUJcsNw)mQ`PPAzo-M1I^2NM|%O?PP9_xRmaFHMm3CL@eRczWm`*l zf*1uDXV+okZi{7F7Og!Dv3a%3j%-?uV33loAuK{enOc01a3#kzNo|NCo4{y} zyE0=V=Yb!G*SpW1Lc)tuD3j}$)!ntnY!|b9k_c#UjQ9OH?df*##Rdud5J5^U-#Oif zLl3%lO+W-Xjf!*77rHFcP0jY+Q}_hy))`*-#m}_9w-xslXeb8h92|zS7{sW{Byu4R z{#lu(GWQ%s8AU<*eSO+90)kZs?}N^msm0l7bexTgY&1Iw*Pe?q#tbwJf2s z+c2-m?vyH3c?>^89&BEtRT->EnwWe2(sASK{2OyWE2f)e*sdvhtn1;|J=vN^syo(l zan2Wocsy@EHa1Pi6?~;P{Gx;VG}+#tkKy`j7MxF0+|CarOSqKC)VkGkDygY<{ch1Ohq z!Lv+;D4s*g*`)XtN&tBz;l!)WlU0tImEI6{l`85jp3zk6a3;UfY(=&HpK?sv*5HN( zf!k|v%VOc_m5LGY_&vy8PrB|(279$`fH9}lSx+}kAK}@XYy}blPjC5_`;_KDWH)fz zDSH_~1c5Z?$%&;MgGwGFK>JgB8&&6fIhuxncg|<4z_Fi89_t6TdN#SqmYfkTWaixa zRt3H|(uhng*T$cr9jbUcj~hW-qdd{P=wx?5?hZxO8*?)GDGGO6-|^@0w87epIvCzz zKwH^-y96!o{)fOT!Ko&GuV5iw6|61C{s|`XKLUl{7?wOdeqXfm1_@{?9bT?uCkV5NpQG;V z(ZEx6!uBNLS@^z2dE2Z)s)M~ zgq@t6$Y(`)vV#PA5bwEYQ&=>?>qswo6>!KDV)Ejp3Jp^Dlz9y)NiHdK!;#?GG&fbf zx7JViROq!$ugKP;vYUU9AFUMX`%LY~sw3CeJH4b{~m znk@<~p9vYwtqovc?`XhYdgUQ=QBTq6xS(}MRWC+Ahc->Gq-amGtI9>YVK1{NR_nGo z)s{BvZ+?nvOz0Z>c#GX2J(|_`3p|KkzY7ox?Hy6$zFVco<;(YdvhjK}x2=ZlzX;^8 zg`UsAH668z^htW+0YL4Z8*RfP?^@-xR40V3sk1tpyiO5!a^cz$&<)R&`Cy`;f^PVk z6?0ykf<8mPTg`DW2|*@g)jY&i!cPF2FmfD#kJ!>Mr2NkK)s8-UG|^*4&u;yL)^wiQHkd}k~)Wtf)t#@y}w<%R(8^!hm zb9^%Z4!7@sCni#Ia_eWczWbz9o9Jg7Iov6Foa1?618JNmMWHR=er63boIc;Z?4O0o zuf5~>T#-3+LR=7QgX&7_@`KiMvod)=tE$_3G~4>}xpWgAV8=aCS9;smqY}tp+8PMG zt&-Ue5I(1dpT3Ko=!kKzI%eAVdbm=}q@%67rHw0A0N72+rR>cbAtzSAv=c`*)zt=} zvy%tkSJGLnr_y+!p{Z4ibM(_mh1u@OeF)@sb>Ghkx4=agKH4f;FZY9b$+=9v#NRGs zsV25~E<2{c7MP#6s}>W+Q_QNM9H!X-T8VOoE;CW=kYD7A{+Jn@`*`_cJKc zM>)J+c&@g!>%Gpqwy)57?p!}Yy<1aB1mWi5tjJcFu~0cTe*(t!ovaJ;9hRAM zi-XzKoT~l-BvqfQC%DZbjT!yoO8jD0WWGM{KHuPn9GV5ML{4RkWVBni<`-1D0>0#a z2JdXB`ko?|dkv(km6N|3x`7~w*P4OH7uqp*tgwv-VDaIDvoDMUbM#>Qy@)#pEKhbwq16(g=(Q2P#8_px;hL=q_-HF5hCG_+lT}_4?Ki9V_o6Rk)#N=w3Asf~Wp4D&Z}40|Gq0-DIf^olA;htw^-T1|Jo z$*xI_EGJQ4Hy;}NMt35jIdbj1qKDQ78u^=O4oB-+YwMuz8SL=Kj2m?-8T<>swRlu$~T4H4@KE7Rovktsd zQ{mBj#7%3P5+;Pr$iJDR1NWdo`oo{C;^tUvMqk2&(I8?=Tal7`G8q(>P=LH}epxP1 zz+oZ#Cf+AL>{iaCHox01KYaM;&ljCLx17%^?ryhv%L#ghSX9FLc~8ucqxMtT)1h6i z!tMy(ZoKPKAz&sUH;>^c|16y}QgeLZX1sOL&9<@I)4{>e$7F?9E?hIBn2p$#Ck_T* z!dYrn%BDp1Vs1~Yx7B5`txc8AvGi&-0IHB;*HUE)4VvWqVol&hv5Dq)Lmr-lU_!>< z-o86lm!M(w;*%mf4*mHDw^1oX6V>XKltP)rO3%JN1-s@O>#uQr*2yL5YcHo%DFpnM z-p$^2#!-h;VK1XE-tTjMuF}%^S69aFSzbFT4kKKPpI(EoQeTbByP6{})0F-GR92b6 zqzz(FVP;l~aEGBq+6SZt)ygx5m8^h@hXMx0d&wqMaAwzH()imtR)!Om37(#B3;Kp@ zMp`8^okpwQh}c??!P|N?L)6R{YLY5$pV)k(UZYl1VJsNoBR1VTnA$Wq{}{&IZoRTU z>c5|qAPOuFr+ImOv}Q*&_~68e?^%&IVGPqfUxSJ1bOUQxk9JA^Sthh}Xl&aEm02lp0Ed4Z^@1{@)GH{f;J>$&eg?+> zNJ?$VuU1`4D{ErPZL1N^&~a>=q>^{Y+0U$I1NP_mvT*_4va1dc%_i7H0Ih#eX=u(q zNsje>m4^njI=!tNOQXOMxZr0ncrO0wgsyG>(P)8Y|5Xzm$7)%GJ~be+IC@iS2Q@V9 z?M6M}#sL1^Ih$JqEiuV(b2^@5`zRx*PQ6_C?e{x;h6r6-7M2pfRfLuPuAo@&J=lAN zn1|@%r5({dqY#`{Q<)+FT$aPZDgrXlO;|5X1!=dnqCPoC7pZC)6iWpC7%t1mJ2*Fu zd3aK6B8MMBmEU61)CAyHMj_Oa7l#RMoG)*A**1?0lC2ta4UR^EjJC7+FPJ@R+e(lr zeVtQg9iOsnwL&=W-)}CT`UFK~xfJjhn;3q$7WHB9osqd@^+iOFg*hbSSR- zBq(?69dL#$5#OBcKtyDS%oer?+}~dziL|B*(<#1>&uq)puU1l^*?GoN*K*Ufmyo!> zQbxZ}{{XX75qBeTT=qUcVLQC31wQ;$GCJRx!)~?E$TTsaSw&y=L~Of1Dy=nH2$JB9 z-jGtfwO=WUWqOOqjC9uv>?KypJN(?J5|SN5XEi^m&Lf2OGiC06C@UZL*?fA`Js`wN ze#3E>U$x_#owDYW#atszE;(dC9D_=503Jq4}%HiL}2Z|c^Gao}-=z(4|&4dCGe zi{U`^ht;gc9c1V;9GR$y=+syF9b_0H#2@NU=w;``7*fS;N936J^XBo5j78Bv`6Lx6 z99S|nTX`BmWT~jE{MgnH(wW^&>VCB_0CXf$u%x&EAO5j&^D#Kuy3THGbH__WBndjV zcT14;3*p{L)>u=0r)ky^6PrOfQJwX+i^X}iu*H0v(!olvz2SslA22N^hXDW)lH9Ve zT9f*suDdJBcCuj}Jbvo6%@6-PRlGEnl5;Q5KpthvAgeC970gfa>%AUT)W?yzU}j?o zvb@|pUDZ03J<1>CdBPKy`H*Xe8Xtrl`yLiaUn1ovidvUDRy`R9sKuIpIK|+lZxb$R zFCM84ivKn^0os_#HX59l`JK4X(cXPyu5E!?@1cS-!i$|~`md#632~5-dyPMBcZ~*z zfVv>O8A~0GrnpQ%7X2?YW>%+DPJ>}Jr&zuwzBjN z>?>>;^8vWR1-0XkDg`0V1rqe46f~aNl?zfb53&oY_!;7otScm(vY1ijXLfD2x^4H& zEet~6bMR}o8Qsz`9QOj8Qc>ht5@ONO8F?iU*e)MYEk3#H^a-AfB5Ot4<#o?f zm4Nktal5r&@3dl+MceiKM3Ph`U7K@1$7%_CsG5Q57GIRC$X$d)ap;HU8t8}k(hU77 z8;XlFn-<@uUzT-%FGQr2d2g!>#`KnyZmI6l>_-g7jZVEgN$5Tju7>=iLZ3@06EgRy zmd@~SR^m0^H}Ri1%^k*I@3-DN#!tqB1X18D>m(j6AtA60OFJqxuYqbCGu@?!G93R{ z{F9YaW8BMKDKIE(%BDe zxlCm$n%lUdy!>9DwGCd@P=D%}vb9fBca%4UiVN3Q?htmzGSAf!Sb^J4oSv!P)|$P| zSM814y0}+k=wa1Go+gFJKErjG@tsWb^PL!N1wg*!mmXF7tz4mH#BzU-c&-=&oKJ5tzu*B64*!i04E1yk`hhtc<9t*)P@pNWi z%;7VY34Y)fjTTnI&O8NuZ!p^Ar7J_6TaV!BlyTS~1x5VU(%2CY4Cwq?>b8Z0P8jcz z*1yG;z8$jPJf$<6je$&}LlwgADsmj(lSTZ(o0M?+q% zbP1XxT{23?z|~QN;1e^oq}uZGvSNE^6?YfB-#~q{qQOdH=+%qg*95Q>H#a}+cC*zT zAL}ptA<(2tIO|{=FkaqNo2(^BxgM$>iT;_Sy++jNc)V{NdH2Z=Lc%-iWtrS*T^QJy z1CwsKt&vURJ-o-u6P5vdG;oW3Y49m1qOqPod9dv0b{9P(bH`w!g)6n_e&%)hX`4&%Ddu@nPv5t6ZTsZa)Xy2 z{~uCda03_TgUS28emSuBqGP7P>;nI({L6;25Kt{vu68^UDU7*YdK$ zle#aV>cc;>f7!v+2*D#^fL3#FY&ye-1R?)U+wYkUTN0Ms8Nqp|b5E9p#>B)`Af#61 za#7~+6!P*|LIqH6?j}jJ>t*hYD8LdbN9Z5x$Y7k7Sn+!C5rhA%GyG^6`Lz7ao;+^e ze98y;>M(GnUEgFIH4sylptkIa|~luC=^@rdDpH3FrD+Zs$h zvDXgMbY1kFtUL%OPf4SlI1OiAwyUPJR6lODST^V2!hVJf@~FfO3;sktl^C7JkW%9f zCX@j-=UtzTeDk3-K6~e(q9AeWc8j|WRdUtHziG|6MxcOnrQ8{<(cx)I0y@OBaw+x3 z*|F6^4~#tWA9tT}WkJ$wU4%GDOplscT?4y%q(y}}eoc?`d~(0nO*uyU*E$1V6PHm; zob!+~^Xx>QLe&emyn z*G5A|hIJt_jBoj1;Xq=Rh0ks)~j_ZH^ksO|^Qpm7~D;F6Zel zcD`voISCHqMbnUw5`l|>(=93)!ggl=2*vl)27_{`gzvv+?e@v^vM}H9Ne2v^9`Tn} zFV_Ht5pk(MK6zX+Q)alNQKz+(G_v#YhUyvVh=>Rv=GyxtGtm?*wWQ8IoWXX3P5Jx0 zDMO4;THy0Q1IE4P;Z#}^yAe^yP<5^dPD=ESm7mxhO6T1BQpzgE-^Lwhkult^3%1s$ zYW9lpo$K5_LQ2ZY$}uZzNf6O+roZg87S|h^>h>{r0Gu@5P+aw4=s|mZU97XN6+U#b z@)Y$vk7Lq~pTOEHo0`uQ!=!0l?wD~{8~K!yQ}CHuw6284>2fQ7V-VGy@FE1MwqEq> zf3e4|%HMo;sQ`)k*`~oBoc*^m-8y(7M@a6yEkfuHdZ(40K+AutCtV9Xb@GKYPHt2)iUK17CQLf zi|KLb+q#lEy0{Qx-B3{X&m}1hg9%YO2As(|@>d_YUOvdbPntwh5}XRZpdcp{WShPJ zk^S)Y?R!&=k@nnUhaak^-E)F$)VfoXY|rO>mUqXF@HU<)I(=#3Bd08U=;Znokb((( z@$G8m77z%UPgy+ZNL@Koah+oLP>lp`I*v0Hh{66=77*2SX&W2QzzUr}UCsq3504K9 z-dFnTTD_=IeMih!Tqq`F7h2s-C^3P;DK{{fnA`gslTt%WM9j_v4`D<4+a>(xc|&j8 zspviznkOpf2M`7CM`}NPm3ih@p`R!)++igsCCT(x0ZF1NZkaJ8T2rUdh)w8?BB|gfMUYkUJ@LqeP>L}L;W9dBvP_}3oVFJ zF|KTXd4*`7{l5z*{*UWT{y&ta{NJws|0wXRaqBnx1n`6(X~Gz~cFjwr9%(to1uo`u zecgsOZV?=#n!wAU*Y3FZ<}q~3X|*I7*>FyBxuCdCu8=$*w)Bb$Bm*9(kr5MWj-vlm z;yf+5OEqFsa%f1koB_)^6%sKzY&*EV(p^{S9enKT9* zn*dh2r|og!k=s`Oo@pdOBm~7!IM@F)IE0jkSMbFRjjXUux_sHQmJu;_Lqag0i#4vP zlz=n-SHU0O*{1Fn#J14WA~B*(g}F&_w)u*ruU+zFJN_dzNY#*q>fWe&(87uBua0vD z;fAL66M}6#W%*M|ot5u;|J`%+Ad7UK(9kYO5Kg~(***X(hdZPp9*B!xh zyxUEHWX*qP5S3K?o!XLf%Umc6KhPz(Z~-ir1Slm@Jk#&Std4q$pb`Pz4K&2;71#E; zhLZML>ZTNZAwkqwDY*OzP$lO1qd+L?{da~~;TLE%hU~8&{#A$45%wH6{**Y)k(&t{ zYc3}Bjl4RCG4yWg4jtVzaaWGHeYd}sG+a{CWGM5@8&KsR%~pvNwf@ki#$39irO3%C z-kgIbBukNWmw2%~Hqn(|1|`t;_xa?vRRpIQ6HiZK_?3z_ryR?S7bkyc9asN~JIA#p zCO?M0kI_`J`8oE^7|Bj>mu3FI(ab`xW+RR0yJ2i`fgm6+&)pBvY*K5ME?ZOD5cwY)EjM_ocNwJ!|JTfJDELLj~$Q|0$y57d8?v z3=u-{WNs%6I1*~ZFt1)aeh6%Nc%VEl?d$nEQ2pd4!;KP{OPkH^rY-HA&MAVIZm3-N zXXD^S;8$3Jga~7|TbH59`UXFg^Zw(P-%UT0lZU@@)O$}t!soyIf&SIxeC>@aIuYTO z4XZF(qEnsqxkr*JGlYRap2xo@ zAtGY2sdIdFpfsZ+e`GmI+wbj871((@GxMt>X(%`l)%@u(qBlGors-i7d91{&>thE~ zq?9iCB5Urv?MG$gk9A8cVSwF=Pfr2uIs4}9ir!f-W(pNK^S%`)4T)=?Ac%%cH~>f# z^P7Clbo?1(*_b|N%`$3HHFnbA_gvz#4U^hD6bvkGZ5aMJlF$bbD`yG>1 z)Aeu2NK5NMtE%dztO|Lat^XR6XI>8#Qo<#!cbp4O?@v1=L&+`il6~4|NXO3l>PT#%yee&a@Ca}@Evk;>To-K0`LF$A3ULB^H>{7HP0Zj7H~7`|YG%u-zL?&9ix`zpfr7|*^YHJh<^ut5;= zt-r7~-ySr1r}4hm0}FMaX#0_TtipOM+b6;NBe;!UW4?K@B2GW~sn)dY5lHnzPX}lptmOo_ zK~pR@e9EFW3XKiH9Uc%9J#B9g8vkwk1E@(`XXZY;kvu=)_Bo8i#MZn#E0`)+n@1P* zWzLgtNM)k0rlKDHm^QImpUT7SnTCWK?wh$!>1r93xu1I%$e!4KR4*k|DjHtygnxaW z8|yTZ?7Mxt^wZeJZNb+iBqu*r9*D+&Ub)sed=%g9-4)PC2VJrAM?}FL{&7I?J=~8e zs2}F4-Nx#SB-xyG%cNf~BvAD~3wHBg3BzaKw1)L|JVV>BT?^*qp?d{Gj*G^EzJurW?`(kyo$jNp|a)}@k2I=uM z{*&J-@z5}xKNWi6N1z-2S6|d``q7Z$R9-cuh^_6yr0I1`I5X>-56IUPa~LB-RMep9 z*uv2LZ3{Nb*O`p?S$QC{L@~nTRL}iX4i-i~h(=En6U`MV{_(Ho-V%R)blVN98LaO0 zJWJy&jVv{0*tNC=7txHHf9){9(RJ3<9+Hpi`);>oW|}b@u%h3Zz(9&l1@Dn|7*e2Q#0v zVjfOYN;2^YYP;9sbz$jcB?I0U4vjX&Qt6rmz&&)gPc2{l#sFX;4Et83M`bBHw5*lU zSvZ!%s3=@mJyTwvZxQ$KVQR^z89hFFwV2MMuaHNa0CoY_Nv$6(7$~fIk#;U9Xo65& zkvOeqG!xnd=vzMn$&Ju}diJ3pg0oX}sRoQK3)fH4HsTco(_TO9VS%7bsTH}Rs`=uB za@9cy>-y9?f?32_@i zv)EC%TpH$*iueCev7ysS^I$6!dUR-F#C(UDyHoNevIvtMLd~+YuQ#+@A!rz!noq=4 z6FuB7Mfc-6m79aO`)o%AwmPlM$!Qk(a;G#0BX!@f!tc}4pJ8=g{|TKn+fo|!TzG~O z7ns3TC~2yEW*uvv(Fu%7%GETMFY=J#-4U@ez0-i+^Ut(|vFdLxu5Wpu3jAd7S|e|8g7Az!H+f-=g<}A(Dr0ZmlX2{=0TGp ziP2hW{HITIZPd|El6o+71C23zQ+e-Z)?(17%QP9bb6@=!1i2^BMg(>ayR1I<=v>yC zG}>y?n=~N@Qk*m1CcDPD4s6S|#`G8(0vnLY&ph=q{2v-5wYy zNiA`rkV<$PYW1Y90n11+2;|=J>HPSZ`D|&YwsDIPI|2z4s>%s$V*IA&uI~B4M`f># zMY4nCEPC!@22(mmz~FMoeP3Vknf0UmI%hPRIudJW>HR7Iwn+MUAv+o|>2^HzkArLb z#&70u*l79%6(cZ4_N5nWeDmKY!}B=IgkKlWaU*5R((b7M&S=%glI%eNNnl=PVN~7P zEq1Zzy*IwG5$G$sk@28_^=xrbp8LGS9Y{D;&>SD|$4CAZlle}I$zIOWt+Ge4-T$_n zpI2rVH&frTRguj2{E?#7wqY*E{bndZohOOBnG?fSXUMKLl#j63om?~y=Is%jbApWq zv0nOHD$he^cu6ZWuF0_$&R|8|=ptMia=w9WYUYlYzCN=zDd3>DK+~4UlikxGY(vR6 z52)rPUA{Y+moyc^O3|T=xZ~deOT*8XF1ElEQoKe-KaQf8GWtw6>wA@b)wk__PNO0! zmnlCrShq{$*9Z1SIR!~lck?qIZ?a&keO(0erW^9k3q8;p*o&!y69R0KeHRyTgk>Pw ze?xVp5p8eq>U9wN&uym-pNjEZfv}tRwuFrAs^pMTbT#eyguie*S4N!y~JC>{9n zKml9r@50@gVuaDC-KOoDGTSuzeVq!J>s-4!xjp4Di z`*-b%;$gTr0*t?AKq$}J2V?7v?@dj(n$1{AcU@YL({N^&#)TN!^Vv5h?pFxA zAMyvkH?VVTWEASK!#z!`)TkeE_ODMW3{r$sdGs3?dF@w%Z9Bb~pi*_}ZQngTQDO1Y zB}z&w?S;ZVLanXzZr{w7X7tH^8JRZWssRZdf_a+!OUm(D>n7Iq<{kgR5#_ec#L@EIFd={9R?PU(b4A6&*Idn>%eex>!&2#Qg*}H0!pNl@5b&%g+GIe( z*;~^Xrz8KF?G1i{B5wVwLSAo2wMaVEXvVnKK2bGcN}k#JvQ{VrV5see<9dxEG&|=H zaZ;2Os&qy=F3D!^@ugWaB2`(~>fm6*!GpKE1juDY6(ZG;Jh=yP3)Ahcn;SxxTy^!5 z%oMVdns4x4+n-akwPyWpWOBWg(|%!9WdQMO;258G8*050Gymp6%1g5OLYfhAJwCtV zLlil=-Pg&{{@d9|B?k=5{^+NrKhOH%eZuME2bY7koPTzI8DGFZ0kIV%vqq!$CYTuS zdFan3{jx+%z@^cklSZa-KP4@s>PTp6y5)PC4H5ZK#uO5QPxRA%@^Icn(on;<4_%={ z5PmJAy^le`1+M!~Ys=~hM4!Dp{vo}&N7Lj~bGC7-lUr`qZ|$(K=8S>Xy%}D;hszaD zPucq+Tbn#P^x+;>_hiQHJkZxlB2zsnU+qw(ezDj1Uha>#VmNJt4`vS@B_}`-S>H?l zii~!JMJF#@r(!RxQJ}@@qWzctM@HHkUIX9h3FQ7TI1^(#v2E4BI+XVo*e7%xf&Ge2 ze`S8l85b^IOsaLB*&NU&s+6?vv;(Kk7>Zv@L2^KMf9e0`K%yo$=qc>CSHJea#AhGg zeP$^@Jvj3ShOG|0hPDBAN!c5{ZBM+A^LA%8HuqhqI5qDOD(^O!K8cJQ#|X{yb)*6c*SD)M2flHvY==RDV*v60^t`S)tf zSN2c7QWD)~Cy$8BQ&}xlfYj0~=++VEt&{VqZEuN}#y$y@5^0bNZigZ(sihNXl~gnA zhQ^7}x}9eOE7y~i2>Zqr_ppdU>x#aa7A#j9UG`($xVhCI;DSB$Xny=PFGl7DLQ6OMD%a@-xtgt;=ggcfIzS~tDzWb#MuhQ#hsM)vv4MBFE9I{33?oQ^nh zn065L$j2F_%$Ry0YF8|&aU|`qj^<{&Pb>D<9VCS_j`UpWvgQWf-ot7_kHKL3;sQ%P zmAEQg8a%k8<5FIJ<^m)}jHU{hB;T`*k)^`Sqq$M)k`?V<`+Iw&@AitDzHOR=sa2R2 zXul42Z`ZWGV`Nx{3(Mjd3aww|PqL_&X#Yb0P-c6#$T(0-R|uBNY$+%>Y?{17INIXf zXHG}>XSgbPq&+%aXqPipDuu!94M%LU=CC^VYpe?`S`+P1Nf!+!6Y-K)@)J z#?M3i|9laCCy-gDUf{K%WNm%M4^4)lMaId1NvG#N&e2M2KM}hG4;3wUWv#S6FU(29eIoH8Q5Dea;5b za=nNrYXTY@{>rgBEKKmdLAzL;L)R9=DDi!SLlt?%)P6^$V~jw?{##oPyRF*qULm(` zFMCdAa&SZ9AH+3@JkvLnY&6`Vem3bcrRKI25yx-j5Nr=9TFEm-OB?2@da0t3TrT(c zaHE;4`WHexP1&dIHg*9rVzc{4_qqKqUH-K6*xXNZ7q(m29dEBcOXp8o{bp2^n3cxE zUuQb%6O4c%tshowVe2dKOVs>VHIuRg;zd?_gPH+f*=Y55FbLQnWY@Z){pk0eb}dtm z^unznOFhnr8nd|KMA2$u-nK+;d{da#^fl-OcG)GjvCICcVn!DZ5^U%Db+$f>+FD9h zf?($aShqq@qfvz|8WV3*z%&;RMSDA?7$B>B_-_yFk}~GZT<0Okx>ZVoCct$CRRLG3 z0I%KqJMd4dlSp6l8!CzTDnpQdqU>iW;t4=CR>R z+8+|?v~=1i9UuaQR1TAlv`7=F1MBlDd`t*#8V{h&&$rH|PA+8My6*6vJN2{i)bh81 z=<1g{yGtH~h|5U_?P(UCclqh9wVe090cV7wnQ$2XtSR1FhE)IevE0j|o%i^;wj} z3kRY4%`HldbIlb|Mg>dB{Y(pZ!@9m+MPz{Hc>`Bvhj7zuG>X z`I7@1PQ4!3{T1B6!QQ_e9}G)(B{!ZNH99-KdXt5xO-2xB;)HBz_*o`Aie6=xOXw+> zid*5k8X@$M*!?z@m-8vrg(E@Vhm9|eoM+$Koav|kI1y3(Yw6dz)=E|)eva54Nil2b z^b+C&&C>6wbnoLD&6LAq9ItXQ+IukdaDPJ#_g6hg0xclXmf*dWLpfQkvdE^9uIV3J zYAyGf#8YQ=8I$VbPNu>uGEnCv(CDY;Q)jSK>FD#;<5BBVNa16U4C^u_ZQ9R@+zSj7 zi{D~z#1!eS(ubtvmDx&r)JyMsUt$pTD={<6F{pm1xi49C>^A4@?)o`0`9Z7^f5sS2 z6GXl1Y>BIB$7Ab)2MUk>OpQr6hQi)JU+KOtY+boFwtM1<~jY_gTYVvF;y#WvD9T#@&!%UO6 z7acUUH1E(CD%M*F4vA?QYyA8Z@T`UR5?K)Q85_Rdl5#U41AprcH4P*>iz$DOVR&{+ zVt?@S!2UsRyaaz*R3e24)>4%C74Ud4D}t|Nl~NbNszkKCPAZfe8A;F+eCeaxy1xZusP${Rh;<7HiYT^sK z-oM5*n)$P|7JsgOA0VM)SqE@Uczn;$RKpBNf0MPS;c>;Z02x^wRV(V0lGKVHCa=HP zOdl$5;vbg}r==aBdqjgx{a^x7oeg0IvvnFmmm-IoMTT1ih|Gkq*tJEqeov}|K*6l--hl-}A^^cEom5TbsXhy-x1lt|H$50@*LanHB)Y03s;Z&RRF> z-css?P}*1Wr!HT?HKP7S#!b>g$>ky$?p@)Z_qI(*HPd|aS&?NeIteL1K6X7=Fb(jN zZ=H^vtQtsNE`7$^)+UOoPg36Shq}}}q;rJnYW<;?S?<~Q$MwEv;;vVSMa}I}Y**X0 zyVD)Kv;M@edJ%{X{PH~807*&<5$xZnsO+xto115ZM|cPwJK4{X+TT>Kl`$0L3}WN2 zY5$mdMqy}Q`WeOb%mp5u6s4&Yzeq)=4-IXPgi-(HTD!v?x^sc7U*ybwC@z%rt7bfe z@`Ai&qBJPb4Oa)0z=eu-tDQES4yCLQ@->K5kXyH{bS&Py34^}KU>n1+wY9$xbn(hi zij{n{Mm>+=D9`dU|M-8!SUFFZsRB4JU*dHI4uX_}a_=7Mg)>JUdSC z_cUgPT1M_x{bcN2O;&lZQwby=cKrK#=z{{y@Mv4o#LP@6o3Z|!wZomPze~|!#{kkf zn;<*&XPNN(Q#Z9ydyRXG*7oTQuG|RGcvw=(8>bO=04eq5~n;cC;THXa0L6XK+Cu5lA1eOrq(X0=Z zu75v~4mY-njDlKAvGjjdr?aGs&qnSr9x!X4!Ej9i}680?u(P@7XLjB#EpQ6(c|4H z^^MZ-cS$qVe=dgQs}^Z#-8|Tq|v^5<`TeX1fMAumhCl`gBeZuo3L54jDSkh*z7+`t>NJ>kh5EVl2>jw z!(s3^BnFf$`UE-!ALk{%)9Oo3_R{l=_wef%7Lgof-9rpb*}l$j76pN!)tv1T}DM3|+jTgsXrs|4Khec?_aG zpjNr;aV3D8n^xB$Lw`V>iQ+3wfu>MBsEWLv;hslGSO_=UAeg~0)zB>fUnE`8MV?Y7-Ys<}V`%lJAhG_-x4|5;1+wy6;H%823hL=^_x_OH-uvpAcbvc9eVVKLe|U!s&x=+6hNUm2^E9si zY+29VVR+V{vhksbN8uLpaLqfl+_s~YB|4PgO4`4Dqqv`PL!2b%-1Of5H4!Xy-n3C{ z8gRVdn$?^fBk`~NRVxv&gF*E^uPXt~fph(3!(SVJ&Anoo#JGa8O>mb7@O0?R{xvrU zDsM)buQ6emf)>ws>M8t>f2|?64S0O#P;fY?bPI(jT5P)55T5vE46{B=_kh(e%PUjXyq&4hCHQu9&kkdMJc$boKuKj0mzis@KbV&0M5Bghh5f2 z(Mpnt1Hq~s{12bD%%g6C>27;$&>A+cKJJl*?&H`+EB9qyXWH_sQ>c_yF*F#D=+l)1e>6&!4B%dMX{zU9`xtbb*+af#OC@) zQ)bVeBobvFIds(?Zy`=$B_rUW29kk#sv0sMULQ`g{wKMR~(IhKFv?Ig0_D*jvG zZS=5WLF~_51e9>Mh0yYWjQL~yZF_vFtjdWN`enF%8pb(%{=__J)>jU4!b;^`G_o&7 z1~(doS7z!I@8sq@>{W1)vbG}aHHsPsK=1W(G~0$Vq-Ph#m-0vwx5S*VN)AN_vea7; z+&jhqnKCop*kvG6x}I^+!{FN*(T|p$#T&#}_5_9HI@b?jm=l{zl&&5NP1Z~OvbFtuH*XCaPn(}*kW}SkM zSF*r4yvmi-M??R<#I+g0oHM>F4wThS&>jhggm8PzKTpZI;l3RahGv#;njfl@G1M7d^sv5p5YV^%byC=OR~q*D*fNS%X7U@ySJ)wzUygj z21^I$14#pQb>1iyxHc)kBPA{BN_ldlp~$4Y3kTO>d~yCm&ITnb-8rKSRPTqfB8R{F zMjGHU@`z}Xe?m0N-t6IG^p_X@#!N`FX>#2Rns~gLY!;rY=avC?yvZ{Wo>A8S8+}Oc zIoTh>e_U@Gb^`pVQa^kCbAgRLuX^lm|uKxeR>kWrc7o4?D231ee5f!Nye z;)OV{i-NVHg4@a;&J0O!jRKX-c;t*T+QLgZ;rA^bYY1H!7-#KXvML?5CefOtNS*pY zGYr5+fCF^<)N{Rd-y9~7k`lr-bKJRa+q?WcBMY(>em%^xvI5s>bC;K%x8BGjEq&LP zK2$N5D06PL_k9LWjCRYjB*|$Kn2Xz(u$>y{I|Y`c z;-=1Q;Xlk|L78Xdz~vub1w!qJX(nz>b29fIz+?s31KH$7wPOp%4a#GQw-tIR-7Cld zY^JTR-4GtFXu?uFTskKhYwHJoFg5gpzY;i*Xju#QO6Ic+H>*dws)J|2mFcD@r}H>? zYSDwpQrB@aUB}(JwuPQje-6x^nf<*U#h3y|7W6255rw?LK4Udt6`902XgK)SL}&5a zkVbAZi5l?~N#1w=lfpPIV*T?sxH0^xTv6cmm!Nbw_f_U8-PZQ2XB_79Q@8Pc(39(? zbq5F6Pu|nQo2NM8tei+r;L|d4vkW7mg!SC&{^T}D^WwTI6>Z;-&+e~aWK{7)C!(uQ%dN(wq3D%$)L$Bch+37jInht| zS)ydX2;JMF<)i0jzkj?-0z&V9&*Bp2dl)PSa`Dka(Vk6LJvh(lYNhAM$M(jvgO}b! zQpTXQ)x2bPcB~H_#eUlkeEVL+5Ss~p@JRFdQ}>{%h6Zhn^{%IvQA6!3YYDf%z1rM;>F;yD(;xDhpqY#Ta9x+IZkRh6{oeJn+B9ONXzC59W$il49z%%#T7&;p_)J$pVQg;e4>U$xZHl&hw&fyjTHD? zaM+{kWC&>cbuy%1G9OQAr=|0zrdG-+5(a@Fl75Ne#@CrANi!VrrcMVKuxK;1E9U!B za44Jbr8G_j#uRYLdI=4Ig`YnUDFkH;D`qROm+f$n*N|!DWO_nUdvpW71y}=qOqMLg z$xh*AIMWb!YBvp&I6XbHqy6VdYHPfU;P2hW_gmG6?%IkfUKq3={1LDimIZWN+rq7* zwaYL9PX`a^^w)ODne)BtWUKadX6)&9Y+WlLT--d8NQl9C&MkCnf_Q~ze=jXSpoN}| z?&XpRpo{S zc%Pclvw#6;6}<&lJHEs2v-0FXQfb zQq;$Lq_k>cZ1?I~{b6Ym`bekDab-HtHM*O5^A#UOKWtls5!=!jwHCK`hrzO8>LRD5w>`< zxU6vAB%7v~sow>*V!n z^o5^vUG<=MO!?`7YrCbckb$=&_E-ED<%RFvmV z&*J~4T9;%wA04b5pgSn)uU3mQmKhIGCsb%@8$%oVwj?M;kCqXf^6Yk7Zp8;w&ExNJ z?e+Y0*E?N+%yu`{V?`=p9^A?yFjd{o4N6?MIDAdV!o9mU`T_+>>Q<{T)vQp5x6WL^Y?nF7y+SPl;>^h@I*A@c@AWdx30i2y zPU8SL6MZHlubvW#H?;v~Rc4>Hg%=~Px_}Ya_finlt_=SgK{M)|p;ACeV{}y_xP9DA>I)?42f$6Z zMW1e)%du%mMo`_X<1nt?p^Npm3t?4@dP)kz1hZ(62r(pud^^oq~ zlc9m&5PqXjxeof!dAHhmX9ky=tF@vcyyJxgP9THs0!Hk4RUdUY4IZ;o+S)-g1T6aY zas%MAodug-e)~g+9_Aql$zw?b7MIbC7GAkni?XZB;`8Eq^X`AW!Ru}jYUSBe<+TFT z^1KBPU>`5>t_*ag(G8}F#{vETqs22r2}#G7wtPoh5^;W#K%jS>`OGxG z>1_4ECi=21Bc@jYJsq1GT0FAoRujX%<&r4@0)M(712`*%KlekxMcWP4;Bw9(H=&*3 z?bNYijkdyJ3vFoUmh)hSfm|(3BECO)YI@^6=}*(MR04j4>vva-0Wf#$$K5A_a8duD z#$xg?*lxQQFG=IU$#1BE($5+cDCh+r+K1dAK29eUmlcDb4cV_0=?COb%(>R3E+EB6 z43UO_-u5V$5zK#^z$IHnMoQLn6w5x`w9jK#!8tcCy?`uC3hQ6-H$U$K+fD5N^SF*j31EC8?;B;{Wi%fqhI`#Y8D9?}@2ex_%~JX_bNpNl8WdofaBiUJVxV8n2{7 zxG>Y#+)S7tQ}D~KfL4uk-0;>?`n*8uxJ6x8tg5yGBq^UMsu=!&@uw-RJw625EOID$ zIjan;Zc>s3kE2{#)BA01SxTefHH0a96D30Ob~#elPW1oh>ToP-wEy+t?;I4n%a_NT zyw4Q2*3ydSvm1kTfYTq(xCNhd?)+TN-wZGW-zsI-zVb|wF)omINW5C@TQ&C&MWCng zPp)5}V;0o7K5+AK%Ea0TJHK-4EY_`N^CrCSItQQym%^unIRq_}9UGm>4%j*MG$sZ|Aok-Ml)<1}`Q{F7;omKv!jk+et{s^>cgB(6xDI~Ci0>AWbF!5o%A zMSR0{X?Tpb8@3jas3npXl70*eauf>dzA>PCeYpD;vuj?D=`l~gz+=Zx4C(G%FtK@E zv8KDJ;tHhcl@2;OIuvdZ;Govd6p4gh^Q$X$c5PQ3_9xjzYY1M|86$Zw1YZ~}`r7-{ zpRXIcmB0SQxJ(ae@s+vYY4@+7k>t!5GSo1G1hmS<2HdVv$_q_eiQSjg8345LYS%I{ zT0N3#JzukwF6ype-VsfG5~Tidf#hY^>~SOr?;funVfhZV%37^DUz@IN%w)%(Vo~~- zV zdieXN+X$1V-5QhdrCbR>vMK@p`|XK^yst&a0_oos-d+ByTX118^XE*mQM5vcTz;p0 zG|k(z$z`vd04C@`4_qj;z+&lp0x7TQ$cLhk3upuNzuFk`-;Hsqn8O*NP!|JWy=tzx zn>RBG_s6kwvpGJ?!-lutALodG)aU?|s?c*9hBdm#=7;461!#wR9PTS(4v*AIy03t< zH*_H_`VfJgOUx_+cH@YHfxx2@DhRNDL0jtNAO?c%Io6z;Asx!dz~hm|aMdsP{4OBMpbPBK`(J^56cjNq02EMckeK>s_*5^| z$NzZmJp7(C)(oD~pR_{nsq5Nx`bQ)PJz>3^03<2A1PuRw&y4}kRazT1o#sYxPQu2G zbB?S@TuC#rkE0m9E1Q}vzRN~7J^6e37%-=2k14hk{j@w-4R)&FBfc$BT-HIgU(r7p zULlgI-b(W+QhSI10!#(OO254U=<#29xm8{HM=VUJW6&io5##HtE_F%@K2lMQ9$(s3 zH8&?;fx<3>M7-igC5c1Kx7jTHZe`mOTNuk1z?H)mCMA7Ij6D|(fj zST?f$Emmq3wZVTEZB|11z+Ed^K6MHhRzdI+s5X$CVhgqhL&3WKP*9am{i;wH!wQqb zc)6_pt?Tr#FMpk7WDMz;?qrXC=4jgu*La=vo^>}$JL}ws@bIXmb_f6svcpgHX^`ry zj|?YFH$F6y(gOhX|1_*=JWe8!Cx8EFPq*yJ#|QtbwEE@SGdB?U=e0BBdh-3}GkkgS z@&AKA{q;!1AS1mPCDH=BaQUHJX<3#DOe8KYAzj=UY0`uH6t@lp9=uM2)jy~(;($rC zZrqp8U|EyUEJhF>+jXMbjF}R)?8{=~8uu#=#3}!!zjg?4PSnXr1{X~AY8p?`G`c8) z@rW^(N*|RnHiiq zO}Mab&1TqD`t?3$WoNe=RIMu7xf+-dW`Gh7s9W=SpHXIr*GtXAbW&Apytmf1*WA^d z6U6Sn>w7<{VQHMGBjr3Jsghc51gT!|tW$8C`#|;F-*4{2ob{9bP3!V_{O(JqHUGTL zYS{25I^WK(obWp?RkU~nx#$g>txn?D&qPF3(plT#YJH!3*H%?Z=D#q+G8^QG#HBSy z;HoD}??F{mhF8+_^F3j98<|(bMvo6sV54EeNW*&4R34h*&UP<|ro1bbt^XKrqKEG2YUaas1crtaV{iwj`oxAo9V-7TX)|)Fv)fMm7-#K95EODa zsJ1a!ck`h5sMkn2Z45>qb0GYWC4iGdmUmck0VaO;wL_D2tn5*@ES+@^DlX6#jBiYG z^W5|}>L|_|HySFgozfKC+O>yvuRLyeGMSHPW`?wtU#Ob+n#GXST1=YynTv-G_gg~Zh;9(aU>XaOj$L!O0s_;lB);XnhQpEFi(_@O zIS2!v4wl?~Wx`UWZ$iL~rTPrIThM0Mm5U*;I@7y;8RUoKL@16GvGf`IK#4SkN(*5Q zeLgx8&GXofOZKbACb26k-@-8)dXnLwACQdu2355zn2#rbGKbNnJSCw*JWO-rO z_dH`OftWX@8t9xI+8{nD28)Y$@7}N$*mkrbCv4YQpgh0Ouc(AovIhqp6K8~#i|Fn{L5=kZuq-tIBTlZM8~_l>Yr?G^{7p9_kh zN6G@R=g(gz?kw63Cl>km6DgH(lP-pb$zukG+x7@Q*CNNvW(|3C)=Y4~S zWM^3lmRYtfwes?7$e$`x(zI4Wt;o1maLh}RLF+<22{{I}j1-tbhnXpz>TiOnT% zMc`Q1cSK2BW2@P+y~A$d2)?9^y@&8&QxwR`n5>9(X|U=w$tP92rMawit67PSfcB1M z9UAZnlvl_@oM1y;d%oLKjGAfC%S`Y+dcsQH$bns_Ag#@0F~JR=tkVGn>Miif z1BrwrPJxBriyIr7mFuOD=MPPr7Q{>SeNB?l{D-lkwS)``8hMxkJW5g1 zpvin=L!fdMqidNVpa`k%9pZDkx*)o;bFhsuk(ct9iOH;w*`N<-N(vd@Ugc_&Dl=5= zRdw+0X+G8{uRqQqBU3&Ni1ecjsPU_NBln;#BkcoG20O{yOQZ_wcd3dQq{sjP5(w&3 z>ka2iD>Ko9c{&~DW!f@13*E^ovTQ!iyTL+C5X!Qz_wI}Ejow zTP!BHQz>zfqc6vSjZbrPYIZ+B_wM?1V7Rb(M+QQH`9x=q%R+1NgW(hfb#Qjesng1PZFR zChE~OAqGNujn^ck%kjzJC=rv3-XZ%@2hwd4bt52`HLS0GI%E}B?v511kvcDvEis>( zR1g%k-Wwg*m}BXf$}v%^k9H(^PKvZ6+HV)9`plWpHK+SO=r8jJhGKb10=1 zdApWvuXQ-EXL0v7$ZHOY+Wq)hCC8x|!o}%uY#N#moV|&1a_nyT6Yns2PL2`ApQ zwhtGUxOw5xTvZCwHgARPn|6D;#f9o*r&4F4tmR~rnsA}i#0oe3L=jVHLeWT%BOMnzr+;dE-1H;z zkDgqD5}I6G>N08&j^T-vHGFv=-ckcB``FTkbbVp!V$i!&4`s>rdsM5K1TkUMKDygA zJc0P3%1X6!y;#`XC)AN^swh}4Eg&oDr*di$M3mb3F{k`;3Vm0X#3-AQ0z=l6>9^t6 z%6XK{JvzI?Q3k|A1)gT}j|)nfKT(bzh~!E=0TXoos*tIEUKy#(z&xo(M>Qo%Gd4e3 zfv|a5H7iTINVIKZvQ?=L{z4YV^w#zAs*#Mm zfzxa@!`c~=$YW0W!S6RRcFTr(wxg#9|2oT8EjU$Y0dnPiaC9#@=PDg|{!l<^um=xU zn?y?{lic)rMZX*!*rCnLlAj(ol zf#b=GeK$&-hL^H>G#ND21GGd%I z$sem0rYck@PuSUf&2uQ<$3UKXZSLsbyENslgMr7aq`$!#i%+yl`6cQJDrxpzz%>%F zl|#Y#*3;@wDl<09L6Q=x@^x&LljWoL+6K#A;}473>5A39&U@GJa`N{?Wb~ot`v~18 zG(~z4LH4ooYtAyIx%p&cskKU2ljxCPlBDq*1==buPJ$EkzpO+@au^#s!ES z&Q#G|O3P?Q*!8$Y+cu_0@y0bOKaHsrOc9Z4BoAYyz^U#b!{H?+tisV=w7P*mf)ctn z^BRFzJvLtW9~S)b_2IWtR#Oo+XsPG@_975L5{0kZQL6Cv#+JNe=x3d}^%kYRONxUc^%P!bhBj1B(SOOipx%!$<;uO^zFqii9P>Bi0j;bSUEv zn%IF|3|>R^F_TmgOejsOo8&x}jWI?DWO9tc8X#P2^ZXfr?c*?t~r8?|f~zYr@W;%_I@B zyTGY5IB`eCOWU+$?DwNaBh>g@BCB1)d2~f!U%9}3_)3oN3?nemkIrwyZJjXgs-HW! z{oBosT-wc`qqPRzNxg%|9a96TySMo%EBHp1vy*>-|7wr0yZVC!D2LIf2-Es6q z7i+pBY4a-an76hD&V?j1#O{0MflSzux5|;wQ_#&03!A`zAj4gPx5s@6^V02&S3Bt# zm&3z=eQpWq2)Y^($+-L{NX0$`vbRHsoBgS>2lz!`j0>C|avgUuJvKfI+l?MnNY?J+ zUfr7%@#!zX(yaQ@!?z7Hhf)h}R<5)?*(s*iJoj(*lrFw@p5e~oK2*q!K}*LLoraBf znO3sQByt3R9UGeU>`dI7KY3G`I1b{ajEh5%=Ou!Yaf) zOPLLa{G#4L@~4idl*j6fXrX;hQg1mC!{98K_KG>dOQ_l0Rat^^dUCmmMQbLF)@E+W z(qL4b(MI#Rn0aMYQ^TvY<0d6n>+STJo&d&jy_l(LIjKO~pPP2$=pv1MCnwFOBxP$q zlKLcZqi<&`I@19_Pfmm!%uDgU-R(@Mr78fGI|5KG^-t*VJsKXKm=6K|&EnT?!jHRj zOVL$xg1%#XDAIDrHiU^O*RyS`Ykcf5bX04scP+uUJVDSZXON=maDpK&dt!Doh`^zu zkX0DTgSRcHf8M8Fh=_5}YS+k`N=$6;8J?xbZin%#O)DDq+Cs%$WC%@3RSMcw0-q%b zbDnv4YmUhzAD}|_)Ye_TqGLJHY;0(SS(35>Anmj@XLX@QLP7$#_=(POFT%jT&rO-6 znG>*o$ZuK2EF|h&HEh41@^D0HWZPHAZmZXiPFIM@Bpy;c%{TIio|HWy0$-ueTG;6B zpC##MBc%+$VJ6)=0UylKZDCb5ld89uI`*k{dUCF3^u#5B({A$&)ph8A*TaNuY~|)K ziq*?Aot>%MUnm+ieJ?`tCD%iB-Y4V-T7MmOL}<^{5>3+KtJS)8%aJy9c6NE5$ct|^ zdbFTkt|8moZpzKp(6Xi{_C9=E+I}2{X;~ofGIDLOK5wex-j~I(rXd--?SpxHp5)S( z+-a32`uc?vQ0(?P0WhKPP5(5#0rr4^X3?90308ijA374{>a}fABPr!S$JX~MLJYPF zin^N2Q*Vn`sgH$)_er(><}0sQ%dUS8;JGfR57I7`j^n^VCIMR^M-f{IN8<`S-b+7p z4*Se1qs;{Jdo&leAlndJ$YPdtueu3dU%>n}wkRuoc#z0E+`bi9b&ETYD9U59XU>#P zio6|7`KMJ0)j*;1cXu06hb=;Man`LfjqegMsifqJ+3((x1Tw;MBLHfpnnc$GH6JkZSfgc|T5?ioG8uHl> zN%Qg8P;zJ_h&Y79n$4qjk2UjS$BB%_T}DSP9k(!tmOq6KZNCOI37E9S#>y(A{@6JV zNjQ;|1dx7s2^)k_{tg;hxfY^bhy8euj!S-dx>nwkv@Y!9uMj)mqU60X(lhj$&TiJ8 z&$lb&Q?eV6pJQ0QeV`&=!|u1+hxg?|Y#T@d0HklYlf=_rcvBIb&3r9P?o8Mz?lyJS=58P{S@?5N$qA=`iNoC67&&P`_|3At9-){v+3bBV;2UELuBT^j zpMVJR-NDYVI}R5%nB`gV4uzW#`L~+{A^a?Qa9UX?a-3AF*zHQ0m+OXT*l?UIU)X6k zIRE@rp`dGuaUh>2Hq-wVZLdwkTCTc)JCd+AfEQBL*6@l}ZACHeuN%{(Lrla$FjU|n zG*P@{{Yc?KMDls?%ZK);XVIyJ>!4Ja)K0%FvA#zohc=ZgczET zkPq;&&Yh;G`JFyrj2yfI(h?C_@~0QR!A}c}e#n*J{B-TGc$Bhco#!{8R*LL3%c+g~ zLBTPUKMfoHljny`5%nky;0OQ3zwf`` z+I^2ZWF0SbL!>vqb`l35dJF8NZ0x~T6zbetGk163Ge82@>3RKk=G_0cso|xM9ukhR zokOc5bM?Ir19AC=l{0#3-CF~k4tnnfTvKHezwz0pNV zp5dW|RYs7WoFg;3_g`^guSgy>6&tpkn%(lry?(RqO45<@H{0K=n9=M0`Bzd0@?PBs zkifr_coNx$tP+dlpPtmw-6URI-FGQ>qm5X3DLR42y6F-d1u~9d;#%(WI2#+is z?ClXFI#%r2RjNX4?h~umEmMdxozLSzk(JUS!1^}D0#)m>~v)8;db1+ zCa1XO(__3>yi-}R#ar#28AUjF-H5xov5U#9@ijr)6`+W-#~=r=gE_Kk(QbX!m$e90 zKQ*9r2_a>76lq{$E*7}v=GFLx!Y5jJtO<4tY z;_1HNpg=^$@?mK~g=x#nMnQrFayQPPIk1daVma8#A3kiCnb|KF`e3dZF44UF-43X{ zsWsi>7Pc7(Mg%7>ERx>dTr*k`s;Sv+W`rwqGluO*i5JDq#W?g2im^W*HoMF3fmr&H zq2nRNiQIoMaR-JjpIN-%wulXtG~h&_oi*BPX9hcjmWJc2-RuTJ44fQ1V(vsa2!Vh- zZV*4npWNU~D>ZmCMkTScLdz$AOae6WByq|MLhk5ztl~GkngU!rJ$~1(V2WRI@Mh|W zmx*z+<^^$)5yl9&d9hHUFK+iRb27#icGP=wyuzCpLO2>FKf?c9JD&Lw?CHIJb}P9yb;%sF-PyN$p>q%p5pI z4m?UrYnp>k7o9WqgELIK3lcMx-X8?e^hefirA}UuuMaGcF@Uou#k$$oM?Y^)s+Pzh zIcyxgU+l~9SktEhZ5Y2#s*(~_#ojT2xCS~JdC@5MeYtj%>^05llKxF8*y&5Bxkw$wxR60~NXyKR>Zraf zDZc&(7Us??S?{rNK($jTLaIDyAzy~lN<=b&eJhrBgIWW4n6x3% zZ906@-FC!Eu}u$F1239&Wu22MhqdJ5Bf`prv70};{v8|(Vl3$oIu?m^ue^42g=p(z z$T-M>RsI!~Q|0*PzIPN?x3Uu?{i{gRR5^Q`#$q+qrj`DpBb;`4y~eWLJC>qfW!}m!Q!k zPT8i;zj(jd+SMbltTMaomZwdX4tW#OiX0}myis^{-N$wQ-GMbWYH;lZ!NncqANXZ5 z?GXjGe3qNLEMICBD_S9l)=_@`kR?!wp=s+?bU}mG?>$T(N}pKnS-$X(XO8dYv+%DZ zSQo+4TR-HZt5av)5e|cgdpHP530`~Xf%*G|z6_*F>l7%fe9&}P@@6Hrf4Jqo*Y=_@ zXl2bQ>*MrgG68uY*zWxEu0ESD&(vt9NZ$x`VtZn@IJ>FEJMXnswYLU_N%=$qO{K&- z1N6@}gVqR&HZh9UH%eDXB84ylLwr1TnS8GFeCZzhiFaJoYTMuy4bMPL znWCd#c5EK>Ss(2{tzKGuhH>}AW2ao@T<+V+PQO{UC2anR>=%xne`zDbppijGV5JbP zcd07ibia8luFDb^ir-FpJMDSD+DLF|)g<=5BKtizl|xVMCcbL-s8uZRK5EE;b$xU) zVti*ieYK{sY{FMVHKVh>otPtjv+`a)%@biYkgilasW7F7aP?QzN#&h$>k?mz!(E5C z$Y(+k^rrL0xl_FtZf17s^E$vemX(}#C7RurK9AGs$GLl3ytY#}4zAa+K*yOEZ-}4> z&83aAUcl^Sd6iQ`s`C6t8A35T*9G*zhDirnpOK5ZnD3Ati~2GIY}L2O^XU?ERWybX zUB2C^J{*+(&EV5QhW5>VY1>>&&_AeCSvnusz zR6Qe^(xYt~o-HGq3c{jwM^G_H72PV`$XAoNxXahsH|lNmDtQbU+r5V;Dj%XV#ba@; zR^`#@DMq{lS?VKhCh^ueYkO!W5s~7@fihJ%mH@u(rtP=G)B$}M{S0Z$5ol~mZNtdV zoH&~1ea;zl1xSf-eC+A4JbgE}%)(8@W8%2~^Dx;HIHB5Y-9P3K7BDLyVmGqza-=GJ za9l1{j@$Z^jy0|iwu(-kkq<0%#;mQF+x$(eCM?XC3{I7LD!~qmF_Mv6$K!S3a~NuC za;pN+SnuVNHw;I;mR|oPIJ3jQeUboR9bq`2xsgF z%nOc)4SQWaUN?kyVi9|hv7M|{z)RP`7&{kSo+DSKnN%14tOoNhwLz?fzBldwG+CL~ zu&iQf5{BS)0G6T3%C7HAr7sK9@x%+m)E=c??v7PTq>IT_zk<$G%Y^B7(p8aO3sWx6 z%2P-BZ45bmw1)wU7QN|@^am;(Ze-C0VJ&;xBJM~f<5bAX;nmf`c^WoV_2+&?S^YTl zPgNK^XBD+b|0`@hsrvrpC$aNu9xJS|`& z3t>C0upy&VJ}o*WyOnyH^FhY({KVFgk*U2u%kTKne-^R-{~P#!bQ0@ra@cowcY7_Q zg6K6sAPMy8Ss%&jH)%vJ0jV}XLT=RC+LNNa|2Gz5d^;>1pCP~4WW9;FGu4B6+=*$} z|1G@L)6|>p?KBQQDWN6v`=f04*L!&fzd)6S-Xf|>eWPZXj;o4Ga^1Hu-1YO5X5QPz zBb)ZA_SdjU`CG9k&-{{`s0dBp0^i96&rCh%G599deBiv<*oSeQR%AY2$qSHN-q$9}tYC!=(hPWJh`Z)`mtFq(1`SHHPeZLEM2 z*2%LPx@lLo!l>=NY#3v$OZ@6~T*8xqtdO-PtZ69Zb?F+`{a?LZ`!^eC8g@?4mN{-S zr@QTR8~jjHrznk`rNfxJSHX*~ zhIukGsO#qsS5Hbg5F_tx*-KKfv2E;?EH_iWd}Jlp|y1(T2%ABxQ!p$#GK z$L#QGN1+c+mQ^`vlLs`rJ2P*&E9G;`HlVYAUQ=0lqEINPV|5$tpT^2RN@L4_AYG<- zN`yx&Uh}xfvPWG@*8pO>EmwXaG87`l4P?Tt)k`9``4BOv5r9 z;6z@i>V6rdq!f_2$V?@BR}&zmBuTQw(TV0fsQ*jsoa(xCFhc2 zs#_GM7-J60igg-xg-b|3ft62Krp^bkNx+SmwK+U;ZfBsU~j0~o?IXh zW$v5X@cIt^5oRNs;Alks-d@;I>qFs(^zf_3G|U=R234FCqNy(=4w}BeEq>*qR#vfh zL#PC08l=W&$uplZqiRj~fv){aZ-g}wG1CFq-Jakm30plP7)!^|yH9StVuH6}Rjmg3 zGcMk=Qg{o}Pjj9s2YVYgZGA1o-;^8H(hiN3OkPK{MR%`ic9sr~q~;Wn$P!j--##IL z`{D$CpvIs8Y!FDHP%8^HGQH*V^9gU+QIvJnxPqGKO(aD#ead@$xDPd{oqzjRwG&rM zD0{s>-@u~|xfnqe!Rg%5y-v zgPx%iB5%jWNPDCr(RiUdDeD*{tUyYcFX-C*@R3NN$A?GCbmH}~+aX=uW_sVSO2nZv z$4Ty7+n=ebCY@W$Cd&ESLX0;gnsJ5NX)WQG*eje~;DXljn30p+8{v0$ONND{AMU?( zLznqq;`Y)=MZLJ{WbhEMLZQpllZ1QbY-q|wbiShWRbhi|%L`-FQ3Vg_$?Kz3)!0v? zP?Se=5e`6`2OTl>D8DQp^0DJ>gw$iLhQX=@pfnM0(oWIG&Q`G(QuX3hC3rtteLOD8 z&TX2(%6F#5v`E942bz08Hr8gb9_YameO2q!Z zV>1vbWV0_)zhmShB3aDdxPI|VnK$;fM2q!@nt7qz)i`EGpq2d2v`v7bR0^;kc8l}* z2G8DTjqYx$ddg`Uv*;4=u6)2hDh@WH`tf;P96cW!@(p{8?83&Hx=VC^t1pL(d~Zac z!F)}&J_zo9e5B(Yk6@j3+A(LH@D~TpkbhpAW}zmH{C=NFjz>jO9D};eTstX3MF6|k zrln@lqh|N%r8Ct_LVUy*XgFkLRwrIk;&iwbK2@eomqAs$P?#nqXxY>Q@-b+< zsSMd^>}2=gj)2{d()sJ!r@;iN5ueFcUH%_+^!9dmO$m*|=9?!TG<;>wPR-Ewcr#=! zguVjE>Tx`FzE#F$P1KoZ0p*J&urPQf9m+a#i^NxeT@p41q>ruIQ}}fktNJ{HiT$oZBY`PZkWVXShpeZf`!f$;7%cL#V;y*ZVZqPZd4KG@?z{rf>C(N zUB|re=AVowPp5$xi++G9hNn5Ko%bLKaIK*EEp0 zntd;`G@D3La_4PrnctpV-uON$5S21+f!6G8@9yrx?M|048P#CuN+JPy=<^DWRu^~~ z3PaS#Go?FS%?)&3t>w6fXiYD5LdK4}^v3oF&O2r87JCp1B`q?j8RA>B_cD@l5b;$WSU7V_e7p^IXpG^0&ZBE}6W++mRWhCQ@Sb zSRU!ShVQ)x_s}|8wkhA`7(R^DhYGVCKG2^9zMson=b3ty$u)eN!|M#cm(X%Pb|HBz zC$f*f7piU1*ur=rd%9*3>B>h%G#o~57kHeNE$y^qPr@BlyIpSgSn!3;CoGokF`Aol_t#fK_7M*}p*i z29TTKxy0I3PGK3Nxrtc;d9tpOL(F<|fZ0&3&M~gAGKS0u(j8d51*A23ADf<+R7BpqV`RkJ3-_ zr|;#o2c)0g-f4cWL#k=7+qt7$CtG;7Qhw9F`&qZXBdm;U#S9 zBxA7;iORFz>PBC038M0xTh}9JcVVsfgmo0Fx&`LUAHUDwJELW{gAqp73zdnWO&PKTUy`G{EAUW z%D=(IB|_h8#Pp5NM@>tmklXjW8qeK1Qo8j$)V~w4SGDbKO0*GUH&f!ozQ?rVe#Gvt zq4tq-=md4a`b1AYpbk`Wq + [Azure Portal](https://portal.azure.com) +2. An active Azure DevOps account.
+ [Sign up for Visual Studio Team Services](https://azure.microsoft.com/en-us/services/devops/) + +## Set up your machine ## +1. Install [Visual Studio 2017](http://go.microsoft.com/fwlink/?LinkId=517106)
+ Select ASP.NET and web development and Azure development tools on the installer. +2. Install [Azure Power Shell](https://docs.microsoft.com/en-us/powershell/azure/install-azurerm-ps?view=azurermps-4.1.0) + +## Create MVC web application ## +1. Open Visual Studio 2017 + +2. Make sure GIT is the current source control plugin (under Tools -> Options -> Source Control -> Plug-in Selection) + +3. Go to File -> New -> Project... and create a new ASP.NET Core Web Application
+ + Name: DevOpsHOL
+ + Location: *where ever you put project source*
+ + Create Directory for solution: Checked
+ + Create new Git repository: Checked
+ + Click OK
+ + On the next dialog, choose Web Application (Model-View-Controller) as the application type, No Authentication
+ + Configure for https: UnChecked (unless you are up for the challenge)
+ + Click OK
+ +4. Build and run the solution to make sure everything is OK to this point. + + Debug -> Start Debugging (F5)
+ + If application doesn't start the first time, just run again. + + Do a quick smoke test to verify that the solution built and runs correctly.
+ + Close browser and stop debugging
+ +5. Choose File -> New -> Project... and add a MSTest Test Project (.NET Core) project, to the solution *not the .NET Framework unit test project*. + + Name: DevOpsHOL.Tests
+ + Solution: Add to solution
+ +6. Rename **UnitTest.cs** to **HomeControllerTest.cs** and replace the file contents with the content in the details section below. +      

Click here to expand the sample unit test code + + ```csharp + [TestClass] + public class HomeControllerTest + { + [TestMethod] + public void Index() + { + // Arrange + HomeController controller = new HomeController(); + + // Act + ViewResult result = controller.Index() as ViewResult; + + // Assert + Assert.IsNotNull(result); + } + + [TestMethod] + public void About() + { + // Arrange + HomeController controller = new HomeController(); + + // Act + ViewResult result = controller.About() as ViewResult; + + // Assert + Assert.IsNotNull(result); + Assert.AreEqual("Your application description page.", result.ViewData["Message"]); + } + + [TestMethod] + public void Contact() + { + // Arrange + HomeController controller = new HomeController(); + + // Act + ViewResult result = controller.Contact() as ViewResult; + + // Assert + Assert.IsNotNull(result); + } + } + ``` +
+      NOTE: This source is also available here: [HomeControllerTest.cs](../source/tests/HomeControllerTest.cs) + +7. Add the "DevOpsHOL" as a reference to the DevOpsHOL.Tests project. Tip: Use quick refactoring. + +8. Add references to Microsoft.AspNetCore.Mvc.Abstractions and Microsoft.AspNetCore.Mvc.ViewFeatures as well. Use the NuGet package manager to add these libraries to the project. + +9. Build, run unit tests and run the solution to make sure everything is OK to this point. + + Test -> Run -> All Tests (Ctrl+R,A)
+ + Debug -> Start Debugging (F5)
+ + Do another quick smoke test to verify that the solution built and runs correctly.
+ + Close browser and stop debugging
+ +10. Add solution to VSTS project (Team Explorer -> Sync -> Publish Git Repo) + + Push to Visual Studio Team Services
+ + Repository name: DevOpsHOL
+ + Publish repository will create a project in VSTS (NOTE: if you have multiple VSTS accounts, make sure this is published to the correct Team Services Domain).
+ +![]() + +11. Create the first commit for your project (Team Explorer -> Changes -> Commit All and Push). NOTE: This could be automatically staged so choose Commit Staged and Push. + +12. Log in to VSTS with browser and verify that DevOpsHOL project was created and source code is uploaded. + +## Next steps + +- [Continuous Integration](../continuous-integration/README.md) diff --git a/mepfielddemo/README.md b/mepfielddemo/README.md new file mode 100644 index 0000000..59922ce --- /dev/null +++ b/mepfielddemo/README.md @@ -0,0 +1,63 @@ +# Avanade DevOps HOL - Modern Engineering Platform Field Demo +These are the hands on labs associated with the Avanade DevOps Practitioners course. This lab installs the Avanade Modern Engineering Platform (MEP) Field Demo as the labs for the second day of the course. + +Once the installation is complete, examples of CI/CD, Telemetry, etc. can be demonstrated. + +The objective of this lab is to prepare the students to be able to demonstrate the documented scenarios and be able to discuss MEP/DevOps with clients and other practioners. + +# Avanade MEP Field Demo Installation +1. Go to the [Avanade InnerSource information page](https://innersource.avanade.com/Home/Asset/MEPFielddemo) and click on the green Download button to download the scripts for configuring the demo to your download location on your laptop. + +1. Extract the contents of the downloaded zip file + +1. Pull together the information you are going to need to configure the MEPFieldDemo + - Configure a password for the Avanade InnerSource source repository + - Click on the orange Access Source button on the above site. (log in with your Avanade credentials) + - Navigate to the Git code files in the Fielddemo repository (not $/MEPFielddemo). Click on the “clone” link.
+ NOTE: You may need to switch from the TFS repository to the Git repository by clicking on the dropdown in the upper + left corner of the repository page.
+ ![TFS-Git](TFS-Git.png) + - Click on the “Generate Git Credentials”. + - Fill out the password fields (this is a new password you make up for InnerSource Git, not your Avanade password) + - Click “Save Git Credentials” (your done now, don’t actually clone the repository) + - Remember the password this is your for later. + - Create a PAT (private access token) + - Log into your VSTS account (your personal VSTS, not InnerSource VSTS) + - On the upper right hand part of the screen under the username/icon, select “Security” from the drop down menu + - Under personal access tokens, choose Add to create a new token. Name the token something like MEPFieldDemo. Choose a expiration time that makes sense. Make sure the All Scope radio button is selected. Copy the generated token and save away for use later as the . + - Run PowerShell as an admin + - Run the Get-Module command to make sure Azure and AzureRM modules are installed. If not use the commands below. + ```PowerShell + Install-Module Azure -scope CurrentUser + Install-Module AzureRM -scope CurrentUser + Import-Module Azure + Import-Module AzureRM + ``` +1. Navigate to the extracted folder + - cd C:\Users\\\Downloads\Configure-MEPVSTSDemo +1. Run the PowerShell script to start the deployment configuration + - .\Start-Deployment.ps1 + - Target VSTS account name: (this is just the first part of the VSTS account you’ve been using in the class; i.e. not the .visualstudio.com part) + - Target project name: This is the name of a new project that will be created in VSTS. Name it something like “MEPFieldDemo” or “customerdemo”. + - UserName: This is the username you use to connect to VSTS; either your Microsoft email or Avanade email, whichever you use for the VSTS you’ve been using in the class. + - VSTS Private Access token: This is the you created and saved earlier. + - Source repository id: This is your Avanade email + - Source repository dedicated password: This is the you created earlier + - Set up a Lite FieldDemo: Y will configure a light version of the demo, N will ask more questions. + - If you choose Y for Lite FieldDemo, you’ll be prompted for your Azure credentials. Type in credentials and skip to step viii below. + - If you choose N to Lit FieldDemo you’ll be prompted for a couple of additional options for additional features such as containers and mobile. In order to do mobile, you’ll need a mobile Private Access Token (left as an exercise for the reader 😊) + - The next prompt will ask for the target Azure subscription. Use the one you’ve been using for the class if you have more than one. + - Globally unique name: Pick a unique name for the demo website; something like billpayui\ (no spaces or special characters unless you want a challenge) + - Passphrase/key: A new password you make up. Remember this, you might need it later 😊. + - The deployment will start. If there are errors, look at the error output and see what might have gone wrong (there should be no errors, debugging the errors is not part of the exercise). If there are errors, it seems that just re-running the installation seems to allow the installation to complete the second or third time through (no idea yet why this is but it seems to work). First try to figure out the error looking at the output but if it isn't pretty obvious what the problem is, try running the configuration again. + - When the deployment script completes without error, log into VSTS account and look at the Build and watch the builds complete (investigate what these builds are doing – this is the DevOps stuff). When the builds complete, take a look at the Releases (investigate these) + - This build/release process can take 45 min to an hour. + - Once the releases are done, log into the Azure portal and investigate the resources that have been deployed. + +>**Note:** When you are done with the class, you will probably want to either turn off (or just delete) the resources created in Azure to keep your Azure subscription from running out of funds. You can re-run this process to re-install the environment when needed. + +# Practice the Scenarios +Navigate to VSTS account and review the new project that has been created. + - Navigate to the website that was created e.g. billpayui\.trafficmanager.net + +**Look at the documentation links at the bottom of the project readme and work through the provided scenarios.** diff --git a/mepfielddemo/TFS-Git.png b/mepfielddemo/TFS-Git.png new file mode 100644 index 0000000000000000000000000000000000000000..b8de3f9087aa8e7892ee7e3c31b1de4101310e23 GIT binary patch literal 6571 zcmV;c8C2$pP)fFDZ*Bk+2_Yi@000VfMObu0Z*X~XX=iA30IUzpIsgCw4s=CWbVG7w zVRUJ4ZXk4NZDjy8_YVmG000SeMObuGZ)S9NVRB^vU2y+80000BbVXQnL}_zlY+-3_ zWpV(wz_gD5000PdMObuKVRCM1Zf5|%8|H@q000McMObuGZ*_8GWdQa6gX;hQ00?wN zSad^gZEa<4bO83umcIZ100wkLSaeirbZlh+sP57y000d2n6VecwOl zp1ZsScn>>300cmQSh$noE^DDg*`lJ&iXAzY6HPLa<8hi!+DWGUqcg6W>3F6|J87DB zEIVoBijJK`qHIePDN7O5N$kLT*zwl8o&Eum;%WgjB~sM;%wPbVcbD_- z`QCHS`Tc(Pcf`Vl3l&!&gg^*^QdfQSYmvS~clo`V}ZX1*bg|$#n zGx_&zgkDfka8;pF3g7pqeK5^;iG(bYK?ygo|LuyVNrbr7wYUM42VosT5^l45M|5|0 zUsfee(}=}l#9}ctO`G-seND#~#!ai>twbq>u1gvk8j!j^?I*x(fzUumZa3xWrKP2p z6-X)ZJP+HpZ%B9og-~}!Z#OACoyvkB`sY=6a9a))bjP`TEarJ0j^p6E?hOg=PC_Y# zFBDnV$HV{p3hy@Li><62w~UmXhHxnT=q|}i&WxOrWZqh~7q(qkz?UTN+5ZByhTHTg!7+9k*O831+euq!r@BUkc zsteI<`+Q|IhB}V2@5m`!J;;KE3(1a;GP9u(OHLZ55rUDfjKB|E*^KP2q2Yl8OwMCEr}&2zrU`Dn_>Yz+LxxTwiZjX>Fpc97dnRKGd__-H-p66K4AL?ZI~eoJDX;x z`vjY}??o9waBU{WVr<*8l`&Uhp5ITC21+SB*Cv&=F?5YoG6g~+bpuT~jEzqqq<&RT zsY#8|-gb_j>P0s$*cdeoLviZEBlM1Bk<;i2gb?_d6feEe!AtvxIM9x}Wtw z_$&Tp!>hcs;dPQqClD|ILBKSTQlC6$ILzSL{cPBCns7Lb05sho91c&d$5T=#)VZJP z4S$arAA{~QWEbAUxU-wG4KExv`}`E(a{l#qdGl(36|JnY<+tx{bMN# zYZp^zhRF+CoISXWP1{crkrSBKOp<*k_~kEuMIaJj#L>~+akgxJm%gzS#dY&37&*=1 zn2m173D1~~*LxZp6@Z9aL|Qf&xtr64J#gARDwA% z!KTwmnrb2}uMA$lclfw@F*Jvb8#fYaeuzK2e=fr?Ac-E5M=`UO1udw;;ofBko~wYC$L0cOoE;&AI3W|kH4-p{v^ zozcRah|AfN2l%IbV%Y%Yk>_C9ioc z-+XKhg#nY^V>@_jUpoa6i@hK0q@yp6Sw5Esm(echHG&OCzzAiO7;}iVPt=;VF zP11HE#+eb1U_htibezqn(}dhKoA(Xy>i#|^q)usIiv9y3AU)105n<_Fjbu|PjBp

3D;%3c@5o9{XWXjamt%X z2Ztzq^DV}I>$}8Ss^R?DDeKr&G%jN8+BKAhBw5=*x58MOkFbjQ^4bT;6E+#!$1-*L zdOPXsi;+w_1cN4{v0l2m`xr^2&;wxtnws42!TSjt0xJ?FY=sB~BZMOP1bjgt940Z^ z&)IXGWC;@q8CTu9%J=ZJJXWn*M!M%XJ*f~YS1myE9H!aX0pKe|$TDay4^k4;(WHjd z0HKHvrkThJT*IU=Z1M2oa`Nmnor4}z^XVwCf|O;l^u{L$ghE(S($n3_yj5$s=iY~@ z)dWLH#k|FB3+V;^ci?XsA zG}X;z>9SR`( znRASLl7_jDiOZ($?K&L9Ba z_bHv(j7x-MB7riaELk|4>Xwx}mCVxGJ3?tqBPGE`nj%r=R5tL|yZad|FX67aB`jTB z%kbv6Ioesq(xnTin|n83&3d%aB%8?q7iO0VBN(E$YcpGRC5fjKO!N;j zmU5X9(WlfUE8inpK9jpwFCpM&NfnneKJY3(Uf)6IK!TyJGbF|peIq?ImzJPB7dxFH zSXj-{MfcE}@DPba;;JBl{{DXY`}?oqG86cwLG;L51pR8_OXlOB7u^M5nmV@QVwvXo*{qM9b$r=RFY6ApYcS3P{1OSbcht?(c9UIs~0df z&`n-N9SxPGc-OdDuUR$UVIq+tFH(SpLP|-zx1Fvbm+G2Ig5Ef7?Y&gannzhgF`5w+ zhIEpSAWzG1x2iOOM&Z6mT6K@Z8C08qf2PQp0uq^Fbdj zx~}7SK2i!?*TXaeDCHt`1Le77?PnMsmVH? z|Lvm@u&n9X@g`Adc6$1|-GR85sK~!UQI6~LaZ@Us8;ryB9GkRbe|%g!d)aX>m?b@T z^86RXaKT>bdF~bEliS;NX7YH>$KshXN?j(ptLx>FPJjI0#X9;IK1=0%wK;ALIfv^M z5ZruM*rj|CqphwIo>J;!Ox|?eNOu|+UIB0%`@C!J(@}_0ljfN_9Zl2FGz}@`<-$`+ z;W!TC-&nz0+Y(9dBZlv&kMfqv*!TU*e8!&VUwm)ii*9H9 zJTqlQoZh^Pwvi}*_QS99&iB^yHA(}L z@!n&!_AB~6+DY@H-=?`(0yZ!IGye@Qjd&pG`2_KT0C$)A+~|*8NT$>;CxK+n+i37GB9+eCv^iDX=s^ z@!^4X3R~vU-?@jLy(?*cWC;^phuQVv5oSJ^BH620``f=qQ$-&BL?9-uEkFcvuFPiLgfuCX|A~$ z*E`2~HqQW7I zkGAY#sBk9ptBUcGz3e+P%&NPZh>Z@A9huA&?mfVWYchLg z5eIkgU^wm3@4~!UB^=)SAsNjk6bi6u=T3^FCfhdcMCmSP&W@2EOrS?AY2CGzxH1_! z*N#!$j5xiU)|gLrxPz2lK_GLIqn+c7^d2W`6|?<~^&|+f^YvHAMv6JM{V?T?GkJgG zFB#E841BbgbhMtTqR^+<6n8$^Y?eeKK{OhjMv#DRQFr%jDxO)yl74#r!wZ`?v9stIW>2(JRiCInT-PS)D%PxfnDRs$ww)!D&EhFA43m-0Ha-{_;r_BPF?)zI6PSn* zcd|VF)rT0YQ*4coa4=@`^{1aC96!m1cltPR;3GyuH55rfe|#9LY7UP+@gzHJSh98< zz2mRbd+r?Ls+ey)vW`^e`>b#4V?{&p&25P62ii}vWzP`;hJmmX9O)Tmc4IlXE}2xCh9wIaI=Yt`%T{4}DO?41I?e|> z-(&Co6HH`m3ac7;V(l7gqZaA3Lsi2v9(v$D$_p*h=?u}T*(@rH5(pRbz=~CbL__Kf_V`%Ko5i|E-xfM5(Fe=B_&i>)lwbR>5q>QE-It0zMhiOYUVc9 z(A(Wd?Sj=TZmwre%WTGbyNT2;VAWkM)HgNY48=%#it?&DW>r>Dl%G#QK>?BcFwxRt zN-C?E(^N%IXE&vdcd??S>eFtPJ01_0qwl|m8>&L6OJaRo*Cig0lgVV5HS6X%C^KU* z5?Uc8`FBRb#vC_B#!jq2dff7@HL2TMNkd-d6PP|X( zbT3%eG%J_m&P1S;i2d^%y>=DNGHf*s20$1u;)< zqwoiRg}dyJNG>cS|409s(8*rZ72?yR$>6CS{KMb>ke~eXE3|iY({{28U(?VH6U#C& zvH4*C0fy2ZQr8LQS)AK&4`kA1FjxR%aGKii&i;+5ql^(^HA$%D^iR-t+lv+q>8s_mWMA!cx35{5U0%cH^;;-v2+^}qQCDFS=QK}0zJj+lY(nJcvH!?99{bwE6j|CA zA}7hMLEu;=i0qr>rIU=6KS?UT2s3b+=)h}eS}94Zkn5!wy-bc$N;FNo+uB3$r_YVo~pg8%QYF()FV9(fGM6z4_9WUdG0)7x>1lWiSj9UmclTKDdzHzYfzT~718sE05|mcY z;mNN(K~<$--8Y^lFXGdB>?rBxyZMuU_g$70Cu#2OneSLiw3tiV`XlMvc)5y!qyLbY8L3+g#AO(?^evC3B zc$!YIr<>#-{8z?T&O>A`N!F+ouJ5yS%@aJfqMqK?gQQa~^$VMb*l|i~YH4hk$vf}u z#;mKr-hYx^+f9zPw=sX-e3Y|~J-fEk`r&CJ^P8!jF$>!au;|_|Gc)4R>x^J$Jqk)J z+)S3V?Gh<2#oc+7_qHj{WepY-g>o*xPZ^;c&`eyjh*07~N)p@gvG4=s_`*S4kqkyD zMJyIWDTVz0_rL#qC=?gO`Iv4zI!GCDfWk|9W4O%?gkd%7zU2xV3`KCZKDT*Sh~cuGi2;s z{+CZ3p&{%ZqQh+@${xhlEi|{ENNhiL(Y>Ti6LCrBrRzGr?^9V>dHo;(xQ6g1&xW#s zAUs4S`>B7o9Je`2p|lW?nardwbU>i_HtGsr|6~GikIKr*8%w?|vZ+ysTNGUI71I>j+<(LY(VIh=@bIFpdnxw5{{hPQ=#xA(*Ny-H002ovPDHLkV1gLKie&%* literal 0 HcmV?d00001 diff --git a/lab-2-multi-stage-deployments.md b/multi-stage-deployments/README.md similarity index 62% rename from lab-2-multi-stage-deployments.md rename to multi-stage-deployments/README.md index c18ccae..2cf184b 100644 --- a/lab-2-multi-stage-deployments.md +++ b/multi-stage-deployments/README.md @@ -1,14 +1,14 @@ -# Avanade DevOps HOL - Lab 2 - Add QA environment and define your multi-stage continuous deployment process with approvals and gates +# Avanade DevOps HOL - Add QA environment and define your multi-stage continuous deployment process with approvals and gates In this lab, we introduce a QA environment and setup our multi-stage continuous deployment process by adding approvals and gates. Based on the following tutorials: -- [Set up staging environments in Azure App Service](https://docs.microsoft.com/en-us/azure/app-service/web-sites-staged-publishing) -- [Define your multi-stage continuous deployment (CD) process](https://docs.microsoft.com/en-us/vsts/build-release/actions/define-multistage-release-process) +- [Set up staging environments in Azure App Service](https://docs.microsoft.com/en-us/azure/app-service/deploy-staging-slots) +- [Define your multi-stage continuous deployment (CD) process](https://docs.microsoft.com/en-us/azure/devops/pipelines/release/define-multistage-release-process) ## Prerequisites -- Complete [Lab 1 - Create a CI/CD pipeline for .NET with the Azure DevOps Project](lab-1-azure-devops-project-pipeline.md). +- Complete lab [Create a CI/CD pipeline for .NET with the Azure DevOps Project](../azure-devops-project/README.md). ## Tasks @@ -31,5 +31,4 @@ Use approvals and gates to control your deployment 1. Add gate on 'Active Bugs' = 0 ## Next steps - -Continue with [Lab 3 - Analysis with SonarQube](lab-3-analysis-with-sonarqube.md). \ No newline at end of file +Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file diff --git a/prerequisites.md b/prerequisites.md deleted file mode 100644 index 0a65d61..0000000 --- a/prerequisites.md +++ /dev/null @@ -1,74 +0,0 @@ -# Avanade DevOps HOL -These are the hands on labs associated with the Avanade DevOps Practitioners course. This is based to a large part on the [PartsUnlimitedHOL](https://microsoft.github.io/PartsUnlimited/basic/GettingStarted.html) but simplified to use the Visual Studio MVC sample application. It does not use the PartsUnlimited HOL, but we want to acknowledge that project's contribution to this project. - - -**NOTE: MARCH 2019- These instructions are based on new Azure DevOps** - -## Course Pre-requisites ## -If you are taking the Avanade DevOps Practitioners course, then the following are pre-requisites for the beginning of the course. The pre-requisites are straightforward but a few of the tasks take some time so doing this before the class will save time during the course and allow you to get the maximum value from the class. -1. Make sure your Azure subscription is enabled and you can log in and create resources.
- [Azure Portal](https://portal.azure.com)
- If you are using your Avanade email to access the Azure portal, then you will need to create a new Active Directory instance. This is because the labs require creating an enterprise application id and individual users do not have permissions to create enterprise applications on the Avanade AD instance. - - In the [Azure Portal](https://portal.azure.com), *Create a Resource* of *Azure Active Directory* with a meaningful name. This is probably something you will use as a general purpose AD instance (i.e. not just for the class) so you may want to name it appropriately. - - For more information, you can reference [Create an Azure Active Directory tenant](https://docs.microsoft.com/en-us/power-bi/developer/create-an-azure-active-directory-tenant#create-an-azure-active-directory-tenant). **DO NOT** execute steps in *Create some users in your Azure Active Directory tenant* section. - - Once the AD instance is created, click on the *All services* menu item and search for *Subscriptions*. Choose the subscription that is tied to your MSDN account (this is the one you will use for the class). If you don't see the correct subscripiton, you might need to switch directories. - - On the Subscriptions' Overview panel, choose the ->Change directory link and select the new AD instance that you just created. - - For more information, you can reference [Associate an existing subscription to your Azure AD directory](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-how-subscriptions-associated-directory#to-associate-an-existing-subscription-to-your-azure-ad-directory) -1. An active Azure DevOps account.
- [Sign up for Azure DevOps](https://azure.microsoft.com/en-us/services/devops/) -1. Verify that PowerShell v5+ is installed along with the AzureRM modules. - - Set-ExecutionPolicy Unrestricted -force - - Install-Module Powershellget -Force - - Install-Module -Name AzureRm -AllowClobber - - Import-Module -Name AzureRM -1. Using an Azure development environment is strongly encouraged. This avoids conflicts with your existing development environment. Complete the steps listed below in the [Azure Development Environment](#azure-development-environment). -1. Complete the [Getting Started](getting-started/README.md) lab. This will make sure that your environment is correctly configured and ready to execute the remaining labs in the course. -1. Configure a private VSTS agent from the [Private Agent](private-agent/README.md) lab. - -## Azure Development Environment ## -You can accomplish these labs using Visual Studio 2017 on your local computer, but you may want to consider doing the labs using an Azure VM as the development machine. This not only keeps you from having to make changes to your local environment, but it gives you additional experience using Azure. You can either configure an Azure development environment on your own or an easy way to do this is to use PowerShell ISE and execute the following commands. This will create a new Azure resource group and then configure an Azure VM with Windows 10 and Visual Studio 2017 Community edition. It will also use Chocolatey to install a collection of other tools and applications. **Review and modify the script to suit your own needs before executing such as changing the VmVisualStudioVersion to VS Enterprise and Window Server 2016 (VS-2017-Ent-Latest-WS2016) or changing the ResourceGroupLocation to "South Central US"** - - ->**Note:** Sometimes this all works great but other times, the Chocolatey packages do not install when the VM is first created so you may need to run choco install for the individual packages to complete the environment setup. - ->**Note:** Run PowerShell as an administrator. - -```PowerShell -Login-AzureRmAccount -Select-AzureRmSubscription -SubscriptionId - ->**Note:** Not all VM SKUs are available in every region. You can get the list of SKUs in a particular location with the following PowerShell commands. -```PowerShe ll -$locName="West Europe" -Get-AzureRMVMImageSku -Location $locName -Publisher "MicrosoftVisualStudio" -Offer "VisualStudio" | Select Skus -``` - -```PowerShell ->**Note:** The following power shell command is for creating the Virual Machine -Select-AzureRmSubscription -SubscriptionName -$VmName = "DevOpsHOL" -$DnsLabelPrefix = "" -$VmIPName = $VmName+"-ip" -$VmAdminUserName = "" -$VmAdminPassword ="" -$ResourceGroupName = "DevOpsHOL" -$ResourceGroupLocation = "West Europe" -$SecureStringPwd = ConvertTo-SecureString $VmAdminPassword -AsPlainText -Force -New-AzureRmResourceGroup -Name $ResourceGroupName -Location $ResourceGroupLocation -Verbose -Force -New-AzureRmResourceGroupDeployment -ResourceGroupName $ResourceGroupName ` - -TemplateUri "https://raw.githubusercontent.com/Avanade/DevOpsHOL/master/azure-rm/azuredeploy.json" ` - -VmName $VmName ` - -VmSize "Standard_D2s_v3" ` - -VmVisualStudioVersion "VS-2017-Comm-Latest-Win10-N" ` - -VmAdminUserName $VmAdminUserName ` - -VmAdminPassword $SecureStringPwd ` - -DnsLabelPrefix $DnsLabelPrefix ` - -ChocoPackages 'visualstudiocode;notepadplusplus;googlechrome' ` - -Force -Verbose -``` - -Once the script above completes, you can use the following to start the VM and check to see that everything was installed correctly. - - -Open Remote Desktop in windows(type remote desktop in the search button ) and enter your user name and password. Verify you can able to open visual stdio 2017. - diff --git a/private-agent/README.md b/private-agent/README.md new file mode 100644 index 0000000..a82080a --- /dev/null +++ b/private-agent/README.md @@ -0,0 +1,35 @@ +# Avanade DevOps HOL - Private Agent configuration with Azure DevOps +In this lab we configure a private agent for use in building the solution created in the [Continuous Integration](../continuous-integration/README.md) lab. +For more information on using private agents for Azure DevOps builds, see the [Build and Release Agents](https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/agents) documentation. + +### Pre-requisites: +- Complete [Getting Started](../getting-started/README.md) task. +- An active Azure DevOps account.
+ [Sign up for Azure DevOps](https://dev.azure.com/) +- In order to do the SonarQube lab, your Azure DevOps Agent Machine needs Java 8 installed, because the Azure DevOps SonarQube Extension has that requirement. + + +### I. Configure Private Build Agent + +When choosing the Agent Queue for the build process (such as from the [Continuous Integration](../continuous-integration/README.md) lab), click on the **Manage** link above the **Agent queue** dropdown. +Otherwise, you can click on the Settings (gear) icon and choose **Agent Queues** to get to the Agent Queues page for the project.
+>Note: Private build agents need to be accessible from Azure DevOps so it is recommended to install them on a "build" VM within Azure. For the HOL, if you are using an Azure VM for the development environment, then this same VM can be used for running the private build agent. + 1. Open your Azure DevOps portal (https://dev.azure.com/youralias) in another browser tab. + 2. Navigate to the DevOpsHOL project created earlier. + 3. Navigate to Personal access tokens (select your account picture, then Security, or navigate to https://dev.azure.com/youralias/_details/security/tokens) + 4. Create a new token with description **DevOpsTraining**, and copy the personal access token somewhere for use later. + 5. Return to the previous Agent Queue browser tab. Click on **Download agent**. + Once the Agent zip file is downloaded, follow the instructions on the agent download page to unzip and configure the agent on the target machine using the configuration options below. + >+ Enter server URL > https://dev.azure.com/youralias + >+ Enter authentication type (press enter for PAT) > + >+ Enter personal access token > *use the access token saved earlier* + >+ Enter agent pool (press enter for default) > + >+ Enter agent name > DevOpsBuildDeploy *(or use the default which is the computer name)* + >+ Enter work folder (press enter for _work) > + >+ Enter run agent as service? (Y/N) (press enter for N) > Y + >+ Enter User account to use for the service (press enter for NT AUTHORITY\NETWORK SERVICE) > *admin account on target computer* + >+ Enter Password for the account > *admin account password* + 6. Return to the build definition and choose the Default Agent Queue instead of Hosted VS2107. + + + diff --git a/lab-7-security-verification-tests.md b/security-testing/README.md similarity index 60% rename from lab-7-security-verification-tests.md rename to security-testing/README.md index 87e3f99..08db065 100644 --- a/lab-7-security-verification-tests.md +++ b/security-testing/README.md @@ -1,4 +1,4 @@ -# Avanade DevOps HOL - Lab 7 - Security Verification Tests in your CD pipeline +# Avanade DevOps HOL - Security Verification Tests in your CD pipeline This lab focuses on adding Security Verification Tests to your existing CD pipeline. @@ -6,7 +6,7 @@ Based on [this](https://github.com/azsk/DevOpsKit-docs/blob/master/03-Security-I ## Prerequisites -- Complete [Lab 6 - Smoke Testing](lab-6-smoke-testing.md). +- Complete lab [Create a CI/CD pipeline for .NET with the Azure DevOps Project](../azure-devops-project/README.md). ## Tasks @@ -15,5 +15,4 @@ Based on [this](https://github.com/azsk/DevOpsKit-docs/blob/master/03-Security-I 1. Try to resolve the security warnings/errors. ## Next steps - -Done! \ No newline at end of file +Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file diff --git a/lab-6-smoke-testing.md b/smoke-testing/README.md similarity index 92% rename from lab-6-smoke-testing.md rename to smoke-testing/README.md index 80dd8f1..78c4e36 100644 --- a/lab-6-smoke-testing.md +++ b/smoke-testing/README.md @@ -1,10 +1,10 @@ -# Avanade DevOps HOL - Lab 6 - Smoke Testing +# Avanade DevOps HOL - Smoke Testing In this lab, we add smoke tests to our test project. ## Prerequisites -- Complete [Lab 5 - UI Testing](lab-5-ui-testing.md). +- Complete [UI Testing](../ui-testing/README.md). ## Tasks @@ -76,5 +76,4 @@ In this lab, we add smoke tests to our test project. 1. Refactor all the hardcoded timeout values to a variable in the runsettings file. Make them tokenized for replacement during the Release ## Next steps - -Continue with [Lab 7 - Security Verification Tests in your CD pipeline](lab-7-security-verification-tests.md). \ No newline at end of file +Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file diff --git a/lab-3-analysis-with-sonarqube.md b/sonarqube/README.md similarity index 69% rename from lab-3-analysis-with-sonarqube.md rename to sonarqube/README.md index 34ad258..dd4e5a1 100644 --- a/lab-3-analysis-with-sonarqube.md +++ b/sonarqube/README.md @@ -1,4 +1,4 @@ -# Avanade DevOps HOL - Lab 3 - Analysis with SonarQube +# Avanade DevOps HOL - Analysis with SonarQube In this lab, we enable SonarQube for analysis of our code. @@ -6,23 +6,22 @@ Based on [this](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube ## Prerequisites -- Complete [Lab 2 - Add QA environment and define your multi-stage continuous deployment process with approvals and gates](lab-2-multi-stage-deployments.md). +- Complete [Continuous Deployment with Visual Studio Release Management](../continuous-deployment/README.md) lab with a private agent. - Your VSTS Agent Machine needs Java 8 installed, because the VSTS SonarQube Extension has that [requirement](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Extension+for+VSTS-TFS). +- SonarQube server installed and configured. For the purposes of the Avanade DevOps class, the address and login for the SonarQube server to be used will be supplied by the instructor. If you are doing this lab on your own, use the Azure portal to create a SonarQube server using the "SonarQube Certified by Bitnami" template from the marketplace. +- Install the [SonarQube extension](https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarqube) into your VSTS environment. ## Tasks -1. Login to SonarQube and open the Help menu. This menu can be found here: - ![Tutorial steps](images/lab-3-tutorial.png) - -1. Start the "Analyze a new project" tutorial and follow steps 1 and 2. For step 2 do not run the manual command line instructions from the tutorial. Make sure you save the Token and Project Key somewhere safe for later use in VSTS. +1. For the class, the instructor will provide you with a project name and token. If doing this lab with your own server, create a new project and save away the token for use in the next steps. 1. Edit your build definition and add task "Prepare analysis on SonarQube" before any Msbuild or VSBuild task. - Install SonarQube extension from marketplace if the task is not yet available on your VSTS account - - Add a new SonarQube endpoint if you don't have one yet (Use the saved Token) + - Add a new SonarQube service endpoint if you don't have one yet (Use the saved Token or token provided by the instructor) - Enter the saved Project Key and make up a name for your Project - Under Advanced, use the following additional properties: - sonar.exclusions=wwwroot/lib/** - - d:sonar.login="\" + - d:sonar.login="\" 1. Add task "Run Code Analysis" and "Publish Quality Gate Result" to your build. @@ -61,5 +60,4 @@ Based on [this](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube 6. Set up own SonarQube server to use in this lab using Bitnami ## Next steps - -Continue with [Lab 4 - Feature Toggle](lab-4-feature-toggle.md). \ No newline at end of file +Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file diff --git a/source/build/DevOpsHOL-CI.json b/source/build/DevOpsHOL-CI.json new file mode 100644 index 0000000..479f4e6 --- /dev/null +++ b/source/build/DevOpsHOL-CI.json @@ -0,0 +1 @@ +{"options":[{"enabled":true,"definition":{"id":"5d58cc01-7c75-450c-be18-a388ddb129ec"},"inputs":{"branchFilters":"[\"+refs/heads/*\"]","additionalFields":"{}"}},{"enabled":false,"definition":{"id":"a9db38f9-9fdc-478c-b0f9-464221e58316"},"inputs":{"workItemType":"Task","assignToRequestor":"true","additionalFields":"{}"}}],"triggers":[{"branchFilters":["+refs/heads/master"],"pathFilters":[],"batchChanges":false,"maxConcurrentBuildsPerBranch":1,"pollingInterval":0,"triggerType":2}],"variables":{"BuildConfiguration":{"value":"release"},"BuildPlatform":{"value":"any cpu"},"system.debug":{"value":"false","allowOverride":true}},"retentionRules":[{"branches":["+refs/heads/*"],"artifacts":[],"artifactTypesToDelete":["FilePath","SymbolStore"],"daysToKeep":10,"minimumToKeep":1,"deleteBuildRecord":true,"deleteTestResults":true}],"properties":{},"tags":[],"_links":{"self":{"href":"https://dev.azure.com/nagroma/f4f57479-d07f-457d-9107-6dae04b04aad/_apis/build/Definitions/41?revision=2"},"web":{"href":"https://dev.azure.com/nagroma/f4f57479-d07f-457d-9107-6dae04b04aad/_build/definition?definitionId=41"},"editor":{"href":"https://dev.azure.com/nagroma/f4f57479-d07f-457d-9107-6dae04b04aad/_build/designer?id=41&_a=edit-build-definition"},"badge":{"href":"https://dev.azure.com/nagroma/f4f57479-d07f-457d-9107-6dae04b04aad/_apis/build/status/41"}},"buildNumberFormat":"$(date:yyyyMMdd)$(rev:.r)","jobAuthorizationScope":1,"jobTimeoutInMinutes":60,"jobCancelTimeoutInMinutes":5,"process":{"phases":[{"steps":[{"environment":{},"enabled":true,"continueOnError":false,"alwaysRun":false,"displayName":"Use NuGet 4.3.0","timeoutInMinutes":0,"condition":"succeeded()","task":{"id":"2c65196a-54fd-4a02-9be8-d9d1837b7c5d","versionSpec":"0.*","definitionType":"task"},"inputs":{"versionSpec":"4.3.0","checkLatest":"false"}},{"environment":{},"enabled":true,"continueOnError":false,"alwaysRun":false,"displayName":"NuGet restore","timeoutInMinutes":0,"condition":"succeeded()","task":{"id":"333b11bd-d341-40d9-afcf-b32d5ce6f23b","versionSpec":"2.*","definitionType":"task"},"inputs":{"command":"restore","solution":"**/*.sln","selectOrConfig":"select","feedRestore":"","includeNuGetOrg":"true","nugetConfigPath":"","externalEndpoints":"","noCache":"false","disableParallelProcessing":"false","packagesDirectory":"","verbosityRestore":"Detailed","searchPatternPush":"$(Build.ArtifactStagingDirectory)/**/*.nupkg;!$(Build.ArtifactStagingDirectory)/**/*.symbols.nupkg","nuGetFeedType":"internal","feedPublish":"","allowPackageConflicts":"false","externalEndpoint":"","verbosityPush":"Detailed","searchPatternPack":"**/*.csproj","configurationToPack":"$(BuildConfiguration)","outputDir":"$(Build.ArtifactStagingDirectory)","versioningScheme":"off","includeReferencedProjects":"false","versionEnvVar":"","requestedMajorVersion":"1","requestedMinorVersion":"0","requestedPatchVersion":"0","packTimezone":"utc","includeSymbols":"false","toolPackage":"false","buildProperties":"","basePath":"","verbosityPack":"Detailed","arguments":""}},{"environment":{},"enabled":true,"continueOnError":false,"alwaysRun":false,"displayName":"Build solution **\\*.sln","timeoutInMinutes":0,"condition":"succeeded()","task":{"id":"71a9a2d3-a98a-4caa-96ab-affca411ecda","versionSpec":"1.*","definitionType":"task"},"inputs":{"solution":"**\\*.sln","vsVersion":"latest","msbuildArgs":"/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=\"$(build.artifactstagingdirectory)\"","platform":"$(BuildPlatform)","configuration":"$(BuildConfiguration)","clean":"false","maximumCpuCount":"false","restoreNugetPackages":"false","msbuildArchitecture":"x86","logProjectEvents":"true","createLogFile":"false"}},{"environment":{},"enabled":true,"continueOnError":false,"alwaysRun":false,"displayName":"Test Assemblies","timeoutInMinutes":0,"condition":"succeeded()","task":{"id":"5541a522-603c-47ad-91fc-a4b1d163081b","versionSpec":"2.*","definitionType":"task"},"inputs":{"command":"test","publishWebProjects":"true","projects":"**/*test*.csproj","custom":"","arguments":"","publishTestResults":"true","zipAfterPublish":"true","modifyOutputPath":"true","selectOrConfig":"select","feedRestore":"","includeNuGetOrg":"true","nugetConfigPath":"","externalEndpoints":"","noCache":"false","packagesDirectory":"","verbosityRestore":"Detailed","searchPatternPush":"$(Build.ArtifactStagingDirectory)/*.nupkg","nuGetFeedType":"internal","feedPublish":"","externalEndpoint":"","searchPatternPack":"**/*.csproj","configurationToPack":"$(BuildConfiguration)","outputDir":"$(Build.ArtifactStagingDirectory)","nobuild":"false","versioningScheme":"off","versionEnvVar":"","requestedMajorVersion":"1","requestedMinorVersion":"0","requestedPatchVersion":"0","buildProperties":"","verbosityPack":"Detailed","workingDirectory":""}},{"environment":{},"enabled":true,"continueOnError":false,"alwaysRun":false,"displayName":"Publish Artifact: drop","timeoutInMinutes":0,"condition":"succeeded()","task":{"id":"2ff763a7-ce83-4e1f-bc89-0ae63477cebe","versionSpec":"1.*","definitionType":"task"},"inputs":{"PathtoPublish":"$(Build.ArtifactStagingDirectory)","ArtifactName":"drop","ArtifactType":"Container","TargetPath":"","Parallel":"false","ParallelCount":"8"}}],"name":"Agent job 1","refName":"Phase_1","condition":"succeeded()","target":{"executionOptions":{"type":0},"allowScriptsAuthAccessOption":false,"type":1},"jobAuthorizationScope":1,"jobCancelTimeoutInMinutes":1}],"type":1},"repository":{"properties":{"cleanOptions":"0","labelSources":"0","labelSourcesFormat":"$(build.buildNumber)","reportBuildStatus":"true","gitLfsSupport":"false","skipSyncSource":"false","checkoutNestedSubmodules":"false","fetchDepth":"0"},"id":"d1840098-053d-433c-ab57-2104c84e3c94","type":"TfsGit","name":"DevOpsHOL","url":"https://nagroma@dev.azure.com/nagroma/DevOpsHOL/_git/DevOpsHOL","defaultBranch":"refs/heads/master","clean":"false","checkoutSubmodules":false},"processParameters":{},"quality":1,"authoredBy":{"displayName":"Andrew Morgan","url":"https://app.vssps.visualstudio.com/A94cbef75-cc36-4962-a500-fe681327dee5/_apis/Identities/652d04a6-da7e-4ce3-b365-8cfed2574a7d","_links":{"avatar":{"href":"https://dev.azure.com/nagroma/_apis/GraphProfile/MemberAvatars/msa.OWZkNDNhYTktZTkxZS03NmZiLWE1YjktNWQ2Mzg0YTQ4OTI3"}},"id":"652d04a6-da7e-4ce3-b365-8cfed2574a7d","uniqueName":"nagroma.NOCONFLICT.652d04a6-da7e-4ce3-b365-8cfed2574a7d@hotmail.com","imageUrl":"https://dev.azure.com/nagroma/_api/_common/identityImage?id=652d04a6-da7e-4ce3-b365-8cfed2574a7d","descriptor":"msa.OWZkNDNhYTktZTkxZS03NmZiLWE1YjktNWQ2Mzg0YTQ4OTI3"},"drafts":[],"queue":{"_links":{"self":{"href":"https://dev.azure.com/nagroma/_apis/build/Queues/139"}},"id":139,"name":"Hosted VS2017","url":"https://dev.azure.com/nagroma/_apis/build/Queues/139","pool":{"id":4,"name":"Hosted VS2017","isHosted":true}},"id":41,"name":"DevOpsHOL-CI","url":"https://dev.azure.com/nagroma/f4f57479-d07f-457d-9107-6dae04b04aad/_apis/build/Definitions/41?revision=2","uri":"vstfs:///Build/Definition/41","path":"\\","type":2,"queueStatus":0,"revision":2,"createdDate":"2018-11-13T18:16:34.057Z","project":{"id":"f4f57479-d07f-457d-9107-6dae04b04aad","name":"DevOpsHOL","url":"https://dev.azure.com/nagroma/_apis/projects/f4f57479-d07f-457d-9107-6dae04b04aad","state":1,"revision":226,"visibility":"private"}} \ No newline at end of file diff --git a/source/deploy/DevOpsHOL-CD.json b/source/deploy/DevOpsHOL-CD.json new file mode 100644 index 0000000..0a7daff --- /dev/null +++ b/source/deploy/DevOpsHOL-CD.json @@ -0,0 +1 @@ +{"source":2,"revision":1,"description":null,"createdBy":{"displayName":"Andrew Morgan","url":"https://app.vssps.visualstudio.com/A94cbef75-cc36-4962-a500-fe681327dee5/_apis/Identities/652d04a6-da7e-4ce3-b365-8cfed2574a7d","_links":{"avatar":{"href":"https://dev.azure.com/nagroma/_apis/GraphProfile/MemberAvatars/msa.OWZkNDNhYTktZTkxZS03NmZiLWE1YjktNWQ2Mzg0YTQ4OTI3"}},"id":"652d04a6-da7e-4ce3-b365-8cfed2574a7d","uniqueName":"nagroma.NOCONFLICT.652d04a6-da7e-4ce3-b365-8cfed2574a7d@hotmail.com","imageUrl":"https://dev.azure.com/nagroma/_api/_common/identityImage?id=652d04a6-da7e-4ce3-b365-8cfed2574a7d","descriptor":"msa.OWZkNDNhYTktZTkxZS03NmZiLWE1YjktNWQ2Mzg0YTQ4OTI3"},"createdOn":"2018-11-13T19:40:56.740Z","modifiedBy":{"displayName":"Andrew Morgan","url":"https://app.vssps.visualstudio.com/A94cbef75-cc36-4962-a500-fe681327dee5/_apis/Identities/652d04a6-da7e-4ce3-b365-8cfed2574a7d","_links":{"avatar":{"href":"https://dev.azure.com/nagroma/_apis/GraphProfile/MemberAvatars/msa.OWZkNDNhYTktZTkxZS03NmZiLWE1YjktNWQ2Mzg0YTQ4OTI3"}},"id":"652d04a6-da7e-4ce3-b365-8cfed2574a7d","uniqueName":"nagroma.NOCONFLICT.652d04a6-da7e-4ce3-b365-8cfed2574a7d@hotmail.com","imageUrl":"https://dev.azure.com/nagroma/_api/_common/identityImage?id=652d04a6-da7e-4ce3-b365-8cfed2574a7d","descriptor":"msa.OWZkNDNhYTktZTkxZS03NmZiLWE1YjktNWQ2Mzg0YTQ4OTI3"},"modifiedOn":"2018-11-13T19:40:56.740Z","isDeleted":false,"variables":{"AppServicePlan":{"value":"DevOpsHOL"},"ResourceGroupName":{"value":"DevOpsHOL"},"SiteLocation":{"value":"eastus2"},"WebsiteName":{"value":"devopshol-am"}},"variableGroups":[],"environments":[{"id":1,"name":"Dev","rank":1,"owner":{"displayName":"Andrew Morgan","url":"https://app.vssps.visualstudio.com/A94cbef75-cc36-4962-a500-fe681327dee5/_apis/Identities/652d04a6-da7e-4ce3-b365-8cfed2574a7d","_links":{"avatar":{"href":"https://dev.azure.com/nagroma/_apis/GraphProfile/MemberAvatars/msa.OWZkNDNhYTktZTkxZS03NmZiLWE1YjktNWQ2Mzg0YTQ4OTI3"}},"id":"652d04a6-da7e-4ce3-b365-8cfed2574a7d","uniqueName":"nagroma.NOCONFLICT.652d04a6-da7e-4ce3-b365-8cfed2574a7d@hotmail.com","imageUrl":"https://dev.azure.com/nagroma/_api/_common/identityImage?id=652d04a6-da7e-4ce3-b365-8cfed2574a7d","descriptor":"msa.OWZkNDNhYTktZTkxZS03NmZiLWE1YjktNWQ2Mzg0YTQ4OTI3"},"variables":{},"variableGroups":[],"preDeployApprovals":{"approvals":[{"rank":1,"isAutomated":true,"isNotificationOn":false,"id":1}],"approvalOptions":{"requiredApproverCount":null,"releaseCreatorCanBeApprover":false,"autoTriggeredAndPreviousEnvironmentApprovedCanBeSkipped":false,"enforceIdentityRevalidation":false,"timeoutInMinutes":0,"executionOrder":1}},"deployStep":{"id":2},"postDeployApprovals":{"approvals":[{"rank":1,"isAutomated":true,"isNotificationOn":false,"id":3}],"approvalOptions":{"requiredApproverCount":null,"releaseCreatorCanBeApprover":false,"autoTriggeredAndPreviousEnvironmentApprovedCanBeSkipped":false,"enforceIdentityRevalidation":false,"timeoutInMinutes":0,"executionOrder":2}},"deployPhases":[{"deploymentInput":{"parallelExecution":{"parallelExecutionType":0},"skipArtifactsDownload":false,"artifactsDownloadInput":{"downloadInputs":[{"artifactItems":[],"alias":"_DevOpsHOL-CI","artifactType":"Build","artifactDownloadMode":"All"}]},"queueId":139,"demands":[],"enableAccessToken":false,"timeoutInMinutes":0,"jobCancelTimeoutInMinutes":1,"condition":"succeeded()","overrideInputs":{}},"rank":1,"phaseType":1,"name":"Agent job","workflowTasks":[{"environment":{},"taskId":"94a74903-f93f-4075-884f-dc11f34058b4","version":"2.*","name":"Azure Deployment:Create Or Update Resource Group action on $(ResourceGroupName)","refName":"","enabled":true,"alwaysRun":false,"continueOnError":false,"timeoutInMinutes":0,"definitionType":"task","overrideInputs":{},"condition":"succeeded()","inputs":{"ConnectedServiceName":"b973e9df-170f-4334-bd34-7d407bbffacb","action":"Create Or Update Resource Group","resourceGroupName":"$(ResourceGroupName)","location":"$(SiteLocation)","templateLocation":"Linked artifact","csmFileLink":"","csmParametersFileLink":"","csmFile":"$(System.DefaultWorkingDirectory)/_DevOpsHOL-CI/drop/DevOpsHOL.Deployment/WebSite.json","csmParametersFile":"","overrideParameters":"-siteName $(WebSiteName) -appServicePlanName $(AppServicePlan) -siteLocation $(SiteLocation) -workerSize \"0\"","deploymentMode":"Incremental","enableDeploymentPrerequisites":"None","deploymentGroupEndpoint":"","project":"","deploymentGroupName":"","copyAzureVMTags":"true","runAgentServiceAsUser":"false","userName":"","password":"","outputVariable":"","deploymentOutputs":""}},{"environment":{},"taskId":"497d490f-eea7-4f2b-ab94-48d9c1acdcb1","version":"3.*","name":"Azure App Service Deploy: $(WebSiteName)","refName":"","enabled":true,"alwaysRun":false,"continueOnError":false,"timeoutInMinutes":0,"definitionType":"task","overrideInputs":{},"condition":"succeeded()","inputs":{"ConnectedServiceName":"b973e9df-170f-4334-bd34-7d407bbffacb","WebAppKind":"app","WebAppName":"$(WebSiteName)","DeployToSlotFlag":"true","ResourceGroupName":"$(ResourceGroupName)","SlotName":"Dev","ImageSource":"Registry","AzureContainerRegistry":"","AzureContainerRegistryLoginServer":"","AzureContainerRegistryImage":"","AzureContainerRegistryTag":"","DockerRepositoryAccess":"public","RegistryConnectedServiceName":"","PrivateRegistryImage":"","PrivateRegistryTag":"","DockerNamespace":"","DockerRepository":"","DockerImageTag":"","VirtualApplication":"","Package":"$(System.DefaultWorkingDirectory)/**/*.zip","BuiltinLinuxPackage":"$(System.DefaultWorkingDirectory)/**/*.zip","RuntimeStack":"","StartupCommand":"","WebAppUri":"","ScriptType":"","InlineScript":":: You can provide your deployment commands here. One command per line.","ScriptPath":"","GenerateWebConfig":"false","WebConfigParameters":"","AppSettings":"","ConfigurationSettings":"","TakeAppOfflineFlag":"false","UseWebDeploy":"false","SetParametersFile":"","RemoveAdditionalFilesFlag":"false","ExcludeFilesFromAppDataFlag":"false","AdditionalArguments":"","RenameFilesFlag":"false","XmlTransformation":"false","XmlVariableSubstitution":"false","JSONFiles":""}}]}],"environmentOptions":{"emailNotificationType":"OnlyOnFailure","emailRecipients":"release.environment.owner;release.creator","skipArtifactsDownload":false,"timeoutInMinutes":0,"enableAccessToken":false,"publishDeploymentStatus":true,"badgeEnabled":false,"autoLinkWorkItems":false,"pullRequestDeploymentEnabled":false},"demands":[],"conditions":[{"name":"ReleaseStarted","conditionType":1,"value":""}],"executionPolicy":{"concurrencyCount":1,"queueDepthCount":0},"schedules":[],"currentRelease":{"id":1,"url":"https://vsrm.dev.azure.com/nagroma/f4f57479-d07f-457d-9107-6dae04b04aad/_apis/Release/releases/1","_links":{}},"retentionPolicy":{"daysToKeep":30,"releasesToKeep":3,"retainBuild":true},"processParameters":{},"properties":{},"preDeploymentGates":{"id":0,"gatesOptions":null,"gates":[]},"postDeploymentGates":{"id":0,"gatesOptions":null,"gates":[]},"environmentTriggers":[],"badgeUrl":"https://vsrm.dev.azure.com/nagroma/_apis/public/Release/badge/f4f57479-d07f-457d-9107-6dae04b04aad/1/1"}],"artifacts":[{"sourceId":"f4f57479-d07f-457d-9107-6dae04b04aad:41","type":"Build","alias":"_DevOpsHOL-CI","definitionReference":{"defaultVersionBranch":{"id":"","name":""},"defaultVersionSpecific":{"id":"","name":""},"defaultVersionTags":{"id":"","name":""},"defaultVersionType":{"id":"latestType","name":"Latest"},"definition":{"id":"41","name":"DevOpsHOL-CI"},"definitions":{"id":"","name":""},"IsMultiDefinitionType":{"id":"False","name":"False"},"project":{"id":"f4f57479-d07f-457d-9107-6dae04b04aad","name":"DevOpsHOL"},"repository":{"id":"d1840098-053d-433c-ab57-2104c84e3c94","name":"DevOpsHOL"},"artifactSourceDefinitionUrl":{"id":"https://dev.azure.com/nagroma/_permalink/_build/index?collectionId=d3e7f117-361e-4266-8c86-e766ad01a100&projectId=f4f57479-d07f-457d-9107-6dae04b04aad&definitionId=41","name":""}},"isPrimary":true,"isRetained":false}],"triggers":[],"releaseNameFormat":"Release-$(rev:r)","tags":[],"properties":{"DefinitionCreationSource":{"$type":"System.String","$value":"Other"}},"id":1,"name":"DevOpsHOL-CD","path":"\\","projectReference":null,"url":"https://vsrm.dev.azure.com/nagroma/f4f57479-d07f-457d-9107-6dae04b04aad/_apis/Release/definitions/1","_links":{"self":{"href":"https://vsrm.dev.azure.com/nagroma/f4f57479-d07f-457d-9107-6dae04b04aad/_apis/Release/definitions/1"},"web":{"href":"https://dev.azure.com/nagroma/f4f57479-d07f-457d-9107-6dae04b04aad/_release?definitionId=1"}}} \ No newline at end of file diff --git a/trainer-prerequisites.md b/trainer-prerequisites.md index d4a7c87..0bb7110 100644 --- a/trainer-prerequisites.md +++ b/trainer-prerequisites.md @@ -1,16 +1,17 @@ # Avanade DevOps HOL - Trainer Prerequisites - This document describes the steps trainers should take, in order to be prepared for the training. ## Prerequisites -1. Set up your own Demo environment using the practitioners [prerequisites lab](./prerequisites.md). +1. Set up your own Demo environment using the prerequisites lab. 1. Setup SonarQube - Use the Azure Marketplace template "SonarQube Certified by Bitnami" to set up the SonarQube environment for all the participants. - - Get the [admin password](https://docs.bitnami.com/azure/faq/#administrator-password) from the log details. + - Get the administrator password from the boot diagnostics of your SonarQube machine, so you will be able to login. - Add the Url, Username and Password for SonarQube to your Practitioners 'preparations' email. -1. Have the participants complete the practitioners [prerequisites lab](./prerequisites.md). +1. Have the participants complete the prerequisites lab. 1. Set up pairs of participants, where at least one of them has programming/C# knowledge. + +1. Prepare the [Demos](demos/README.md) up front \ No newline at end of file diff --git a/lab-5-ui-testing.md b/ui-testing/README.md similarity index 78% rename from lab-5-ui-testing.md rename to ui-testing/README.md index f5ba4c0..a7b0e38 100644 --- a/lab-5-ui-testing.md +++ b/ui-testing/README.md @@ -1,4 +1,4 @@ -# Avanade DevOps HOL - Lab 5 - UI Testing +# Avanade DevOps HOL - UI Testing In this lab, we add ui tests to our test project. @@ -9,17 +9,17 @@ Based on the following tutorials: ## Prerequisites -- A Virtual Machine on Azure. Follow [prerequisites](prerequisites.md) to set it up. -- Complete [Lab 4 - Feature Toggle](lab-4-feature-toggle.md). -- Set up a private VSTS agent using [this Microsoft tutorial](https://docs.microsoft.com/en-us/vsts/build-release/actions/agents/v2-windows?view=vsts). +- A Virtual Machine on Azure. Follow [prerequisites](../getting-started/README.md) to set it up. +- Set up a private VSTS agent using [this tutorial](../private-agent/README.md). +- Optional: complete [Feature Flag](../feature-flag/README.md) lab. ## Tasks for local UI Testing 1. Add a new Unit Test Project "**Tests**" (.NET Framework 4.7.1) and add the following NuGet packages: - Selenium.Support (Includes Selenium.WebDriver) - Selenium.WebDriver.PhantomJS + - (optional but recommended)Selenium.Chrome.WebDriver - (optional)Selenium.WebDriver.IEDriver - - (optional)Selenium.Chrome.WebDriver 1. Add new file local.runsettings to the **Tests** project.

Click here to view the contents @@ -38,6 +38,8 @@ Based on the following tutorials: -
Code for BasePage ```csharp + using OpenQA.Selenium; + abstract class BasePage { protected readonly IWebDriver Driver; @@ -76,6 +78,8 @@ Based on the following tutorials: -
Code for Home page ```csharp + using OpenQA.Selenium; + class HomePage : BasePage { public HomePage(IWebDriver driver, string baseUrl) : base(driver, baseUrl) @@ -95,6 +99,8 @@ Based on the following tutorials: -
Code for About page ```csharp + using OpenQA.Selenium; + class AboutPage : BasePage { public AboutPage(IWebDriver driver, string baseUrl) : base(driver, baseUrl) @@ -115,6 +121,8 @@ Based on the following tutorials: -
Code for Contact page ```csharp + using OpenQA.Selenium; + class ContactPage : BasePage { public ContactPage(IWebDriver driver, string baseUrl) : base(driver, baseUrl) @@ -144,7 +152,6 @@ Based on the following tutorials: using System; using System.Drawing; using System.IO; - using Tests.PageObjects; [TestClass] public class UITests @@ -176,6 +183,16 @@ Based on the following tutorials: // Shared driver settings _driver.Manage().Window.Size = new Size(1920, 1080); _driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(10); + + // UITest working locally but not in VSTS with the PhantomJSDriver + // Test results in VSTS always showed a timeout exception with VS2017 hosted agent + // and with local agent in dev machine. Test method UITests.Test threw exception: OpenQA.Selenium.WebDriverTimeoutException: + // To fix this I have increased the timeouts on pageload as well as implicit wait time as shown below + // Shared driver settings + // _driver.Manage().Window.Size = new Size(1920, 1080); + // _driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(20); + // _driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(20); + } [TestMethod] @@ -194,6 +211,9 @@ Based on the following tutorials: SaveAsImage(_driver.GetScreenshot(), "Contact.png"); page.GoToAboutPage(); SaveAsImage(_driver.GetScreenshot(), "About.png"); + var containerDiv = _driver.FindElement(By.ClassName("body-content")); + var header = containerDiv.FindElement(By.TagName("h3")); + Assert.AreEqual("Your application description page.", header.Text); } catch (NoSuchElementException) { @@ -229,7 +249,7 @@ Based on the following tutorials: 1. Run all unit tests and make sure that all succeed -## Tasks for UI Testing in the QA environment +## Tasks for UI Testing in the Staging environment 1. Add new file vsts.runsettings to the **Tests** project, with "Copy to Output directory" set to "Copy always". Notice the different value of the parameter. This is a token that will be replaced by an actual Url during the Release in VSTS.
Click here to view the contents @@ -246,25 +266,25 @@ Based on the following tutorials: 1. Edit your Build Definition (save, do not queue) 1. Add task "NuGet restore" after the "Restore" task: - - Set the path to your Test project's packages.config + - Set the path to your Test project's packages.config (Tests/Tests.csproj) - Under Advanced, set the destination to: ../packages 1. Change the Test task by adding the following argument: --filter TestCategory!=UI 1. Add task "Publish build artifact" after the other Publish task, with the following settings: - - Path to publish: \/bin/$(BuildConfiguration) + - Path to publish: \/bin - Artifact name: tests - Artifact publish location: VSTS -1. Edit your Release Definition, QA environment - 1. Add task: Replace Tokens (by Guillaume Rouchon) - - Root directory: $(System.DefaultWorkingDirectory)/Drop/tests +1. Edit your Release Definition, Staging environment + 1. Add task: Replace Tokens (by Guillaume Rouchon) (You'll need to add this to VSTS, then re-edit to add this task type) + - Root directory: $(System.DefaultWorkingDirectory)/_DevOpsHOL-CI/tests - Target files: **/*.runsettings - Token prefix: #{ - Token suffix: }# 1. Add task: Visual Studio Test - - Search folder: $(System.DefaultWorkingDirectory)/Drop/tests + - Search folder: $(System.DefaultWorkingDirectory)/_DevOpsHOL-CI/tests - Test filter criteria: TestCategory=UI - - Settings file: $(System.DefaultWorkingDirectory)/Drop/tests/vsts.runsettings - 1. Go to the Variables tab, add variable "SiteUrl" with Scope "QA" and url "https://\-qa.azurewebsites.net" + - Settings file: $(System.DefaultWorkingDirectory)/_DevOpsHOL-CI/tests/Release/vsts.runsettings + 1. Go to the Variables tab, add variable "SiteUrl" with Scope "Staging" and url "https://\-staging.azurewebsites.net" 1. Commit your code to trigger a build and release @@ -273,7 +293,7 @@ Based on the following tutorials: ## Stretch goals 1. Run the same UI test with a different driver (Chrome, Internet Explorer) +2. Introduce a failing test and verify that the deployment stops with the failed test. ## Next steps - -Continue with [Lab 6 - Smoke Testing](lab-6-smoke-testing.md). \ No newline at end of file +Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file From c5638e9ca7ff595f8c90fe68df957710af6eba0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Geuze?= Date: Fri, 5 Apr 2019 11:27:46 +0000 Subject: [PATCH 070/168] update steps for creating an Azure Devops Project --- azure-devops-project/README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/azure-devops-project/README.md b/azure-devops-project/README.md index 442da0b..21493db 100644 --- a/azure-devops-project/README.md +++ b/azure-devops-project/README.md @@ -11,8 +11,10 @@ Based on [this](https://docs.microsoft.com/en-us/azure/devops-project/azure-devo ## Tasks 1. Go to your Azure Portal and create a new DevOps Project. Make sure it meets the following demands: - - ASP.NET Core Web App on Windows - - Linked to your existing VSTS account + - .NET Runtime + - ASP.NET Core application + - Linux Web App + - Linked to your existing Azure DevOps account 1. When the azure resources are created, go to your VSTS account and make sure that: - The first Build and Release are successful From c72cb4d2abd1b8adb48d5dc28523bc107444660a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Geuze?= Date: Fri, 5 Apr 2019 12:16:11 +0000 Subject: [PATCH 071/168] fixes for lab 1 --- azure-devops-project/README.md | 72 ++++++-------------------------- images/lab-1-netcoreversion.png | Bin 6345 -> 0 bytes 2 files changed, 12 insertions(+), 60 deletions(-) delete mode 100644 images/lab-1-netcoreversion.png diff --git a/azure-devops-project/README.md b/azure-devops-project/README.md index 21493db..e7e811d 100644 --- a/azure-devops-project/README.md +++ b/azure-devops-project/README.md @@ -16,75 +16,27 @@ Based on [this](https://docs.microsoft.com/en-us/azure/devops-project/azure-devo - Linux Web App - Linked to your existing Azure DevOps account -1. When the azure resources are created, go to your VSTS account and make sure that: +1. When the azure resources are created, go to your Azure DevOps account and make sure that: - The first Build and Release are successful - The App is deployed and accessable 1. Clone your code repository to your development environment and open your solution in Visual Studio: - - Upgrade the project to ASP.NET Core 2.0 (Right-click project > Properties) - - Update all NuGet packages to their 2.x counterparts (Right-click project > Manage NuGet packages) - -1. Right-click the project and Unload it. Now edit your project file: - - Remove the line "\$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;\" - -1. Add a new MSTest Test Project (.NET Core) and add a unit test class named "HomeControllerTest" - -
Click here to expand the sample unit test code - - ```csharp - [TestClass] - public class HomeControllerTest - { - [TestMethod] - public void Index() - { - // Arrange - HomeController controller = new HomeController(); - - // Act - ViewResult result = controller.Index() as ViewResult; - - // Assert - Assert.IsNotNull(result); - } - - [TestMethod] - public void About() - { - // Arrange - HomeController controller = new HomeController(); - - // Act - ViewResult result = controller.About() as ViewResult; - - // Assert - Assert.IsNotNull(result); - Assert.AreEqual("Your application description page.", result.ViewData["Message"]); - } - - [TestMethod] - public void Contact() - { - // Arrange - HomeController controller = new HomeController(); - - // Act - ViewResult result = controller.Contact() as ViewResult; - - // Assert - Assert.IsNotNull(result); - } - } - ``` -
+ - Upgrade all projects to ASP.NET Core 2.1 (Right-click project > Properties) + - Update all NuGet packages to their 2.x counterparts (Right-click project > Manage NuGet packages > Select all packages > Update) + - Add NuGet package to the web project: "Microsoft.NET.Sdk.Razor" -1. Build your solution and run the unit tests. Make sure that the tests pass +1. Unload the web project and unit test project. Make the following change to both project files: + - Remove the line + ```xml + $(PackageTargetFallback);portable-net45+win8+wp8+wpa81; + ``` -1. In VSTS, edit your build definition to support .NET Core 2.0.3 - - Open task "NET Core Tool Installer" and change the version field to 2.0.3 (Do not change task version) - ![Lab 1 netcore version](../images/lab-1-netcoreversion.png) +1. Build your solution and run the unit tests. Make sure that the tests pass 1. Push your code to trigger a build/release +1. When the Release is finished, visit your web app url to verify it is still working + ## Stretch goals 1. Add custom logging to Application Insights through your Web App diff --git a/images/lab-1-netcoreversion.png b/images/lab-1-netcoreversion.png deleted file mode 100644 index bc16f412a227fa8c8a72943a3546e2ccce2367c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6345 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 Date: Fri, 5 Apr 2019 12:51:13 +0000 Subject: [PATCH 072/168] upgrade web app to dotnetcore 2.1 --- azure-devops-project/README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/azure-devops-project/README.md b/azure-devops-project/README.md index e7e811d..f86f99e 100644 --- a/azure-devops-project/README.md +++ b/azure-devops-project/README.md @@ -33,6 +33,15 @@ Based on [this](https://docs.microsoft.com/en-us/azure/devops-project/azure-devo 1. Build your solution and run the unit tests. Make sure that the tests pass +1. Open the folder "ArmTemplates" in your source, and edit the file "linux-webapp-template.json": + - Change the dotnetcore version to 2.1: + ```json + "linuxFxVersion": { + "type": "string", + "defaultValue": "dotnetcore|2.1" + }, + ``` + 1. Push your code to trigger a build/release 1. When the Release is finished, visit your web app url to verify it is still working From 1d53707d81863ce7ee8ff91f7d41f957d3cbff05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Geuze?= Date: Fri, 5 Apr 2019 13:04:57 +0000 Subject: [PATCH 073/168] add fix for webapp runtime --- azure-devops-project/README.md | 4 ++++ images/dotnetcore-runtime-stack.png | Bin 0 -> 22601 bytes 2 files changed, 4 insertions(+) create mode 100644 images/dotnetcore-runtime-stack.png diff --git a/azure-devops-project/README.md b/azure-devops-project/README.md index f86f99e..c7b6067 100644 --- a/azure-devops-project/README.md +++ b/azure-devops-project/README.md @@ -42,6 +42,10 @@ Based on [this](https://docs.microsoft.com/en-us/azure/devops-project/azure-devo }, ``` +1. Go to your Azure Devops project site and edit the Release definition + - In the step "Deploy Azure App Service" change the Runtime Stack to .NET Core 2.1 + ![](../images/dotnetcore-runtime-stack.png) + 1. Push your code to trigger a build/release 1. When the Release is finished, visit your web app url to verify it is still working diff --git a/images/dotnetcore-runtime-stack.png b/images/dotnetcore-runtime-stack.png new file mode 100644 index 0000000000000000000000000000000000000000..3bf78b62618af50955b76872c306b110388ca5cc GIT binary patch literal 22601 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 Date: Fri, 5 Apr 2019 13:22:50 +0000 Subject: [PATCH 074/168] tested labs 1 and 2, some fixes --- azure-devops-project/README.md | 2 -- multi-stage-deployments/README.md | 10 +++------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/azure-devops-project/README.md b/azure-devops-project/README.md index c7b6067..2c169e1 100644 --- a/azure-devops-project/README.md +++ b/azure-devops-project/README.md @@ -54,7 +54,5 @@ Based on [this](https://docs.microsoft.com/en-us/azure/devops-project/azure-devo 1. Add custom logging to Application Insights through your Web App -1. Export the ARM template to set up the Web App in Azure, integrate it in your Release definition - ## Next steps Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file diff --git a/multi-stage-deployments/README.md b/multi-stage-deployments/README.md index 2cf184b..3a1536a 100644 --- a/multi-stage-deployments/README.md +++ b/multi-stage-deployments/README.md @@ -12,7 +12,7 @@ Based on the following tutorials: ## Tasks -First, let's define the QA environment: +Let's define the QA environment: 1. Add a QA Deployment Slot to your App Service in Azure @@ -20,15 +20,11 @@ First, let's define the QA environment: 1. Configure the deployment step for the QA slot in the same App Service +1. Add pre deployment approval to control promotion from QA to Production + 1. Run a new Release 1. Review the new QA website is live on \-qa.azurewebsites.net -Use approvals and gates to control your deployment - -1. Add pre deployment approval to control promotion from QA to Production - -1. Add gate on 'Active Bugs' = 0 - ## Next steps Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file From fad7fb9c31741f8a9bd97b9c94c8972b659bb1f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Geuze?= Date: Mon, 8 Apr 2019 22:16:30 +0000 Subject: [PATCH 075/168] update feature flag lab --- feature-flag/README.md | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/feature-flag/README.md b/feature-flag/README.md index 0882e68..8ce07e1 100644 --- a/feature-flag/README.md +++ b/feature-flag/README.md @@ -1,9 +1,7 @@ # Avanade DevOps HOL - Feature Flag for Web Application Feature flags provide the ability to turn features of your application on and off at a moments notice, no code deployments required. In this lab, we will add code to the project to demonstrate the use of feature flags to allow selectively turning on and off features to expose functionality. -In this lab, we add a Feature Toggle mechanism to our web application. The toggle will be enabled by json config and tested locally. - -Based on [this](https://microsoft.github.io/PartsUnlimited/advanced/FeatureFlagWeb.html) article and [this](https://github.com/jason-roberts/FeatureToggle/tree/master/src/Examples/AspDotNetCoreExample) example. +In this lab, we add a Feature Toggle mechanism to our web application. The toggle will be enabled by json config and tested locally. To implement this, we use the [FeatureToggle.Net](https://github.com/jason-roberts/FeatureToggle) framework by Jason Roberts. This lab is based on the [Parts Unlimited](https://microsoft.github.io/PartsUnlimited/advanced/FeatureFlagWeb.html) reference project and the [example implementation](https://github.com/jason-roberts/FeatureToggle/tree/master/src/Examples/AspDotNetCoreExample) by Jason Roberts. ## Pre-requisites: ## - Complete [Getting Started](../getting-started/README.md) hands on lab. @@ -18,20 +16,30 @@ Based on [this](https://microsoft.github.io/PartsUnlimited/advanced/FeatureFlagW -
Add class "CheckPhoneNumber" in a folder named "Feature" ```csharp - public class CheckPhoneNumber : SimpleFeatureToggle { } + using FeatureToggle; + + namespace aspnet_core_dotnet_core.Features + { + public class CheckPhoneNumber : SimpleFeatureToggle { } + } ```
-
Add class "ContactViewModel" in a folder named "Models". This class will be used to bring the Feature Toggle setting to the Contact page ```csharp - public class ContactViewModel + using FeatureToggle; + + namespace aspnet_core_dotnet_core.Models { - public IFeatureToggle CheckPhoneNumber { get; set; } + public class ContactViewModel + { + public IFeatureToggle CheckPhoneNumber { get; set; } - public string Name { get; set; } + public string Name { get; set; } - public int PhoneNumber { get; set; } + public int? PhoneNumber { get; set; } + } } ```
@@ -107,7 +115,7 @@ Based on [this](https://microsoft.github.io/PartsUnlimited/advanced/FeatureFlagW public void ConfigureServices(IServiceCollection services) { // Set provider config so file is read from content root path - var provider = new AppSettingsProvider { Configuration = (IConfiguration)Configuration }; + var provider = new AppSettingsProvider { Configuration = Configuration }; // Add your feature here services.AddSingleton(new CheckPhoneNumber { ToggleValueProvider = provider }); @@ -155,11 +163,15 @@ Based on [this](https://microsoft.github.io/PartsUnlimited/advanced/FeatureFlagW
1. Run the web application locally and test the new Contact form: + 1. Disable the feature by editing the config, set it to false, reload the page: 1. Enter any phone number and hit submit. Notice how no validation error is given + 1. Enable the feature, reload the page: + 1. Enter phone number 0123456789, hit submit, and notice the validation error + 1. Enter phone number 123-123-5678, submit and notice the page refreshes without error 1. Push your code changes and let your pipeline do it's job From 23716b36ff0db5e03f54e3d9cd9b34048473ca5a Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 11:48:20 +0200 Subject: [PATCH 076/168] update main introduction --- README.md | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index ce77f7f..76a8441 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,18 @@ -# Avanade DevOps HOL -These are the hands on labs associated with the Avanade DevOps Practitioners course. This is based to a large part on the [PartsUnlimitedHOL](https://github.com/Microsoft/PartsUnlimitedE2E/blob/master/PartsUnlimited-aspnet45/docs/GettingStarted.md) but simplified to use the Visual Studio MVC sample application. It does not use the PartsUnlimited HOL, but we want to acknowledge that project's contribution to this project. +# Avanade DevOps Hands-On Labs +These are the hands-on labs associated with the Avanade DevOps Practitioners course. This is based to a large part on the [PartsUnlimitedHOL](https://github.com/Microsoft/PartsUnlimitedE2E/blob/master/PartsUnlimited-aspnet45/docs/GettingStarted.md) but simplified to use the Visual Studio MVC sample application. It does not use the PartsUnlimited HOL, but we want to acknowledge that project's contribution to this project. -You can accomplish these labs using an Azure VM as the development machine. This not only keeps you from having to make changes to your local environment, but it gives you additional experience using Azure and PowerShell. To start setting up your environment, make sure to follow the steps in the Prerequisites lab. +The labs can be completed using an Azure Virtual Machine as development environment. This not only keeps you from having to make changes to your local environment, but it gives you additional experience using Azure and PowerShell. The [Prerequisites lab](azure-rm/README.md) helps you to set up this environment. -## Course Training Labs and Estimated Effort -Below you will find the available training labs and the estimated time they will take to complete. The labs have been ordered in a logical way +## Course Labs +The course contains the following labs: -The order in which they are presented, is the recommended order to run through them. - -| Lab | Estimated Effort (minutes) | +| Lab | Estimated Effort | | --------- |:--------------------------:| -| [Prerequisites - Set up your development environment with PowerShell and ARM](azure-rm/README.md) | 30 | -| [Lab 1 - Create a CI/CD pipeline for .NET with the Azure DevOps Project](azure-devops-project/README.md) | 60 | -| [Lab 2 - Add QA environment and define your multi-stage continuous deployment process with approvals and gates](multi-stage-deployments/README.md) | 45 | -| [Lab 3 - Analysis with SonarQube](sonarqube/README.md) | 45 | -| [Lab 4 - Feature Toggle](feature-flag/README.md) | 45 | -| [Lab 5 - UI Testing](ui-testing/README.md) | 90 | -| [Lab 6 - Smoke Testing](smoke-testing/README.md) | 45 | -| [[**Optional**] Lab 7 - Security Verification Tests in your CD pipeline](security-testing/README.md) | 45 | +| [Prerequisites lab - Set up your development environment](azure-rm/README.md) | 30 minutes | +| [Lab 1 - Create a CI/CD pipeline for .NET with the Azure DevOps Project](azure-devops-project/README.md) | 60 minutes | +| [Lab 2 - Add QA environment and define your multi-stage continuous deployment process with approvals and gates](multi-stage-deployments/README.md) | 45 minutes | +| [Lab 3 - Analysis with SonarQube](sonarqube/README.md) | 45 minutes | +| [Lab 4 - Feature Toggle](feature-flag/README.md) | 45 minutes | +| [Lab 5 - UI Testing](ui-testing/README.md) | 90 minutes | +| [Lab 6 - Smoke Testing](smoke-testing/README.md) | 45 minutes | +| [[**Optional**] Lab 7 - Security Verification Tests in your CD pipeline](security-testing/README.md) | 45 minutes | From 5f0989f9625d24934725f88b85364232e34c71b1 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 13:14:18 +0200 Subject: [PATCH 077/168] update prerequisites lab --- azure-rm/ProvisionEnvironment.ps1 | Bin 2650 -> 0 bytes azure-rm/README.md | 72 +++---- azure-rm/json/devtestlab.json | 239 ----------------------- azure-rm/json/devtestlab.parameters.json | 51 ----- azure-rm/json/vm.json | 138 ------------- azure-rm/json/vm.parameters.json | 39 ---- 6 files changed, 32 insertions(+), 507 deletions(-) delete mode 100644 azure-rm/ProvisionEnvironment.ps1 delete mode 100644 azure-rm/json/devtestlab.json delete mode 100644 azure-rm/json/devtestlab.parameters.json delete mode 100644 azure-rm/json/vm.json delete mode 100644 azure-rm/json/vm.parameters.json diff --git a/azure-rm/ProvisionEnvironment.ps1 b/azure-rm/ProvisionEnvironment.ps1 deleted file mode 100644 index 5a7c2d3af49164ff054a852117a7c4e4041607c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2650 zcmd6p&2Q5{5XI+=#Q(5La)5&oaO1!M6~YD5DuteqARlg8ln;|Q4Yc%M2YzoiTRTpj z6c7@!?AW`rGjHa-nfB+8mc6n$*Nppx4J@~F-lulNcWS5H`kk_qnzQHJ4O?I}vy8X< zcF*5U)(`B=dRUIUWzJWMrB3OYd(YZku%h$MzVTe*-*GDC8nP#kEq<5Q=Q&{aoJbK> zhX@nzGaxzUeQp=n2;Txkj_WowiWe{`TJ$m_!!nMZU3x?T_3an}!mf`O@GJIfaOf+u zD#jjpW%kq_+Y@_Mi}1XJ#M#PMGWVE;yg(dt5G#vy{Q@_m8w8Gs@>j5z+n8#X*?Pm- z5mr;Yi?t!Y;%Uq+73ixz|A6)ZS&P{O<;1#m;pYI~Q`S@a>OFnOTbs2xTI=Ecj1!0O z`}ro;6&5Y~Xpc(OOW6Iwdc$7wcFM^m=yG4dYkSDfmCs0w>k3h&B;l`OlC}rFUP9(f zm=5tM%Z~Rv_TH}jQ*{X1-HdVfeCvHnv$4uml*ctScc84>EA+O%Z^{Y~j-W7gs)L=> zD?;2k>Mg#Co~i2Hl@u?pO>D)kW`nc$pmnHAy)M3IzMAseC(6Kc8R{GL+{b#vrG6IY zZO?O5W`k(z?Gt;;bAjz8mh#^7xI>hbuWaohC|lkGigI@QI#|6SjB)D3xwn~LG5s27 zPyWLR&A2epR{UzczE7)F9^<1=7w8K9JDgu_skzEVF@2MJ-?b96PT2x-v6u;ni?^>{$_-}|FkhP zk{wwV_1RU6!m8@|T_uY)*{bgy+i<0de2iKEFp)Y0j-2RjoN( z{7$57>-++Q_3=-9jQ+Z(Bil{#+Q)e4-v5L5g15$+0ZnE7R};08z{ Change directory link and select the new AD instance that you just created. - For more information, you can reference [Associate an existing subscription to your Azure AD directory](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-how-subscriptions-associated-directory#to-associate-an-existing-subscription-to-your-azure-ad-directory) -## Preparing a Development environment - -1. Make sure you have an active Azure DevOps account.
-[Sign up for Azure DevOps](https://dev.azure.com/) - -2. Verify that PowerShell v5+ is installed along with the AzureRM modules. - - Install-Module Powershellget -Force - - Install-Module -Name AzureRm -AllowClobber - - Import-Module -Name AzureRM - -3. Using an Azure development environment is strongly encouraged. This avoids conflicts with your existing development environment. Complete the steps listed below in the [Azure Development Environment](#azure-development-environment). - -4. Complete the [Getting Started](getting-started/README.md) lab. This will make sure that your environment is correctly configured and ready to execute the remaining labs in the course. - -5. Configure a private Build/Release agent from the [Private Agent](private-agent/README.md) lab. - -## Set up the Azure Development Environment -You can either configure an Azure development environment on your own or use the PowerShell script provided by this lab. This will create a DevTestLab in a new Azure Resource Group and then configure an Azure VM with Windows 10 and the latest Visual Studio Community edition. It will also use Chocolatey to install a collection of other tools and applications. - ->**Note:** Not all VM SKUs are available in every region. You can get the list of SKUs in a particular location with the following PowerShell commands. -```PowerShell -$locName="South Central US" -Get-AzureRMVMImageSku -Location $locName -Publisher "MicrosoftVisualStudio" -Offer "VisualStudio" | Select Skus -``` - -To start setting up your environment, follow these steps: +## Prepare development environment -1. Clone this repository or download the [azure-rm](../azure-rm) folder and extract the files on your system. +1. Create a DevTest lab\ +[Create a lab in Azure DevTest Labs](https://docs.microsoft.com/azure/lab-services/devtest-lab-create-lab). Use settings: + + Lab name: devopslab + Resource group: devopslab (new) + Location: West Europe + Auto-shutdown: default (Enabled, 19:00) -1. Open **ProvisionEnvironment.ps1** and modify the following lines of PowerShell code in the top of the file: - ```PowerShell - $subscriptionName = "Services" # Change to the name of your azure subscription - $ResourceGroupName = "adp2019" # Change if you want to name the resource group differently - ``` +2. Add a Virtual Machine to your DevTest lab lab\ +[Add a VM to a lab in Azure DevTest Labs](https://docs.microsoft.com/azure/lab-services/devtest-lab-add-vm). Use settings: -1. Then open a PowerShell console in the same folder and execute the file: .\ProvisionEnvironment.ps1 + Choose a base: Visual Studio 2019 Community on Windows 10 Enterprise N (x64) + Virtual machine name: devopsvm + User name: devopshol + Password: ADP#2019 + Virtual machine size: Standard_B8ms + OS disk type: Standard SSD + Artifacts selection: Git, Visual Studio Code, Chrome -1. Watch how the script will create your required resources in Azure. **The process may take 20 minutes.** +3. Verify connection to the Virtual Machine\ +*Wait untill the virtual machine is fully provisioned and the artifacts are applied\ +(this can take up to 20 minutes).*\ +Verify you can use the virtual machine by connecting to it: Select 'Connect' in the Virtual machine Overview in the portal and provide the credentials you used in the previous step. ## Next steps -Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file +Return to the [Lab index](../README.md) to continue with the course labs. \ No newline at end of file diff --git a/azure-rm/json/devtestlab.json b/azure-rm/json/devtestlab.json deleted file mode 100644 index 3356097..0000000 --- a/azure-rm/json/devtestlab.json +++ /dev/null @@ -1,239 +0,0 @@ -{ - "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "newLabName": { - "type": "string", - "defaultValue": "FabrikamDemoLab", - "metadata": { - "description": "The name of the new lab instance to be created." - } - }, - "timeZoneId": { - "type": "string", - "defaultValue": "UTC", - "metadata": { - "description": "The timezone of the lab." - } - }, - "labVmShutDownTime": { - "type": "string", - "minLength": 5, - "maxLength": 5, - "defaultValue": "21:00", - "metadata": { - "description": "Set 'Auto Shutdown' policy: The UTC time at which the Lab VMs will be automatically shutdown (E.g. 17:30, 20:00, 09:00)." - } - }, - "maxAllowedVmsPerUser": { - "type": "int", - "minValue": 0, - "defaultValue": 10, - "metadata": { - "description": "Set 'max VM allowed per user' policy: The maximum number of VMs allowed per user." - } - }, - "maxAllowedVmsPerLab": { - "type": "int", - "minValue": 0, - "defaultValue": 100, - "metadata": { - "description": "Set 'Total VMs allowed in Lab' policy: The maximum number of VMs allowed per lab." - } - }, - "vmSize": { - "type": "string", - "defaultValue": "Standard_D1", - "metadata": { - "description": "The size of all the VMs to be created in the lab." - } - }, - "vmStorageType": { - "type": "string", - "defaultValue": "Premium", - "metadata": { - "description": "The storage type ('Premium' or 'Standard') of all the VMs to be created in the lab." - } - }, - "vmUsername": { - "type": "string", - "defaultValue": "demolab", - "metadata": { - "description": "The username for the local account that will be created on all the new VMs." - } - }, - "vmPassword": { - "type": "securestring", - "defaultValue": "<3DevTestLabs!", - "metadata": { - "description": "The password for the local account that will be created on all the new VMs." - } - }, - "offer": { - "type": "string", - "defaultValue": "visualstudio2019" - }, - "publisher": { - "type": "string", - "defaultValue": "microsoftvisualstudio" - }, - "sku": { - "type": "string", - "defaultValue": "vs-2019-comm-win10-n" - }, - "osType": { - "type": "string", - "defaultValue": "Windows" - }, - "version": { - "type": "string", - "defaultValue": "latest" - }, - "chocolatey_packages": { - "type": "string", - "defaultValue": "git,vscode,googlechrome", - "metadata": { - "description": "The packages that will be installed by chocolatey on the new vm." - } - }, - "chocolatey_allowEmptyChecksums": { - "type": "bool", - "defaultValue": true - }, - "chocolatey_ignoreChecksums": { - "type": "bool", - "defaultValue": true - } - }, - "variables": { - "newLabId": "[resourceId('Microsoft.DevTestLab/labs', parameters('newLabName'))]", - "labVirtualNetworkName": "[concat('Dtl', parameters('newLabName'))]", - "labSubnetName": "[concat(variables('labVirtualNetworkName'), 'Subnet')]", - "labVirtualNetworkId": "[concat('/virtualnetworks/', variables('labVirtualNetworkName'))]", - "vmFormulaName": "[concat(parameters('newLabName'), '/Developer')]", - "vmFormulaDescription": "[concat('Formula for lab VMs in ', parameters('newLabName'))]" - }, - "resources": [ - { - "apiVersion": "2017-04-26-preview", - "type": "Microsoft.DevTestLab/labs", - "name": "[parameters('newLabName')]", - "location": "[resourceGroup().location]", - "resources": [ - { - "apiVersion": "2017-04-26-preview", - "name": "[variables('labVirtualNetworkName')]", - "type": "virtualnetworks", - "dependsOn": [ - "[variables('newLabId')]" - ] - }, - { - "apiVersion": "2017-04-26-preview", - "name": "LabVmsShutdown", - "type": "schedules", - "dependsOn": [ - "[variables('newLabId')]" - ], - "properties": { - "status": "Enabled", - "timeZoneId": "[parameters('timeZoneId')]", - "taskType": "LabVmsShutdownTask", - "dailyRecurrence": { - "time": "[replace(parameters('labVmShutDownTime'),':','')]" - } - } - }, - { - "apiVersion": "2017-04-26-preview", - "name": "default/MaxVmsAllowedPerUser", - "type": "policysets/policies", - "dependsOn": [ - "[variables('newLabId')]" - ], - "properties": { - "description": "", - "factName": "UserOwnedLabVmCount", - "threshold": "[string(parameters('maxAllowedVmsPerUser'))]", - "evaluatorType": "MaxValuePolicy", - "status": "enabled" - } - }, - { - "apiVersion": "2017-04-26-preview", - "name": "default/MaxVmsAllowedPerLab", - "type": "policysets/policies", - "dependsOn": [ - "[variables('newLabId')]" - ], - "properties": { - "description": "", - "factName": "LabVmCount", - "threshold": "[string(parameters('maxAllowedVmsPerLab'))]", - "evaluatorType": "MaxValuePolicy", - "status": "enabled" - } - } - ] - }, - { - "apiVersion": "2017-04-26-preview", - "type": "Microsoft.DevTestLab/labs/formulas", - "name": "[variables('vmFormulaName')]", - "location": "[resourceGroup().location]", - "dependsOn": [ - "[variables('newLabId')]" - ], - "properties": { - "description": "[variables('vmFormulaDescription')]", - "osType": "[parameters('osType')]", - "formulaContent": { - "properties": { - "size": "[parameters('vmSize')]", - "userName": "[parameters('vmUsername')]", - "password": "[parameters('vmPassword')]", - "labSubnetName": "[variables('labSubnetName')]", - "labVirtualNetworkId": "[variables('labVirtualNetworkId')]", - "allowClaim": true, - "storageType": "[parameters('vmStorageType')]", - "galleryimagereference": { - "Sku": "[parameters('sku')]", - "OsType": "[parameters('osType')]", - "Publisher": "[parameters('publisher')]", - "Offer": "[parameters('offer')]", - "Version": "[parameters('version')]" - }, - "networkInterface": { - "virtualNetworkId": "[variables('labVirtualNetworkId')]" - }, - "artifacts": [ - { - "artifactid": "/artifactsources/public repo/artifacts/windows-chocolatey", - "parameters": [ - { - "name": "packages", - "value": "[parameters('chocolatey_packages')]" - }, - { - "name": "allowEmptyChecksums", - "value": "[parameters('chocolatey_allowEmptyChecksums')]" - }, - { - "name": "ignoreChecksums", - "value": "[parameters('chocolatey_ignoreChecksums')]" - } - ] - } - ] - } - } - } - } - ], - "outputs": { - "labId": { - "type": "string", - "value": "[resourceId('Microsoft.DevTestLab/labs', parameters('newLabName'))]" - } - } -} \ No newline at end of file diff --git a/azure-rm/json/devtestlab.parameters.json b/azure-rm/json/devtestlab.parameters.json deleted file mode 100644 index 6c33069..0000000 --- a/azure-rm/json/devtestlab.parameters.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "newLabName": { - "value": "devopslab" - }, - "timeZoneId": { - "value": "W. Europe Standard Time" - }, - "labVmShutDownTime": { - "value": "21:00" - }, - "maxAllowedVmsPerUser": { - "value": 3 - }, - "maxAllowedVmsPerLab": { - "value": 100 - }, - "vmSize": { - "value": "Standard_B8ms" - }, - "vmStorageType": { - "value": "Standard" - }, - "vmUsername": { - "value": "devopshol" - }, - "vmPassword": { - "value": "ADP#2019" - }, - "offer": { - "value": "visualstudio2019" - }, - "publisher": { - "value": "microsoftvisualstudio" - }, - "sku": { - "value": "vs-2019-comm-win10-n" - }, - "osType": { - "value": "Windows" - }, - "version": { - "value": "latest" - }, - "chocolatey_packages": { - "value": "git,vscode,googlechrome" - } - } -} \ No newline at end of file diff --git a/azure-rm/json/vm.json b/azure-rm/json/vm.json deleted file mode 100644 index be3713e..0000000 --- a/azure-rm/json/vm.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "newVMName": { - "type": "string", - "metadata": { - "description": "The name of the new vm to be created." - } - }, - "existingLabName": { - "type": "string", - "metadata": { - "description": "The name of an existing lab where the new vm will be created." - } - }, - "offer": { - "type": "string", - "metadata": { - "description": "Offer of the gallery image" - } - }, - "publisher": { - "type": "string", - "metadata": { - "description": "Publisher of the gallery image" - } - }, - "sku": { - "type": "string", - "metadata": { - "description": "Sku of the gallery image" - } - }, - "osType": { - "type": "string", - "metadata": { - "description": "OsType of the gallery image" - } - }, - "version": { - "type": "string", - "defaultValue": "latest", - "metadata": { - "description": "Version of the gallery image" - } - }, - "newVMSize": { - "type": "string", - "metadata": { - "description": "The size of the new vm to be created." - } - }, - "userName": { - "type": "string", - "metadata": { - "description": "The username for the local account that will be created on the new vm." - } - }, - "password": { - "type": "securestring", - "metadata": { - "description": "The password for the local account that will be created on the new vm." - } - }, - "chocolatey_packages": { - "type": "string", - "metadata": { - "description": "The packages that will be installed by chocolatey on the new vm." - } - }, - "chocolatey_allowEmptyChecksums": { - "type": "bool", - "defaultValue": true - }, - "chocolatey_ignoreChecksums": { - "type": "bool", - "defaultValue": true - } - }, - "variables": { - "labSubnetName": "[concat(variables('labVirtualNetworkName'), 'Subnet')]", - "labVirtualNetworkId": "[resourceId('Microsoft.DevTestLab/labs/virtualnetworks', parameters('existingLabName'), variables('labVirtualNetworkName'))]", - "labVirtualNetworkName": "[concat('Dtl', parameters('existingLabName'))]", - "resourceName": "[concat(parameters('existingLabName'), '/', parameters('newVMName'))]", - "resourceType": "Microsoft.DevTestLab/labs/virtualMachines" - }, - "resources": [ - { - "apiVersion": "2018-10-15-preview", - "type": "Microsoft.DevTestLab/labs/virtualMachines", - "name": "[variables('resourceName')]", - "location": "[resourceGroup().location]", - "properties": { - "size": "[parameters('newVMSize')]", - "isAuthenticationWithSshKey": false, - "userName": "[parameters('userName')]", - "sshKey": "", - "password": "[parameters('password')]", - "labVirtualNetworkId": "[variables('labVirtualNetworkId')]", - "labSubnetName": "[variables('labSubnetName')]", - "artifacts": [ - { - "artifactId": "[resourceId('Microsoft.DevTestLab/labs/artifactSources/artifacts', parameters('existingLabName'), 'public repo', 'windows-chocolatey')]", - "parameters": [ - { - "name": "packages", - "value": "[parameters('chocolatey_packages')]" - }, - { - "name": "allowEmptyChecksums", - "value": "[parameters('chocolatey_allowEmptyChecksums')]" - }, - { - "name": "ignoreChecksums", - "value": "[parameters('chocolatey_ignoreChecksums')]" - } - ] - } - ], - "notes": "Visual Studio 2019 Community on Windows 10 Enterprise N (x64)", - "galleryImageReference": { - "Sku": "[parameters('sku')]", - "OsType": "[parameters('osType')]", - "Publisher": "[parameters('publisher')]", - "Offer": "[parameters('offer')]", - "Version": "[parameters('version')]" - } - } - } - ], - "outputs": { - "vmId": { - "type": "string", - "value": "[resourceId(variables('resourceType'), parameters('existingLabName'), parameters('newVMName'))]" - } - } -} \ No newline at end of file diff --git a/azure-rm/json/vm.parameters.json b/azure-rm/json/vm.parameters.json deleted file mode 100644 index 040460f..0000000 --- a/azure-rm/json/vm.parameters.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "newVMName": { - "value": "devopsvm" - }, - "existingLabName": { - "value": "devopslab" - }, - "newVMSize": { - "value": "Standard_B8ms" - }, - "userName": { - "value": "devopshol" - }, - "password": { - "value": "ADP#2019" - }, - "chocolatey_packages": { - "value": "git,vscode,googlechrome" - }, - "offer": { - "value": "visualstudio2019" - }, - "publisher": { - "value": "microsoftvisualstudio" - }, - "sku": { - "value": "vs-2019-comm-win10-n" - }, - "osType": { - "value": "Windows" - }, - "version": { - "value": "latest" - } - } -} \ No newline at end of file From 8417d86b952b6b5c6f429e8bfb59743bd4112ed4 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 13:29:39 +0200 Subject: [PATCH 078/168] update prerequisites formatting --- azure-rm/README.md | 43 +++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/azure-rm/README.md b/azure-rm/README.md index 315be65..5babc10 100644 --- a/azure-rm/README.md +++ b/azure-rm/README.md @@ -22,28 +22,27 @@ If you used a (Avanade) organization MDSN account, go to the next step. ## Prepare development environment 1. Create a DevTest lab\ -[Create a lab in Azure DevTest Labs](https://docs.microsoft.com/azure/lab-services/devtest-lab-create-lab). Use settings: - - Lab name: devopslab - Resource group: devopslab (new) - Location: West Europe - Auto-shutdown: default (Enabled, 19:00) - -2. Add a Virtual Machine to your DevTest lab lab\ -[Add a VM to a lab in Azure DevTest Labs](https://docs.microsoft.com/azure/lab-services/devtest-lab-add-vm). Use settings: - - Choose a base: Visual Studio 2019 Community on Windows 10 Enterprise N (x64) - Virtual machine name: devopsvm - User name: devopshol - Password: ADP#2019 - Virtual machine size: Standard_B8ms - OS disk type: Standard SSD - Artifacts selection: Git, Visual Studio Code, Chrome - -3. Verify connection to the Virtual Machine\ -*Wait untill the virtual machine is fully provisioned and the artifacts are applied\ -(this can take up to 20 minutes).*\ -Verify you can use the virtual machine by connecting to it: Select 'Connect' in the Virtual machine Overview in the portal and provide the credentials you used in the previous step. +Follow instructions from [Create a lab in Azure DevTest Labs](https://docs.microsoft.com/azure/lab-services/devtest-lab-create-lab). Ensure the following settings: + - Lab name: devopslab + - Resource group: devopslab (new) + - Location: West Europe + - Auto-shutdown: default (Enabled, 19:00) + +2. Add a Virtual Machine to your DevTest lab\ +Follow instructions from [Add a VM to a lab in Azure DevTest Labs](https://docs.microsoft.com/azure/lab-services/devtest-lab-add-vm). Ensure the following settings: + - Choose a base: Visual Studio 2019 Community on Windows 10 Enterprise N (x64) + - Virtual machine name: devopsvm + - User name: devopshol + - Password: ADP#2019 + - Virtual machine size: Standard_B8ms + - OS disk type: Standard SSD + - Artifacts selection: Git, Visual Studio Code, Chrome + +3. Verify connection to the Virtual Machine + - Wait untill the virtual machine is fully provisioned and the artifacts are applied.\ + *(this can take up to 20 minutes)* + - Verify you can use the virtual machine by connecting to it:\ + Select 'Connect' in the Virtual machine Overview in the portal and provide the credentials you used in the previous step. ## Next steps Return to the [Lab index](../README.md) to continue with the course labs. \ No newline at end of file From 8fa4eb5d4ea2b0acf2cd79e1e523c78b7fe3e684 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Geuze?= Date: Wed, 10 Apr 2019 12:17:32 +0000 Subject: [PATCH 079/168] rename labs, update ui tests --- README.md | 14 +-- ui-testing/README.md | 223 +++++++++++++++++++++---------------------- 2 files changed, 118 insertions(+), 119 deletions(-) diff --git a/README.md b/README.md index ce77f7f..03622cd 100644 --- a/README.md +++ b/README.md @@ -11,10 +11,10 @@ The order in which they are presented, is the recommended order to run through t | Lab | Estimated Effort (minutes) | | --------- |:--------------------------:| | [Prerequisites - Set up your development environment with PowerShell and ARM](azure-rm/README.md) | 30 | -| [Lab 1 - Create a CI/CD pipeline for .NET with the Azure DevOps Project](azure-devops-project/README.md) | 60 | -| [Lab 2 - Add QA environment and define your multi-stage continuous deployment process with approvals and gates](multi-stage-deployments/README.md) | 45 | -| [Lab 3 - Analysis with SonarQube](sonarqube/README.md) | 45 | -| [Lab 4 - Feature Toggle](feature-flag/README.md) | 45 | -| [Lab 5 - UI Testing](ui-testing/README.md) | 90 | -| [Lab 6 - Smoke Testing](smoke-testing/README.md) | 45 | -| [[**Optional**] Lab 7 - Security Verification Tests in your CD pipeline](security-testing/README.md) | 45 | +| [Lab 1 - Continuous Integration with Azure DevOps](azure-devops-project/README.md) | 60 | +| [Lab 2 - Multi-stage deployments with Azure DevOps](multi-stage-deployments/README.md) | 45 | +| [Lab 3 - UI Testing with Selenium and Azure DevOps](ui-testing/README.md) | 90 | +| [Lab 4 - Static code analysis with SonarQube](sonarqube/README.md) | 45 | +| [Lab 5 - Feature Toggles](feature-flag/README.md) | 45 | +| [[**Optional**] Lab 6 - Security Verification Tests in your CD pipeline](security-testing/README.md) | 45 | +| [Lab 7 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 | diff --git a/ui-testing/README.md b/ui-testing/README.md index a7b0e38..1d15c69 100644 --- a/ui-testing/README.md +++ b/ui-testing/README.md @@ -1,6 +1,6 @@ # Avanade DevOps HOL - UI Testing -In this lab, we add ui tests to our test project. +In this lab, we will add ui tests to our test project. Based on the following tutorials: @@ -9,19 +9,19 @@ Based on the following tutorials: ## Prerequisites +- The [Azure Devops Project](../azure-devops-project/README.md) lab. - A Virtual Machine on Azure. Follow [prerequisites](../getting-started/README.md) to set it up. - Set up a private VSTS agent using [this tutorial](../private-agent/README.md). - Optional: complete [Feature Flag](../feature-flag/README.md) lab. ## Tasks for local UI Testing -1. Add a new Unit Test Project "**Tests**" (.NET Framework 4.7.1) and add the following NuGet packages: - - Selenium.Support (Includes Selenium.WebDriver) - - Selenium.WebDriver.PhantomJS - - (optional but recommended)Selenium.Chrome.WebDriver - - (optional)Selenium.WebDriver.IEDriver +1. Add the following NuGet packages to the **FunctionalTests** project: + - Selenium.Support + - Selenium.WebDriver + - Selenium.Chrome.WebDriver -1. Add new file local.runsettings to the **Tests** project. +1. Modify the .runsettings file if it already exists, or add a new .runsettings file with the following content:
Click here to view the contents ```xml @@ -34,7 +34,7 @@ Based on the following tutorials: ```
-1. Add folder PageObjects and add classes for all the pages to the **Tests** project. +1. Add folder PageObjects and add classes for all the pages to the **FunctionalTests** project. -
Code for BasePage ```csharp @@ -100,7 +100,8 @@ Based on the following tutorials: ```csharp using OpenQA.Selenium; - + using OpenQA.Selenium.Support.PageObjects; + class AboutPage : BasePage { public AboutPage(IWebDriver driver, string baseUrl) : base(driver, baseUrl) @@ -122,6 +123,7 @@ Based on the following tutorials: ```csharp using OpenQA.Selenium; + using OpenQA.Selenium.Support.PageObjects; class ContactPage : BasePage { @@ -140,118 +142,130 @@ Based on the following tutorials: ```
- -1. Add new class UITests to the **Tests** project. +1. Remove SampleFunctionalTests from the project if it exists, and add a new class UITests to the **FunctionalTests** project.
Click here to view the code ```csharp using Microsoft.VisualStudio.TestTools.UnitTesting; using OpenQA.Selenium; - using OpenQA.Selenium.PhantomJS; + using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Remote; using System; using System.Drawing; using System.IO; - [TestClass] - public class UITests + namespace aspnet_core_dotnet_core.FunctionalTests { - public TestContext TestContext { get; set; } - - private RemoteWebDriver _driver; - private string _siteUrl; - - [TestInitialize()] - public void MyTestInitialize() + [TestClass] + public class UITests { - if (TestContext.Properties.Contains("siteUrl")) + private static TestContext _testContext; + private RemoteWebDriver _driver; + private string _siteUrl; + + [ClassInitialize] + public static void Initialize(TestContext testContext) { - _siteUrl = TestContext.Properties["siteUrl"].ToString(); + _testContext = testContext; } - // PhantomJS - _driver = new PhantomJSDriver(Directory.GetCurrentDirectory()); - - // Chrome - //var options =new ChromeOptions(); - //options.AddArguments("headless"); - //_driver = new ChromeDriver(Directory.GetCurrentDirectory(),options); - - // Internet Explorer - //_driver = new InternetExplorerDriver(Directory.GetCurrentDirectory()); - - // Shared driver settings - _driver.Manage().Window.Size = new Size(1920, 1080); - _driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(10); - - // UITest working locally but not in VSTS with the PhantomJSDriver - // Test results in VSTS always showed a timeout exception with VS2017 hosted agent - // and with local agent in dev machine. Test method UITests.Test threw exception: OpenQA.Selenium.WebDriverTimeoutException: - // To fix this I have increased the timeouts on pageload as well as implicit wait time as shown below - // Shared driver settings - // _driver.Manage().Window.Size = new Size(1920, 1080); - // _driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(20); - // _driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(20); - - } - - [TestMethod] - [TestCategory("UI")] - [Priority(1)] - [Owner("PhantomJS")] - - public void Test() - { - try + [TestInitialize()] + public void MyTestInitialize() { - var page = new HomePage(_driver, _siteUrl); - page.GoToPage(); - SaveAsImage(_driver.GetScreenshot(), "Home.png"); - page.GoToContactPage(); - SaveAsImage(_driver.GetScreenshot(), "Contact.png"); - page.GoToAboutPage(); - SaveAsImage(_driver.GetScreenshot(), "About.png"); - var containerDiv = _driver.FindElement(By.ClassName("body-content")); - var header = containerDiv.FindElement(By.TagName("h3")); - Assert.AreEqual("Your application description page.", header.Text); + if (_testContext.Properties["siteUrl"] != null) + { + _siteUrl = _testContext.Properties["siteUrl"].ToString(); + } + + // Chrome + var options = new ChromeOptions(); + options.AddArguments("headless"); + _driver = new ChromeDriver(Directory.GetCurrentDirectory(), options); + + // Driver settings + _driver.Manage().Window.Size = new Size(1920, 1080); + _driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(20); + _driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(20); } - catch (NoSuchElementException) + + [TestMethod] + [TestCategory("UI")] + public void Test() { - SaveAsImage(_driver.GetScreenshot(), "Error.png"); - throw; + try + { + var page = new HomePage(_driver, _siteUrl); + page.GoToPage(); + SaveAsImage(_driver.GetScreenshot(), "Home.png"); + page.GoToContactPage(); + SaveAsImage(_driver.GetScreenshot(), "Contact.png"); + page.GoToAboutPage(); + SaveAsImage(_driver.GetScreenshot(), "About.png"); + var containerDiv = _driver.FindElement(By.ClassName("body-content")); + var header = containerDiv.FindElement(By.TagName("h3")); + Assert.AreEqual("Your application description page.", header.Text); + } + catch (NoSuchElementException) + { + SaveAsImage(_driver.GetScreenshot(), "Error.png"); + throw; + } } - } - [TestCleanup()] - public void MyTestCleanup() - { - _driver.Quit(); - } - - private void SaveAsImage(OpenQA.Selenium.Screenshot screenshot, string name) - { - var timestamp = DateTime.UtcNow.ToString("yyyyMMdd-HHmmss.fff"); - var fileName = $"{timestamp} {name}"; - if (File.Exists(fileName)) File.Delete(fileName); + [TestCleanup()] + public void MyTestCleanup() + { + _driver.Close(); + _driver.Quit(); + } - using (var stream = new FileStream(fileName, FileMode.CreateNew)) - using (var w = new BinaryWriter(stream)) + private void SaveAsImage(Screenshot screenshot, string name) { - w.Write(screenshot.AsByteArray); + var timestamp = DateTime.UtcNow.ToString("yyyyMMdd-HHmmss.fff"); + var fileName = $"{timestamp} {name}"; + screenshot.SaveAsFile(fileName, ScreenshotImageFormat.Png); } - TestContext.AddResultFile(Path.Combine(Directory.GetCurrentDirectory(), fileName)); } } ```
-1. Configure Visual Studio to [use the local.runsettings](https://docs.microsoft.com/en-us/visualstudio/test/configure-unit-tests-by-using-a-dot-runsettings-file) file +1. Configure Visual Studio to [use the .runsettings](https://docs.microsoft.com/en-us/visualstudio/test/configure-unit-tests-by-using-a-dot-runsettings-file) file + +1. Start your website, so that it's running on the url that you specified in the .runsettings file -1. Run all unit tests and make sure that all succeed +1. Run the UI test and make sure that it succeeds ## Tasks for UI Testing in the Staging environment -1. Add new file vsts.runsettings to the **Tests** project, with "Copy to Output directory" set to "Copy always". Notice the different value of the parameter. This is a token that will be replaced by an actual Url during the Release in VSTS. +1. Edit your Build Definition, to use a different Agent Pool: + + - Change the Agent Pool to "Hosted Windows 2019 with VS2019". The default Linux Agent does not seem to handle .exe files, as the extension is stripped from those files during publishing. + +1. Edit your Release Definition, QA environment + + - Change the Agent Pool to "Hosted Windows 2019 with VS2019". We need a windows agent here in order to use ChromeDriver.exe + + - Add task: [Replace Tokens (by Guillaume Rouchon)](https://marketplace.visualstudio.com/items?itemName=qetza.replacetokens&targetId=af3daf82-7dfb-457e-a101-fb27736d03ca) (You'll need to add this to your organization, then re-open the Editor to add this task type) + - Root directory: $(System.DefaultWorkingDirectory)/Drop/drop/FunctionalTests + - Target files: **/*.runsettings + + - Add task: .NET Core + - Command: custom + - Custom command: vstest + - Arguments (Replace the .dll with your own, if the project was named otherwise): + ``` + aspnet-core-dotnet-core.FunctionalTests.dll --logger:"trx;LogFileName=functionalTestsResults.trx" --Settings:$(System.DefaultWorkingDirectory)/Drop/drop/FunctionalTests/release.runsettings --ResultsDirectory:. + ``` + + - Add task: Publish Test Results + - Test result format: VSTest + - Test results files: **/*.trx + - Search folder: $(System.DefaultWorkingDirectory)/Drop/drop/FunctionalTests + - + - Go to the Variables tab, add variable "SiteUrl" with Scope "Staging" and url "https://\-staging.azurewebsites.net" + +1. Add new file release.runsettings to the **FunctionalTests** project, with "Copy to Output directory" set to "Copy always". Notice the different value of the parameter. This is a token that will be replaced by an actual Url during the Release in Azure DevOps.
Click here to view the contents ```xml @@ -264,27 +278,12 @@ Based on the following tutorials: ```
-1. Edit your Build Definition (save, do not queue) - 1. Add task "NuGet restore" after the "Restore" task: - - Set the path to your Test project's packages.config (Tests/Tests.csproj) - - Under Advanced, set the destination to: ../packages - 1. Change the Test task by adding the following argument: --filter TestCategory!=UI - 1. Add task "Publish build artifact" after the other Publish task, with the following settings: - - Path to publish: \/bin - - Artifact name: tests - - Artifact publish location: VSTS - -1. Edit your Release Definition, Staging environment - 1. Add task: Replace Tokens (by Guillaume Rouchon) (You'll need to add this to VSTS, then re-edit to add this task type) - - Root directory: $(System.DefaultWorkingDirectory)/_DevOpsHOL-CI/tests - - Target files: **/*.runsettings - - Token prefix: #{ - - Token suffix: }# - 1. Add task: Visual Studio Test - - Search folder: $(System.DefaultWorkingDirectory)/_DevOpsHOL-CI/tests - - Test filter criteria: TestCategory=UI - - Settings file: $(System.DefaultWorkingDirectory)/_DevOpsHOL-CI/tests/Release/vsts.runsettings - 1. Go to the Variables tab, add variable "SiteUrl" with Scope "Staging" and url "https://\-staging.azurewebsites.net" +1. We need to ensure that the Selenium Chrome driver executable will be copied to the output during publishing. Edit your **FunctionalTests** project file and add the following: + ```xml + + true + + ``` 1. Commit your code to trigger a build and release @@ -292,8 +291,8 @@ Based on the following tutorials: ## Stretch goals -1. Run the same UI test with a different driver (Chrome, Internet Explorer) -2. Introduce a failing test and verify that the deployment stops with the failed test. +1. Introduce a failing test and verify that the deployment stops with the failed test. +1. Upload the Test screenshots to Azure DevOps. https://stackoverflow.com/questions/52823650/selenium-screenshots-in-vsts-azure-devops ## Next steps Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file From 9b5bd67a132b4ec1eae1347741690f3fe2dd26e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Geuze?= Date: Wed, 10 Apr 2019 12:26:50 +0000 Subject: [PATCH 080/168] moved some uitesting steps to lab 1 --- azure-devops-project/README.md | 14 +++++++++++++- ui-testing/README.md | 14 +------------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/azure-devops-project/README.md b/azure-devops-project/README.md index 2c169e1..55b0e8a 100644 --- a/azure-devops-project/README.md +++ b/azure-devops-project/README.md @@ -25,13 +25,25 @@ Based on [this](https://docs.microsoft.com/en-us/azure/devops-project/azure-devo - Update all NuGet packages to their 2.x counterparts (Right-click project > Manage NuGet packages > Select all packages > Update) - Add NuGet package to the web project: "Microsoft.NET.Sdk.Razor" +1. Add the following NuGet packages to the **FunctionalTests** project: + - Selenium.Support + - Selenium.WebDriver + - Selenium.Chrome.WebDriver + +1. We need to ensure that the Selenium Chrome driver executable will be copied to the output during publishing. Edit your **FunctionalTests** project file and add the following: + ```xml + + true + + ``` + 1. Unload the web project and unit test project. Make the following change to both project files: - Remove the line ```xml $(PackageTargetFallback);portable-net45+win8+wp8+wpa81; ``` -1. Build your solution and run the unit tests. Make sure that the tests pass +1. Reload all the projects, build your solution and run the unit tests. Make sure that the tests pass 1. Open the folder "ArmTemplates" in your source, and edit the file "linux-webapp-template.json": - Change the dotnetcore version to 2.1: diff --git a/ui-testing/README.md b/ui-testing/README.md index 1d15c69..7efaac9 100644 --- a/ui-testing/README.md +++ b/ui-testing/README.md @@ -16,11 +16,6 @@ Based on the following tutorials: ## Tasks for local UI Testing -1. Add the following NuGet packages to the **FunctionalTests** project: - - Selenium.Support - - Selenium.WebDriver - - Selenium.Chrome.WebDriver - 1. Modify the .runsettings file if it already exists, or add a new .runsettings file with the following content:
Click here to view the contents @@ -257,7 +252,7 @@ Based on the following tutorials: ``` aspnet-core-dotnet-core.FunctionalTests.dll --logger:"trx;LogFileName=functionalTestsResults.trx" --Settings:$(System.DefaultWorkingDirectory)/Drop/drop/FunctionalTests/release.runsettings --ResultsDirectory:. ``` - + - Add task: Publish Test Results - Test result format: VSTest - Test results files: **/*.trx @@ -278,13 +273,6 @@ Based on the following tutorials: ```
-1. We need to ensure that the Selenium Chrome driver executable will be copied to the output during publishing. Edit your **FunctionalTests** project file and add the following: - ```xml - - true - - ``` - 1. Commit your code to trigger a build and release 1. Upon Release completion, review the Test results and the uploaded screenshots From 7315c9fc4207b7f1d5185db1769dda154d3dd47d Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 14:38:17 +0200 Subject: [PATCH 081/168] undo master deletes --- azure-rm/ProvisionEnvironment.ps1 | 36 + azure-rm/json/devtestlab.json | 1951 ++++++++++++++++++++++ azure-rm/json/devtestlab.parameters.json | 1199 +++++++++++++ azure-rm/json/vm.json | 1547 +++++++++++++++++ azure-rm/json/vm.parameters.json | 1151 +++++++++++++ 5 files changed, 5884 insertions(+) create mode 100644 azure-rm/ProvisionEnvironment.ps1 create mode 100644 azure-rm/json/devtestlab.json create mode 100644 azure-rm/json/devtestlab.parameters.json create mode 100644 azure-rm/json/vm.json create mode 100644 azure-rm/json/vm.parameters.json diff --git a/azure-rm/ProvisionEnvironment.ps1 b/azure-rm/ProvisionEnvironment.ps1 new file mode 100644 index 0000000..3c63fe5 --- /dev/null +++ b/azure-rm/ProvisionEnvironment.ps1 @@ -0,0 +1,36 @@ +$ErrorActionPreference = "stop" + +# Change these settings to your needs +$subscriptionName = "Services" # Change to the name of your azure subscription +$ResourceGroupName = "adp2019" # Change if you want to name the resource group differently + +# Login and select subscription +if (Get-AzureRmContext | ForEach-Object { $_.Name -eq "Default" }) { + Connect-AzureRmAccount | Out-Null +} +else { + Get-AzureRmContext | Out-Null +} +Select-AzureRmSubscription -SubscriptionName $subscriptionName + +# Set the region for the Resource Group +# East US is chosen because the bigger "F" and "G" VM sizes are cheaper in this region +$ResourceGroupLocation = "East US" + +"Creating new resource group for the lab..." +New-AzureRmResourceGroup -Name $ResourceGroupName -Location $ResourceGroupLocation -Force + +"Deploy the lab using an ARM template" +New-AzureRmResourceGroupDeployment ` + -ResourceGroupName $ResourceGroupName ` + -TemplateFile .\json\devtestlab.json ` + -TemplateParameterFile .\json\devtestlab.parameters.json ` + -Verbose + +# "Deploy the lab VM using an ARM template" +New-AzureRmResourceGroupDeployment ` + -Name "development-vm" ` + -ResourceGroupName $ResourceGroupName ` + -TemplateFile .\json\vm.json ` + -TemplateParameterFile .\json\vm.parameters.json ` + -Verbose \ No newline at end of file diff --git a/azure-rm/json/devtestlab.json b/azure-rm/json/devtestlab.json new file mode 100644 index 0000000..e733c4f --- /dev/null +++ b/azure-rm/json/devtestlab.json @@ -0,0 +1,1951 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DevOpsHOL/devtestlab.json at master · andregeuze/DevOpsHOL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to content +
+ + + + + + + +
+ + + +
+ +
+ +
+ +
+ + + +
+
+
+ + + + + + + + + + +
+
+ +
    + + + +
  • + +
    + +
    + + + Watch + + +
    + Notifications +
    +
    + + + + + + + + +
    +
    +
    + +
    +
  • + +
  • +
    +
    + + +
    +
    + + +
    + +
  • + +
  • +
    +
    + +
  • +
+ +

+ + /DevOpsHOL + + + forked from Avanade/DevOpsHOL + +

+ +
+ + + + +
+
+
+ + + + + + + + Permalink + + + + + +
+ +
+ + Branch: + master + + + + + + + +
+ + +
+ + Find file + + + Copy path + +
+
+ + + + +
+ Fetching contributors… +
+ +
+ + Cannot retrieve contributors at this time +
+
+ + + + +
+ +
+ +
+ 239 lines (239 sloc) + + 7.42 KB +
+ +
+ +
+ Raw + Blame + History +
+ + +
+ + + + +
+ +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"newLabName": {
"type": "string",
"defaultValue": "FabrikamDemoLab",
"metadata": {
"description": "The name of the new lab instance to be created."
}
},
"timeZoneId": {
"type": "string",
"defaultValue": "UTC",
"metadata": {
"description": "The timezone of the lab."
}
},
"labVmShutDownTime": {
"type": "string",
"minLength": 5,
"maxLength": 5,
"defaultValue": "21:00",
"metadata": {
"description": "Set 'Auto Shutdown' policy: The UTC time at which the Lab VMs will be automatically shutdown (E.g. 17:30, 20:00, 09:00)."
}
},
"maxAllowedVmsPerUser": {
"type": "int",
"minValue": 0,
"defaultValue": 10,
"metadata": {
"description": "Set 'max VM allowed per user' policy: The maximum number of VMs allowed per user."
}
},
"maxAllowedVmsPerLab": {
"type": "int",
"minValue": 0,
"defaultValue": 100,
"metadata": {
"description": "Set 'Total VMs allowed in Lab' policy: The maximum number of VMs allowed per lab."
}
},
"vmSize": {
"type": "string",
"defaultValue": "Standard_D1",
"metadata": {
"description": "The size of all the VMs to be created in the lab."
}
},
"vmStorageType": {
"type": "string",
"defaultValue": "Premium",
"metadata": {
"description": "The storage type ('Premium' or 'Standard') of all the VMs to be created in the lab."
}
},
"vmUsername": {
"type": "string",
"defaultValue": "demolab",
"metadata": {
"description": "The username for the local account that will be created on all the new VMs."
}
},
"vmPassword": {
"type": "securestring",
"defaultValue": "<3DevTestLabs!",
"metadata": {
"description": "The password for the local account that will be created on all the new VMs."
}
},
"offer": {
"type": "string",
"defaultValue": "visualstudio2019"
},
"publisher": {
"type": "string",
"defaultValue": "microsoftvisualstudio"
},
"sku": {
"type": "string",
"defaultValue": "vs-2019-comm-win10-n"
},
"osType": {
"type": "string",
"defaultValue": "Windows"
},
"version": {
"type": "string",
"defaultValue": "latest"
},
"chocolatey_packages": {
"type": "string",
"defaultValue": "git,vscode,googlechrome",
"metadata": {
"description": "The packages that will be installed by chocolatey on the new vm."
}
},
"chocolatey_allowEmptyChecksums": {
"type": "bool",
"defaultValue": true
},
"chocolatey_ignoreChecksums": {
"type": "bool",
"defaultValue": true
}
},
"variables": {
"newLabId": "[resourceId('Microsoft.DevTestLab/labs', parameters('newLabName'))]",
"labVirtualNetworkName": "[concat('Dtl', parameters('newLabName'))]",
"labSubnetName": "[concat(variables('labVirtualNetworkName'), 'Subnet')]",
"labVirtualNetworkId": "[concat('/virtualnetworks/', variables('labVirtualNetworkName'))]",
"vmFormulaName": "[concat(parameters('newLabName'), '/Developer')]",
"vmFormulaDescription": "[concat('Formula for lab VMs in ', parameters('newLabName'))]"
},
"resources": [
{
"apiVersion": "2017-04-26-preview",
"type": "Microsoft.DevTestLab/labs",
"name": "[parameters('newLabName')]",
"location": "[resourceGroup().location]",
"resources": [
{
"apiVersion": "2017-04-26-preview",
"name": "[variables('labVirtualNetworkName')]",
"type": "virtualnetworks",
"dependsOn": [
"[variables('newLabId')]"
]
},
{
"apiVersion": "2017-04-26-preview",
"name": "LabVmsShutdown",
"type": "schedules",
"dependsOn": [
"[variables('newLabId')]"
],
"properties": {
"status": "Enabled",
"timeZoneId": "[parameters('timeZoneId')]",
"taskType": "LabVmsShutdownTask",
"dailyRecurrence": {
"time": "[replace(parameters('labVmShutDownTime'),':','')]"
}
}
},
{
"apiVersion": "2017-04-26-preview",
"name": "default/MaxVmsAllowedPerUser",
"type": "policysets/policies",
"dependsOn": [
"[variables('newLabId')]"
],
"properties": {
"description": "",
"factName": "UserOwnedLabVmCount",
"threshold": "[string(parameters('maxAllowedVmsPerUser'))]",
"evaluatorType": "MaxValuePolicy",
"status": "enabled"
}
},
{
"apiVersion": "2017-04-26-preview",
"name": "default/MaxVmsAllowedPerLab",
"type": "policysets/policies",
"dependsOn": [
"[variables('newLabId')]"
],
"properties": {
"description": "",
"factName": "LabVmCount",
"threshold": "[string(parameters('maxAllowedVmsPerLab'))]",
"evaluatorType": "MaxValuePolicy",
"status": "enabled"
}
}
]
},
{
"apiVersion": "2017-04-26-preview",
"type": "Microsoft.DevTestLab/labs/formulas",
"name": "[variables('vmFormulaName')]",
"location": "[resourceGroup().location]",
"dependsOn": [
"[variables('newLabId')]"
],
"properties": {
"description": "[variables('vmFormulaDescription')]",
"osType": "[parameters('osType')]",
"formulaContent": {
"properties": {
"size": "[parameters('vmSize')]",
"userName": "[parameters('vmUsername')]",
"password": "[parameters('vmPassword')]",
"labSubnetName": "[variables('labSubnetName')]",
"labVirtualNetworkId": "[variables('labVirtualNetworkId')]",
"allowClaim": true,
"storageType": "[parameters('vmStorageType')]",
"galleryimagereference": {
"Sku": "[parameters('sku')]",
"OsType": "[parameters('osType')]",
"Publisher": "[parameters('publisher')]",
"Offer": "[parameters('offer')]",
"Version": "[parameters('version')]"
},
"networkInterface": {
"virtualNetworkId": "[variables('labVirtualNetworkId')]"
},
"artifacts": [
{
"artifactid": "/artifactsources/public repo/artifacts/windows-chocolatey",
"parameters": [
{
"name": "packages",
"value": "[parameters('chocolatey_packages')]"
},
{
"name": "allowEmptyChecksums",
"value": "[parameters('chocolatey_allowEmptyChecksums')]"
},
{
"name": "ignoreChecksums",
"value": "[parameters('chocolatey_ignoreChecksums')]"
}
]
}
]
}
}
}
}
],
"outputs": {
"labId": {
"type": "string",
"value": "[resourceId('Microsoft.DevTestLab/labs', parameters('newLabName'))]"
}
}
}
+ + + +
+ +
+ + + +
+ + +
+ + +
+
+ + + +
+ +
+ +
+
+ + +
+ + + + + + +
+ + + You can’t perform that action at this time. +
+ + + + + + + + + + + + + + +
+ + + + diff --git a/azure-rm/json/devtestlab.parameters.json b/azure-rm/json/devtestlab.parameters.json new file mode 100644 index 0000000..7860212 --- /dev/null +++ b/azure-rm/json/devtestlab.parameters.json @@ -0,0 +1,1199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DevOpsHOL/devtestlab.parameters.json at master · andregeuze/DevOpsHOL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to content +
+ + + + + + + + + + + +
+ +
+ +
+ +
+ + + +
+
+
+ + + + + + + + + + +
+
+ +
    + + + +
  • + +
    + +
    + + + Watch + + +
    + Notifications +
    +
    + + + + + + + + +
    +
    +
    + +
    +
  • + +
  • +
    +
    + + +
    +
    + + +
    + +
  • + +
  • +
    +
    + +
  • +
+ +

+ + /DevOpsHOL + + + forked from Avanade/DevOpsHOL + +

+ +
+ + + + +
+
+
+ + + + + + + + Permalink + + + + + +
+ +
+ + Branch: + master + + + + + + + +
+ + +
+ + Find file + + + Copy path + +
+
+ + + + +
+ Fetching contributors… +
+ +
+ + Cannot retrieve contributors at this time +
+
+ + + + +
+ +
+ +
+ 51 lines (51 sloc) + + 1009 Bytes +
+ +
+ +
+ Raw + Blame + History +
+ + +
+ + + + +
+ +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"newLabName": {
"value": "devopslab"
},
"timeZoneId": {
"value": "W. Europe Standard Time"
},
"labVmShutDownTime": {
"value": "21:00"
},
"maxAllowedVmsPerUser": {
"value": 3
},
"maxAllowedVmsPerLab": {
"value": 100
},
"vmSize": {
"value": "Standard_B8ms"
},
"vmStorageType": {
"value": "Standard"
},
"vmUsername": {
"value": "devopshol"
},
"vmPassword": {
"value": "ADP#2019"
},
"offer": {
"value": "visualstudio2019"
},
"publisher": {
"value": "microsoftvisualstudio"
},
"sku": {
"value": "vs-2019-comm-win10-n"
},
"osType": {
"value": "Windows"
},
"version": {
"value": "latest"
},
"chocolatey_packages": {
"value": "git,vscode,googlechrome"
}
}
}
+ + + +
+ +
+ + + +
+ + +
+ + +
+
+ + + +
+ +
+ +
+
+ + +
+ + + + + + +
+ + + You can’t perform that action at this time. +
+ + + + + + + + + + + + + + +
+ + + + diff --git a/azure-rm/json/vm.json b/azure-rm/json/vm.json new file mode 100644 index 0000000..b42eab9 --- /dev/null +++ b/azure-rm/json/vm.json @@ -0,0 +1,1547 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DevOpsHOL/vm.json at master · andregeuze/DevOpsHOL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to content +
+ + + + + + + + + + + +
+ +
+ +
+ +
+ + + +
+
+
+ + + + + + + + + + +
+
+ +
    + + + +
  • + +
    + +
    + + + Watch + + +
    + Notifications +
    +
    + + + + + + + + +
    +
    +
    + +
    +
  • + +
  • +
    +
    + + +
    +
    + + +
    + +
  • + +
  • +
    +
    + +
  • +
+ +

+ + /DevOpsHOL + + + forked from Avanade/DevOpsHOL + +

+ +
+ + + + +
+
+
+ + + + + + + + Permalink + + + + + +
+ +
+ + Branch: + master + + + + + + + +
+ + +
+ + Find file + + + Copy path + +
+
+ + + + +
+ Fetching contributors… +
+ +
+ + Cannot retrieve contributors at this time +
+
+ + + + +
+ +
+ +
+ 138 lines (138 sloc) + + 4.21 KB +
+ +
+ +
+ Raw + Blame + History +
+ + +
+ + + + +
+ +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"newVMName": {
"type": "string",
"metadata": {
"description": "The name of the new vm to be created."
}
},
"existingLabName": {
"type": "string",
"metadata": {
"description": "The name of an existing lab where the new vm will be created."
}
},
"offer": {
"type": "string",
"metadata": {
"description": "Offer of the gallery image"
}
},
"publisher": {
"type": "string",
"metadata": {
"description": "Publisher of the gallery image"
}
},
"sku": {
"type": "string",
"metadata": {
"description": "Sku of the gallery image"
}
},
"osType": {
"type": "string",
"metadata": {
"description": "OsType of the gallery image"
}
},
"version": {
"type": "string",
"defaultValue": "latest",
"metadata": {
"description": "Version of the gallery image"
}
},
"newVMSize": {
"type": "string",
"metadata": {
"description": "The size of the new vm to be created."
}
},
"userName": {
"type": "string",
"metadata": {
"description": "The username for the local account that will be created on the new vm."
}
},
"password": {
"type": "securestring",
"metadata": {
"description": "The password for the local account that will be created on the new vm."
}
},
"chocolatey_packages": {
"type": "string",
"metadata": {
"description": "The packages that will be installed by chocolatey on the new vm."
}
},
"chocolatey_allowEmptyChecksums": {
"type": "bool",
"defaultValue": true
},
"chocolatey_ignoreChecksums": {
"type": "bool",
"defaultValue": true
}
},
"variables": {
"labSubnetName": "[concat(variables('labVirtualNetworkName'), 'Subnet')]",
"labVirtualNetworkId": "[resourceId('Microsoft.DevTestLab/labs/virtualnetworks', parameters('existingLabName'), variables('labVirtualNetworkName'))]",
"labVirtualNetworkName": "[concat('Dtl', parameters('existingLabName'))]",
"resourceName": "[concat(parameters('existingLabName'), '/', parameters('newVMName'))]",
"resourceType": "Microsoft.DevTestLab/labs/virtualMachines"
},
"resources": [
{
"apiVersion": "2018-10-15-preview",
"type": "Microsoft.DevTestLab/labs/virtualMachines",
"name": "[variables('resourceName')]",
"location": "[resourceGroup().location]",
"properties": {
"size": "[parameters('newVMSize')]",
"isAuthenticationWithSshKey": false,
"userName": "[parameters('userName')]",
"sshKey": "",
"password": "[parameters('password')]",
"labVirtualNetworkId": "[variables('labVirtualNetworkId')]",
"labSubnetName": "[variables('labSubnetName')]",
"artifacts": [
{
"artifactId": "[resourceId('Microsoft.DevTestLab/labs/artifactSources/artifacts', parameters('existingLabName'), 'public repo', 'windows-chocolatey')]",
"parameters": [
{
"name": "packages",
"value": "[parameters('chocolatey_packages')]"
},
{
"name": "allowEmptyChecksums",
"value": "[parameters('chocolatey_allowEmptyChecksums')]"
},
{
"name": "ignoreChecksums",
"value": "[parameters('chocolatey_ignoreChecksums')]"
}
]
}
],
"notes": "Visual Studio 2019 Community on Windows 10 Enterprise N (x64)",
"galleryImageReference": {
"Sku": "[parameters('sku')]",
"OsType": "[parameters('osType')]",
"Publisher": "[parameters('publisher')]",
"Offer": "[parameters('offer')]",
"Version": "[parameters('version')]"
}
}
}
],
"outputs": {
"vmId": {
"type": "string",
"value": "[resourceId(variables('resourceType'), parameters('existingLabName'), parameters('newVMName'))]"
}
}
}
+ + + +
+ +
+ + + +
+ + +
+ + +
+
+ + + +
+ +
+ +
+
+ + +
+ + + + + + +
+ + + You can’t perform that action at this time. +
+ + + + + + + + + + + + + + +
+ + + + diff --git a/azure-rm/json/vm.parameters.json b/azure-rm/json/vm.parameters.json new file mode 100644 index 0000000..b20f8cb --- /dev/null +++ b/azure-rm/json/vm.parameters.json @@ -0,0 +1,1151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DevOpsHOL/vm.parameters.json at master · andregeuze/DevOpsHOL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to content +
+ + + + + + + + + + + +
+ +
+ +
+ +
+ + + +
+
+
+ + + + + + + + + + +
+
+ +
    + + + +
  • + +
    + +
    + + + Watch + + +
    + Notifications +
    +
    + + + + + + + + +
    +
    +
    + +
    +
  • + +
  • +
    +
    + + +
    +
    + + +
    + +
  • + +
  • +
    +
    + +
  • +
+ +

+ + /DevOpsHOL + + + forked from Avanade/DevOpsHOL + +

+ +
+ + + + +
+
+
+ + + + + + + + Permalink + + + + + +
+ +
+ + Branch: + master + + + + + + + +
+ + +
+ + Find file + + + Copy path + +
+
+ + + + +
+ Fetching contributors… +
+ +
+ + Cannot retrieve contributors at this time +
+
+ + + + +
+ +
+ +
+ 39 lines (39 sloc) + + 937 Bytes +
+ +
+ +
+ Raw + Blame + History +
+ + +
+ + + + +
+ +
+
+ +
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"newVMName": {
"value": "devopsvm"
},
"existingLabName": {
"value": "devopslab"
},
"newVMSize": {
"value": "Standard_B8ms"
},
"userName": {
"value": "devopshol"
},
"password": {
"value": "ADP#2019"
},
"chocolatey_packages": {
"value": "git,vscode,googlechrome"
},
"offer": {
"value": "visualstudio2019"
},
"publisher": {
"value": "microsoftvisualstudio"
},
"sku": {
"value": "vs-2019-comm-win10-n"
},
"osType": {
"value": "Windows"
},
"version": {
"value": "latest"
}
}
}
+ + + +
+ +
+ + + +
+ + +
+ + +
+
+ + + +
+ +
+ +
+
+ + +
+ + + + + + +
+ + + You can’t perform that action at this time. +
+ + + + + + + + + + + + + + +
+ + + + From 7dbe026782a9e2f59f68295e60a2c7c260d62652 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 14:46:47 +0200 Subject: [PATCH 082/168] resolve conflict --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 76a8441..d238531 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,11 @@ The course contains the following labs: | Lab | Estimated Effort | | --------- |:--------------------------:| -| [Prerequisites lab - Set up your development environment](azure-rm/README.md) | 30 minutes | -| [Lab 1 - Create a CI/CD pipeline for .NET with the Azure DevOps Project](azure-devops-project/README.md) | 60 minutes | -| [Lab 2 - Add QA environment and define your multi-stage continuous deployment process with approvals and gates](multi-stage-deployments/README.md) | 45 minutes | -| [Lab 3 - Analysis with SonarQube](sonarqube/README.md) | 45 minutes | -| [Lab 4 - Feature Toggle](feature-flag/README.md) | 45 minutes | -| [Lab 5 - UI Testing](ui-testing/README.md) | 90 minutes | -| [Lab 6 - Smoke Testing](smoke-testing/README.md) | 45 minutes | -| [[**Optional**] Lab 7 - Security Verification Tests in your CD pipeline](security-testing/README.md) | 45 minutes | +| [Prerequisites - Set up your development environment](azure-rm/README.md) | 30 minutes | +| [Lab 1 - Continuous Integration with Azure DevOps](azure-devops-project/README.md) | 60 minutes | +| [Lab 2 - Multi-stage deployments with Azure DevOps](multi-stage-deployments/README.md) | 45 minutes | +| [Lab 3 - UI Testing with Selenium and Azure DevOps](ui-testing/README.md) | 90 minutes | +| [Lab 4 - Static code analysis with SonarQube](sonarqube/README.md) | 45 minutes | +| [Lab 5 - Feature Toggles](feature-flag/README.md) | 45 minutes | +| [[**Optional**] Lab 6 - Security Verification Tests in your CD pipeline](security-testing/README.md) | 45 minutes | +| [Lab 7 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 minutes | From 0def0a3167e6fffb7d7547bfd7614fa0c8f6aa32 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 14:48:41 +0200 Subject: [PATCH 083/168] attempt resolve conflict --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index d238531..2ec4a87 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,11 @@ The course contains the following labs: | Lab | Estimated Effort | | --------- |:--------------------------:| -| [Prerequisites - Set up your development environment](azure-rm/README.md) | 30 minutes | -| [Lab 1 - Continuous Integration with Azure DevOps](azure-devops-project/README.md) | 60 minutes | -| [Lab 2 - Multi-stage deployments with Azure DevOps](multi-stage-deployments/README.md) | 45 minutes | +| [Prerequisites - Set up your development environment with PowerShell and ARM](azure-rm/README.md) | 30 | +| [Lab 1 - Continuous Integration with Azure DevOps](azure-devops-project/README.md) | 60 | +| [Lab 2 - Multi-stage deployments with Azure DevOps](multi-stage-deployments/README.md) | 45 | | [Lab 3 - UI Testing with Selenium and Azure DevOps](ui-testing/README.md) | 90 minutes | -| [Lab 4 - Static code analysis with SonarQube](sonarqube/README.md) | 45 minutes | -| [Lab 5 - Feature Toggles](feature-flag/README.md) | 45 minutes | -| [[**Optional**] Lab 6 - Security Verification Tests in your CD pipeline](security-testing/README.md) | 45 minutes | -| [Lab 7 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 minutes | +| [Lab 4 - Static code analysis with SonarQube](sonarqube/README.md) | 45 | +| [Lab 5 - Feature Toggles](feature-flag/README.md) | 45 | +| [[**Optional**] Lab 6 - Security Verification Tests in your CD pipeline](security-testing/README.md) | 45 | +| [Lab 7 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 | From c711d0e51a496aa1c2f102f30cc340b7a1a4e05c Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 14:49:34 +0200 Subject: [PATCH 084/168] attempt resolve conflict --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2ec4a87..e42c33a 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ The course contains the following labs: | [Prerequisites - Set up your development environment with PowerShell and ARM](azure-rm/README.md) | 30 | | [Lab 1 - Continuous Integration with Azure DevOps](azure-devops-project/README.md) | 60 | | [Lab 2 - Multi-stage deployments with Azure DevOps](multi-stage-deployments/README.md) | 45 | -| [Lab 3 - UI Testing with Selenium and Azure DevOps](ui-testing/README.md) | 90 minutes | +| [Lab 3 - UI Testing with Selenium and Azure DevOps](ui-testing/README.md) | 90 | | [Lab 4 - Static code analysis with SonarQube](sonarqube/README.md) | 45 | | [Lab 5 - Feature Toggles](feature-flag/README.md) | 45 | | [[**Optional**] Lab 6 - Security Verification Tests in your CD pipeline](security-testing/README.md) | 45 | From cb2ec9f99bb4d33f4a2901bceede07fd28a438db Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 15:52:18 +0200 Subject: [PATCH 085/168] update pipeline lab (move functional tests to ui testing lab) --- azure-devops-project/README.md | 23 ++++++++++------------- ui-testing/README.md | 16 +++++++++++++++- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/azure-devops-project/README.md b/azure-devops-project/README.md index 55b0e8a..5460b0a 100644 --- a/azure-devops-project/README.md +++ b/azure-devops-project/README.md @@ -25,25 +25,22 @@ Based on [this](https://docs.microsoft.com/en-us/azure/devops-project/azure-devo - Update all NuGet packages to their 2.x counterparts (Right-click project > Manage NuGet packages > Select all packages > Update) - Add NuGet package to the web project: "Microsoft.NET.Sdk.Razor" -1. Add the following NuGet packages to the **FunctionalTests** project: - - Selenium.Support - - Selenium.WebDriver - - Selenium.Chrome.WebDriver - -1. We need to ensure that the Selenium Chrome driver executable will be copied to the output during publishing. Edit your **FunctionalTests** project file and add the following: - ```xml - - true - - ``` - 1. Unload the web project and unit test project. Make the following change to both project files: - Remove the line ```xml $(PackageTargetFallback);portable-net45+win8+wp8+wpa81; ``` -1. Reload all the projects, build your solution and run the unit tests. Make sure that the tests pass +1. Set the functional tests to be ignored (this will be enabled in another lab).\ +In the **FunctionalTests** project, make the following change: + ```cs + SampleFunctionalTests.cs + + [Ignore] // <-- ignore test + public void SampleFunctionalTest1() + ``` + +1. Reload all the projects, build your solution and run the unit tests. Make sure that the **unit tests** pass 1. Open the folder "ArmTemplates" in your source, and edit the file "linux-webapp-template.json": - Change the dotnetcore version to 2.1: diff --git a/ui-testing/README.md b/ui-testing/README.md index 7efaac9..2147175 100644 --- a/ui-testing/README.md +++ b/ui-testing/README.md @@ -16,6 +16,20 @@ Based on the following tutorials: ## Tasks for local UI Testing +1. Remove the sample test (SampleFunctionalTests.cs) from the **FunctionalTests** project if it exists + +1. Add the following NuGet packages to the **FunctionalTests** project: + - Selenium.Support + - Selenium.WebDriver + - Selenium.Chrome.WebDriver + +1. We need to ensure that the Selenium Chrome driver executable will be copied to the output during publishing. Edit your **FunctionalTests** project file and add the following: + ```xml + + true + + ``` + 1. Modify the .runsettings file if it already exists, or add a new .runsettings file with the following content:
Click here to view the contents @@ -137,7 +151,7 @@ Based on the following tutorials: ```
-1. Remove SampleFunctionalTests from the project if it exists, and add a new class UITests to the **FunctionalTests** project. +1. Add a new class UITests to the **FunctionalTests** project.
Click here to view the code ```csharp From 5e0857b43d6264db37744f1075be43005634e8f3 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 15:57:04 +0200 Subject: [PATCH 086/168] reset pull request --- azure-devops-project/README.md | 23 +++++++++++++---------- ui-testing/README.md | 16 +--------------- 2 files changed, 14 insertions(+), 25 deletions(-) diff --git a/azure-devops-project/README.md b/azure-devops-project/README.md index 5460b0a..55b0e8a 100644 --- a/azure-devops-project/README.md +++ b/azure-devops-project/README.md @@ -25,22 +25,25 @@ Based on [this](https://docs.microsoft.com/en-us/azure/devops-project/azure-devo - Update all NuGet packages to their 2.x counterparts (Right-click project > Manage NuGet packages > Select all packages > Update) - Add NuGet package to the web project: "Microsoft.NET.Sdk.Razor" +1. Add the following NuGet packages to the **FunctionalTests** project: + - Selenium.Support + - Selenium.WebDriver + - Selenium.Chrome.WebDriver + +1. We need to ensure that the Selenium Chrome driver executable will be copied to the output during publishing. Edit your **FunctionalTests** project file and add the following: + ```xml + + true + + ``` + 1. Unload the web project and unit test project. Make the following change to both project files: - Remove the line ```xml $(PackageTargetFallback);portable-net45+win8+wp8+wpa81; ``` -1. Set the functional tests to be ignored (this will be enabled in another lab).\ -In the **FunctionalTests** project, make the following change: - ```cs - SampleFunctionalTests.cs - - [Ignore] // <-- ignore test - public void SampleFunctionalTest1() - ``` - -1. Reload all the projects, build your solution and run the unit tests. Make sure that the **unit tests** pass +1. Reload all the projects, build your solution and run the unit tests. Make sure that the tests pass 1. Open the folder "ArmTemplates" in your source, and edit the file "linux-webapp-template.json": - Change the dotnetcore version to 2.1: diff --git a/ui-testing/README.md b/ui-testing/README.md index 2147175..7efaac9 100644 --- a/ui-testing/README.md +++ b/ui-testing/README.md @@ -16,20 +16,6 @@ Based on the following tutorials: ## Tasks for local UI Testing -1. Remove the sample test (SampleFunctionalTests.cs) from the **FunctionalTests** project if it exists - -1. Add the following NuGet packages to the **FunctionalTests** project: - - Selenium.Support - - Selenium.WebDriver - - Selenium.Chrome.WebDriver - -1. We need to ensure that the Selenium Chrome driver executable will be copied to the output during publishing. Edit your **FunctionalTests** project file and add the following: - ```xml - - true - - ``` - 1. Modify the .runsettings file if it already exists, or add a new .runsettings file with the following content:
Click here to view the contents @@ -151,7 +137,7 @@ Based on the following tutorials: ```
-1. Add a new class UITests to the **FunctionalTests** project. +1. Remove SampleFunctionalTests from the project if it exists, and add a new class UITests to the **FunctionalTests** project.
Click here to view the code ```csharp From 02615836d26c8d5077df2a96e930ef7a8e5f3930 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 20:48:02 +0200 Subject: [PATCH 087/168] revert to geuze master --- README.md | 16 ++++++---- azure-rm/README.md | 79 ++++++++++++++++++++++++++-------------------- 2 files changed, 53 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index e42c33a..0bcd4d1 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,14 @@ -# Avanade DevOps Hands-On Labs -These are the hands-on labs associated with the Avanade DevOps Practitioners course. This is based to a large part on the [PartsUnlimitedHOL](https://github.com/Microsoft/PartsUnlimitedE2E/blob/master/PartsUnlimited-aspnet45/docs/GettingStarted.md) but simplified to use the Visual Studio MVC sample application. It does not use the PartsUnlimited HOL, but we want to acknowledge that project's contribution to this project. +# Avanade DevOps HOL +These are the hands on labs associated with the Avanade DevOps Practitioners course. This is based to a large part on the [PartsUnlimitedHOL](https://github.com/Microsoft/PartsUnlimitedE2E/blob/master/PartsUnlimited-aspnet45/docs/GettingStarted.md) but simplified to use the Visual Studio MVC sample application. It does not use the PartsUnlimited HOL, but we want to acknowledge that project's contribution to this project. -The labs can be completed using an Azure Virtual Machine as development environment. This not only keeps you from having to make changes to your local environment, but it gives you additional experience using Azure and PowerShell. The [Prerequisites lab](azure-rm/README.md) helps you to set up this environment. +You can accomplish these labs using an Azure VM as the development machine. This not only keeps you from having to make changes to your local environment, but it gives you additional experience using Azure and PowerShell. To start setting up your environment, make sure to follow the steps in the Prerequisites lab. -## Course Labs -The course contains the following labs: +## Course Training Labs and Estimated Effort +Below you will find the available training labs and the estimated time they will take to complete. The labs have been ordered in a logical way -| Lab | Estimated Effort | +The order in which they are presented, is the recommended order to run through them. + +| Lab | Estimated Effort (minutes) | | --------- |:--------------------------:| | [Prerequisites - Set up your development environment with PowerShell and ARM](azure-rm/README.md) | 30 | | [Lab 1 - Continuous Integration with Azure DevOps](azure-devops-project/README.md) | 60 | @@ -15,4 +17,4 @@ The course contains the following labs: | [Lab 4 - Static code analysis with SonarQube](sonarqube/README.md) | 45 | | [Lab 5 - Feature Toggles](feature-flag/README.md) | 45 | | [[**Optional**] Lab 6 - Security Verification Tests in your CD pipeline](security-testing/README.md) | 45 | -| [Lab 7 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 | +| [Lab 7 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 | \ No newline at end of file diff --git a/azure-rm/README.md b/azure-rm/README.md index 5babc10..040a8f8 100644 --- a/azure-rm/README.md +++ b/azure-rm/README.md @@ -1,16 +1,11 @@ -# Prerequisites lab - Set up your development environment -Follow this lab to set up a development environment for the course labs. Creating the environment can take some time, so it is recommended to complete this before attending the course. +# Avanade DevOps HOL - Prerequisites - Set up your development environment with PowerShell and ARM +If you are taking the Avanade DevOps Practitioners course, then the following are pre-requisites for the beginning of the course. The pre-requisites are straightforward but a few of the tasks take some time so doing this before the class will save time during the course and allow you to get the maximum value from the class. -## Prepare Azure DevOps and Azure subscription +## Preparing your Azure subscription -1. Make sure you have an active Azure DevOps account.\ -[Sign up for Azure DevOps](https://dev.azure.com/) - -2. Make sure you have an active Azure subscription.\ -Sign in to the [Azure Portal](https://portal.azure.com) to verify you can log in and create resources.\ -If you used a (Avanade) organization MDSN account, go to the next step. +Make sure your Azure subscription is enabled and you can log in and create resources. Visit the [Azure Portal](https://portal.azure.com) to verify. -3. (only for organization accounts) If you are using your Avanade email to access the Azure portal, then you will need to create a new Active Directory instance. This is because the labs require creating an enterprise application id and individual users do not have permissions to create enterprise applications on the Avanade AD instance. +If you are using your Avanade email to access the Azure portal, then you will need to create a new Active Directory instance. This is because the labs require creating an enterprise application id and individual users do not have permissions to create enterprise applications on the Avanade AD instance. - In the [Azure Portal](https://portal.azure.com), *Create a Resource* of *Azure Active Directory* with a meaningful name. This is probably something you will use as a general purpose AD instance (i.e. not just for the class) so you may want to name it appropriately. @@ -19,30 +14,44 @@ If you used a (Avanade) organization MDSN account, go to the next step. - On the Subscriptions' Overview panel, choose the -> Change directory link and select the new AD instance that you just created. - For more information, you can reference [Associate an existing subscription to your Azure AD directory](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-how-subscriptions-associated-directory#to-associate-an-existing-subscription-to-your-azure-ad-directory) -## Prepare development environment - -1. Create a DevTest lab\ -Follow instructions from [Create a lab in Azure DevTest Labs](https://docs.microsoft.com/azure/lab-services/devtest-lab-create-lab). Ensure the following settings: - - Lab name: devopslab - - Resource group: devopslab (new) - - Location: West Europe - - Auto-shutdown: default (Enabled, 19:00) - -2. Add a Virtual Machine to your DevTest lab\ -Follow instructions from [Add a VM to a lab in Azure DevTest Labs](https://docs.microsoft.com/azure/lab-services/devtest-lab-add-vm). Ensure the following settings: - - Choose a base: Visual Studio 2019 Community on Windows 10 Enterprise N (x64) - - Virtual machine name: devopsvm - - User name: devopshol - - Password: ADP#2019 - - Virtual machine size: Standard_B8ms - - OS disk type: Standard SSD - - Artifacts selection: Git, Visual Studio Code, Chrome - -3. Verify connection to the Virtual Machine - - Wait untill the virtual machine is fully provisioned and the artifacts are applied.\ - *(this can take up to 20 minutes)* - - Verify you can use the virtual machine by connecting to it:\ - Select 'Connect' in the Virtual machine Overview in the portal and provide the credentials you used in the previous step. +## Preparing a Development environment + +1. Make sure you have an active Azure DevOps account.
+[Sign up for Azure DevOps](https://dev.azure.com/) + +2. Verify that PowerShell v5+ is installed along with the AzureRM modules. + - Install-Module Powershellget -Force + - Install-Module -Name AzureRm -AllowClobber + - Import-Module -Name AzureRM + +3. Using an Azure development environment is strongly encouraged. This avoids conflicts with your existing development environment. Complete the steps listed below in the [Azure Development Environment](#azure-development-environment). + +4. Complete the [Getting Started](getting-started/README.md) lab. This will make sure that your environment is correctly configured and ready to execute the remaining labs in the course. + +5. Configure a private Build/Release agent from the [Private Agent](private-agent/README.md) lab. + +## Set up the Azure Development Environment +You can either configure an Azure development environment on your own or use the PowerShell script provided by this lab. This will create a DevTestLab in a new Azure Resource Group and then configure an Azure VM with Windows 10 and the latest Visual Studio Community edition. It will also use Chocolatey to install a collection of other tools and applications. + +>**Note:** Not all VM SKUs are available in every region. You can get the list of SKUs in a particular location with the following PowerShell commands. +```PowerShell +$locName="South Central US" +Get-AzureRMVMImageSku -Location $locName -Publisher "MicrosoftVisualStudio" -Offer "VisualStudio" | Select Skus +``` + +To start setting up your environment, follow these steps: + +1. Clone this repository or download the [azure-rm](../azure-rm) folder and extract the files on your system. + +1. Open **ProvisionEnvironment.ps1** and modify the following lines of PowerShell code in the top of the file: + ```PowerShell + $subscriptionName = "Services" # Change to the name of your azure subscription + $ResourceGroupName = "adp2019" # Change if you want to name the resource group differently + ``` + +1. Then open a PowerShell console in the same folder and execute the file: .\ProvisionEnvironment.ps1 + +1. Watch how the script will create your required resources in Azure. **The process may take 20 minutes.** ## Next steps -Return to the [Lab index](../README.md) to continue with the course labs. \ No newline at end of file +Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file From 1ad198c47524107ed60d42fc914cb668e042fdf8 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 20:49:04 +0200 Subject: [PATCH 088/168] revert to geuze master --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0bcd4d1..2f6d4a6 100644 --- a/README.md +++ b/README.md @@ -17,4 +17,4 @@ The order in which they are presented, is the recommended order to run through t | [Lab 4 - Static code analysis with SonarQube](sonarqube/README.md) | 45 | | [Lab 5 - Feature Toggles](feature-flag/README.md) | 45 | | [[**Optional**] Lab 6 - Security Verification Tests in your CD pipeline](security-testing/README.md) | 45 | -| [Lab 7 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 | \ No newline at end of file +| [Lab 7 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 | \ No newline at end of file From e5b3a3f5789500fbd247a29b8da83a57273f219b Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 20:50:54 +0200 Subject: [PATCH 089/168] revert to geuze master --- README.md | 2 +- azure-rm/ProvisionEnvironment.ps1 | Bin 1287 -> 2650 bytes azure-rm/json/devtestlab.json | 2190 +++------------------- azure-rm/json/devtestlab.parameters.json | 1250 +----------- azure-rm/json/vm.json | 1685 ++--------------- azure-rm/json/vm.parameters.json | 1190 +----------- 6 files changed, 468 insertions(+), 5849 deletions(-) diff --git a/README.md b/README.md index 2f6d4a6..03622cd 100644 --- a/README.md +++ b/README.md @@ -17,4 +17,4 @@ The order in which they are presented, is the recommended order to run through t | [Lab 4 - Static code analysis with SonarQube](sonarqube/README.md) | 45 | | [Lab 5 - Feature Toggles](feature-flag/README.md) | 45 | | [[**Optional**] Lab 6 - Security Verification Tests in your CD pipeline](security-testing/README.md) | 45 | -| [Lab 7 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 | \ No newline at end of file +| [Lab 7 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 | diff --git a/azure-rm/ProvisionEnvironment.ps1 b/azure-rm/ProvisionEnvironment.ps1 index 3c63fe5065b56c1a17ff5bbc87575297d48142a4..5a7c2d3af49164ff054a852117a7c4e4041607c8 100644 GIT binary patch literal 2650 zcmd6p&2Q5{5XI+=#Q(5La)5&oaO1!M6~YD5DuteqARlg8ln;|Q4Yc%M2YzoiTRTpj z6c7@!?AW`rGjHa-nfB+8mc6n$*Nppx4J@~F-lulNcWS5H`kk_qnzQHJ4O?I}vy8X< zcF*5U)(`B=dRUIUWzJWMrB3OYd(YZku%h$MzVTe*-*GDC8nP#kEq<5Q=Q&{aoJbK> zhX@nzGaxzUeQp=n2;Txkj_WowiWe{`TJ$m_!!nMZU3x?T_3an}!mf`O@GJIfaOf+u zD#jjpW%kq_+Y@_Mi}1XJ#M#PMGWVE;yg(dt5G#vy{Q@_m8w8Gs@>j5z+n8#X*?Pm- z5mr;Yi?t!Y;%Uq+73ixz|A6)ZS&P{O<;1#m;pYI~Q`S@a>OFnOTbs2xTI=Ecj1!0O z`}ro;6&5Y~Xpc(OOW6Iwdc$7wcFM^m=yG4dYkSDfmCs0w>k3h&B;l`OlC}rFUP9(f zm=5tM%Z~Rv_TH}jQ*{X1-HdVfeCvHnv$4uml*ctScc84>EA+O%Z^{Y~j-W7gs)L=> zD?;2k>Mg#Co~i2Hl@u?pO>D)kW`nc$pmnHAy)M3IzMAseC(6Kc8R{GL+{b#vrG6IY zZO?O5W`k(z?Gt;;bAjz8mh#^7xI>hbuWaohC|lkGigI@QI#|6SjB)D3xwn~LG5s27 zPyWLR&A2epR{UzczE7)F9^<1=7w8K9JDgu_skzEVF@2MJ-?b96PT2x-v6u;ni?^>{$_-}|FkhP zk{wwV_1RU6!m8@|T_uY)*{bgy+i<0de2iKEFp)Y0j-2RjoN( z{7$57>-++Q_3=-9jQ+Z(Bil{#+Q)e4-v5L5g15$+0ZnE7R};08z{DK==;KdDF5i`vB9L>k7fw=nx!wFLmX>8`zu9f=1l9 zY~;Ga2`k%xv*b-gSfkxafsO(ELoopebSN=p55ey{OUOqE*=U81&;>56>DmOyH|^KY zU%nmV$%p|vu6>{sal-(6=!Yr*z($r)npgWE>D*LO1J@hUqfq$aaKik!K%Y+nuT?WO z+T$M&k1#iO#zmc97I&fP0Yx%YjcN$`%t9UUUk6E_FT{0snhyoz*9T;5pIXzDuF4*&RP7wzPWQo z-)wN}(fJ@foD*y+z2cVsD3A7)o;JO^LHjk@g5nLUajKXSeYfZ+iV<~GrVVc7+lD3T R?{#F`45Ym21l7Lnz+ZF_yA}Wd diff --git a/azure-rm/json/devtestlab.json b/azure-rm/json/devtestlab.json index e733c4f..3356097 100644 --- a/azure-rm/json/devtestlab.json +++ b/azure-rm/json/devtestlab.json @@ -1,1951 +1,239 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DevOpsHOL/devtestlab.json at master · andregeuze/DevOpsHOL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Skip to content -
- - - - - - - - - - - -
- -
- -
- -
- - - -
-
-
- - - - - - - - - - -
-
- -
    - - - -
  • - -
    - -
    - - - Watch - - -
    - Notifications -
    -
    - - - - - - - - -
    -
    -
    - -
    -
  • - -
  • -
    -
    - - -
    -
    - - -
    - -
  • - -
  • -
    -
    - -
  • -
- -

- - /DevOpsHOL - - - forked from Avanade/DevOpsHOL - -

- -
- - - - -
-
-
- - - - - - - - Permalink - - - - - -
- -
- - Branch: - master - - - - - - - -
- - -
- - Find file - - - Copy path - -
-
- - - - -
- Fetching contributors… -
- -
- - Cannot retrieve contributors at this time -
-
- - - - -
- -
- -
- 239 lines (239 sloc) - - 7.42 KB -
- -
- -
- Raw - Blame - History -
- - -
- - - - -
- -
-
- -
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"newLabName": {
"type": "string",
"defaultValue": "FabrikamDemoLab",
"metadata": {
"description": "The name of the new lab instance to be created."
}
},
"timeZoneId": {
"type": "string",
"defaultValue": "UTC",
"metadata": {
"description": "The timezone of the lab."
}
},
"labVmShutDownTime": {
"type": "string",
"minLength": 5,
"maxLength": 5,
"defaultValue": "21:00",
"metadata": {
"description": "Set 'Auto Shutdown' policy: The UTC time at which the Lab VMs will be automatically shutdown (E.g. 17:30, 20:00, 09:00)."
}
},
"maxAllowedVmsPerUser": {
"type": "int",
"minValue": 0,
"defaultValue": 10,
"metadata": {
"description": "Set 'max VM allowed per user' policy: The maximum number of VMs allowed per user."
}
},
"maxAllowedVmsPerLab": {
"type": "int",
"minValue": 0,
"defaultValue": 100,
"metadata": {
"description": "Set 'Total VMs allowed in Lab' policy: The maximum number of VMs allowed per lab."
}
},
"vmSize": {
"type": "string",
"defaultValue": "Standard_D1",
"metadata": {
"description": "The size of all the VMs to be created in the lab."
}
},
"vmStorageType": {
"type": "string",
"defaultValue": "Premium",
"metadata": {
"description": "The storage type ('Premium' or 'Standard') of all the VMs to be created in the lab."
}
},
"vmUsername": {
"type": "string",
"defaultValue": "demolab",
"metadata": {
"description": "The username for the local account that will be created on all the new VMs."
}
},
"vmPassword": {
"type": "securestring",
"defaultValue": "<3DevTestLabs!",
"metadata": {
"description": "The password for the local account that will be created on all the new VMs."
}
},
"offer": {
"type": "string",
"defaultValue": "visualstudio2019"
},
"publisher": {
"type": "string",
"defaultValue": "microsoftvisualstudio"
},
"sku": {
"type": "string",
"defaultValue": "vs-2019-comm-win10-n"
},
"osType": {
"type": "string",
"defaultValue": "Windows"
},
"version": {
"type": "string",
"defaultValue": "latest"
},
"chocolatey_packages": {
"type": "string",
"defaultValue": "git,vscode,googlechrome",
"metadata": {
"description": "The packages that will be installed by chocolatey on the new vm."
}
},
"chocolatey_allowEmptyChecksums": {
"type": "bool",
"defaultValue": true
},
"chocolatey_ignoreChecksums": {
"type": "bool",
"defaultValue": true
}
},
"variables": {
"newLabId": "[resourceId('Microsoft.DevTestLab/labs', parameters('newLabName'))]",
"labVirtualNetworkName": "[concat('Dtl', parameters('newLabName'))]",
"labSubnetName": "[concat(variables('labVirtualNetworkName'), 'Subnet')]",
"labVirtualNetworkId": "[concat('/virtualnetworks/', variables('labVirtualNetworkName'))]",
"vmFormulaName": "[concat(parameters('newLabName'), '/Developer')]",
"vmFormulaDescription": "[concat('Formula for lab VMs in ', parameters('newLabName'))]"
},
"resources": [
{
"apiVersion": "2017-04-26-preview",
"type": "Microsoft.DevTestLab/labs",
"name": "[parameters('newLabName')]",
"location": "[resourceGroup().location]",
"resources": [
{
"apiVersion": "2017-04-26-preview",
"name": "[variables('labVirtualNetworkName')]",
"type": "virtualnetworks",
"dependsOn": [
"[variables('newLabId')]"
]
},
{
"apiVersion": "2017-04-26-preview",
"name": "LabVmsShutdown",
"type": "schedules",
"dependsOn": [
"[variables('newLabId')]"
],
"properties": {
"status": "Enabled",
"timeZoneId": "[parameters('timeZoneId')]",
"taskType": "LabVmsShutdownTask",
"dailyRecurrence": {
"time": "[replace(parameters('labVmShutDownTime'),':','')]"
}
}
},
{
"apiVersion": "2017-04-26-preview",
"name": "default/MaxVmsAllowedPerUser",
"type": "policysets/policies",
"dependsOn": [
"[variables('newLabId')]"
],
"properties": {
"description": "",
"factName": "UserOwnedLabVmCount",
"threshold": "[string(parameters('maxAllowedVmsPerUser'))]",
"evaluatorType": "MaxValuePolicy",
"status": "enabled"
}
},
{
"apiVersion": "2017-04-26-preview",
"name": "default/MaxVmsAllowedPerLab",
"type": "policysets/policies",
"dependsOn": [
"[variables('newLabId')]"
],
"properties": {
"description": "",
"factName": "LabVmCount",
"threshold": "[string(parameters('maxAllowedVmsPerLab'))]",
"evaluatorType": "MaxValuePolicy",
"status": "enabled"
}
}
]
},
{
"apiVersion": "2017-04-26-preview",
"type": "Microsoft.DevTestLab/labs/formulas",
"name": "[variables('vmFormulaName')]",
"location": "[resourceGroup().location]",
"dependsOn": [
"[variables('newLabId')]"
],
"properties": {
"description": "[variables('vmFormulaDescription')]",
"osType": "[parameters('osType')]",
"formulaContent": {
"properties": {
"size": "[parameters('vmSize')]",
"userName": "[parameters('vmUsername')]",
"password": "[parameters('vmPassword')]",
"labSubnetName": "[variables('labSubnetName')]",
"labVirtualNetworkId": "[variables('labVirtualNetworkId')]",
"allowClaim": true,
"storageType": "[parameters('vmStorageType')]",
"galleryimagereference": {
"Sku": "[parameters('sku')]",
"OsType": "[parameters('osType')]",
"Publisher": "[parameters('publisher')]",
"Offer": "[parameters('offer')]",
"Version": "[parameters('version')]"
},
"networkInterface": {
"virtualNetworkId": "[variables('labVirtualNetworkId')]"
},
"artifacts": [
{
"artifactid": "/artifactsources/public repo/artifacts/windows-chocolatey",
"parameters": [
{
"name": "packages",
"value": "[parameters('chocolatey_packages')]"
},
{
"name": "allowEmptyChecksums",
"value": "[parameters('chocolatey_allowEmptyChecksums')]"
},
{
"name": "ignoreChecksums",
"value": "[parameters('chocolatey_ignoreChecksums')]"
}
]
}
]
}
}
}
}
],
"outputs": {
"labId": {
"type": "string",
"value": "[resourceId('Microsoft.DevTestLab/labs', parameters('newLabName'))]"
}
}
}
- - - -
- -
- - - -
- - -
- - -
-
- - - -
- -
- -
-
- - -
- - - - - - -
- - - You can’t perform that action at this time. -
- - - - - - - - - - - - - - -
- - - - +{ + "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "newLabName": { + "type": "string", + "defaultValue": "FabrikamDemoLab", + "metadata": { + "description": "The name of the new lab instance to be created." + } + }, + "timeZoneId": { + "type": "string", + "defaultValue": "UTC", + "metadata": { + "description": "The timezone of the lab." + } + }, + "labVmShutDownTime": { + "type": "string", + "minLength": 5, + "maxLength": 5, + "defaultValue": "21:00", + "metadata": { + "description": "Set 'Auto Shutdown' policy: The UTC time at which the Lab VMs will be automatically shutdown (E.g. 17:30, 20:00, 09:00)." + } + }, + "maxAllowedVmsPerUser": { + "type": "int", + "minValue": 0, + "defaultValue": 10, + "metadata": { + "description": "Set 'max VM allowed per user' policy: The maximum number of VMs allowed per user." + } + }, + "maxAllowedVmsPerLab": { + "type": "int", + "minValue": 0, + "defaultValue": 100, + "metadata": { + "description": "Set 'Total VMs allowed in Lab' policy: The maximum number of VMs allowed per lab." + } + }, + "vmSize": { + "type": "string", + "defaultValue": "Standard_D1", + "metadata": { + "description": "The size of all the VMs to be created in the lab." + } + }, + "vmStorageType": { + "type": "string", + "defaultValue": "Premium", + "metadata": { + "description": "The storage type ('Premium' or 'Standard') of all the VMs to be created in the lab." + } + }, + "vmUsername": { + "type": "string", + "defaultValue": "demolab", + "metadata": { + "description": "The username for the local account that will be created on all the new VMs." + } + }, + "vmPassword": { + "type": "securestring", + "defaultValue": "<3DevTestLabs!", + "metadata": { + "description": "The password for the local account that will be created on all the new VMs." + } + }, + "offer": { + "type": "string", + "defaultValue": "visualstudio2019" + }, + "publisher": { + "type": "string", + "defaultValue": "microsoftvisualstudio" + }, + "sku": { + "type": "string", + "defaultValue": "vs-2019-comm-win10-n" + }, + "osType": { + "type": "string", + "defaultValue": "Windows" + }, + "version": { + "type": "string", + "defaultValue": "latest" + }, + "chocolatey_packages": { + "type": "string", + "defaultValue": "git,vscode,googlechrome", + "metadata": { + "description": "The packages that will be installed by chocolatey on the new vm." + } + }, + "chocolatey_allowEmptyChecksums": { + "type": "bool", + "defaultValue": true + }, + "chocolatey_ignoreChecksums": { + "type": "bool", + "defaultValue": true + } + }, + "variables": { + "newLabId": "[resourceId('Microsoft.DevTestLab/labs', parameters('newLabName'))]", + "labVirtualNetworkName": "[concat('Dtl', parameters('newLabName'))]", + "labSubnetName": "[concat(variables('labVirtualNetworkName'), 'Subnet')]", + "labVirtualNetworkId": "[concat('/virtualnetworks/', variables('labVirtualNetworkName'))]", + "vmFormulaName": "[concat(parameters('newLabName'), '/Developer')]", + "vmFormulaDescription": "[concat('Formula for lab VMs in ', parameters('newLabName'))]" + }, + "resources": [ + { + "apiVersion": "2017-04-26-preview", + "type": "Microsoft.DevTestLab/labs", + "name": "[parameters('newLabName')]", + "location": "[resourceGroup().location]", + "resources": [ + { + "apiVersion": "2017-04-26-preview", + "name": "[variables('labVirtualNetworkName')]", + "type": "virtualnetworks", + "dependsOn": [ + "[variables('newLabId')]" + ] + }, + { + "apiVersion": "2017-04-26-preview", + "name": "LabVmsShutdown", + "type": "schedules", + "dependsOn": [ + "[variables('newLabId')]" + ], + "properties": { + "status": "Enabled", + "timeZoneId": "[parameters('timeZoneId')]", + "taskType": "LabVmsShutdownTask", + "dailyRecurrence": { + "time": "[replace(parameters('labVmShutDownTime'),':','')]" + } + } + }, + { + "apiVersion": "2017-04-26-preview", + "name": "default/MaxVmsAllowedPerUser", + "type": "policysets/policies", + "dependsOn": [ + "[variables('newLabId')]" + ], + "properties": { + "description": "", + "factName": "UserOwnedLabVmCount", + "threshold": "[string(parameters('maxAllowedVmsPerUser'))]", + "evaluatorType": "MaxValuePolicy", + "status": "enabled" + } + }, + { + "apiVersion": "2017-04-26-preview", + "name": "default/MaxVmsAllowedPerLab", + "type": "policysets/policies", + "dependsOn": [ + "[variables('newLabId')]" + ], + "properties": { + "description": "", + "factName": "LabVmCount", + "threshold": "[string(parameters('maxAllowedVmsPerLab'))]", + "evaluatorType": "MaxValuePolicy", + "status": "enabled" + } + } + ] + }, + { + "apiVersion": "2017-04-26-preview", + "type": "Microsoft.DevTestLab/labs/formulas", + "name": "[variables('vmFormulaName')]", + "location": "[resourceGroup().location]", + "dependsOn": [ + "[variables('newLabId')]" + ], + "properties": { + "description": "[variables('vmFormulaDescription')]", + "osType": "[parameters('osType')]", + "formulaContent": { + "properties": { + "size": "[parameters('vmSize')]", + "userName": "[parameters('vmUsername')]", + "password": "[parameters('vmPassword')]", + "labSubnetName": "[variables('labSubnetName')]", + "labVirtualNetworkId": "[variables('labVirtualNetworkId')]", + "allowClaim": true, + "storageType": "[parameters('vmStorageType')]", + "galleryimagereference": { + "Sku": "[parameters('sku')]", + "OsType": "[parameters('osType')]", + "Publisher": "[parameters('publisher')]", + "Offer": "[parameters('offer')]", + "Version": "[parameters('version')]" + }, + "networkInterface": { + "virtualNetworkId": "[variables('labVirtualNetworkId')]" + }, + "artifacts": [ + { + "artifactid": "/artifactsources/public repo/artifacts/windows-chocolatey", + "parameters": [ + { + "name": "packages", + "value": "[parameters('chocolatey_packages')]" + }, + { + "name": "allowEmptyChecksums", + "value": "[parameters('chocolatey_allowEmptyChecksums')]" + }, + { + "name": "ignoreChecksums", + "value": "[parameters('chocolatey_ignoreChecksums')]" + } + ] + } + ] + } + } + } + } + ], + "outputs": { + "labId": { + "type": "string", + "value": "[resourceId('Microsoft.DevTestLab/labs', parameters('newLabName'))]" + } + } +} \ No newline at end of file diff --git a/azure-rm/json/devtestlab.parameters.json b/azure-rm/json/devtestlab.parameters.json index 7860212..6c33069 100644 --- a/azure-rm/json/devtestlab.parameters.json +++ b/azure-rm/json/devtestlab.parameters.json @@ -1,1199 +1,51 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DevOpsHOL/devtestlab.parameters.json at master · andregeuze/DevOpsHOL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Skip to content -
- - - - - - - - - - - -
- -
- -
- -
- - - -
-
-
- - - - - - - - - - -
-
- -
    - - - -
  • - -
    - -
    - - - Watch - - -
    - Notifications -
    -
    - - - - - - - - -
    -
    -
    - -
    -
  • - -
  • -
    -
    - - -
    -
    - - -
    - -
  • - -
  • -
    -
    - -
  • -
- -

- - /DevOpsHOL - - - forked from Avanade/DevOpsHOL - -

- -
- - - - -
-
-
- - - - - - - - Permalink - - - - - -
- -
- - Branch: - master - - - - - - - -
- - -
- - Find file - - - Copy path - -
-
- - - - -
- Fetching contributors… -
- -
- - Cannot retrieve contributors at this time -
-
- - - - -
- -
- -
- 51 lines (51 sloc) - - 1009 Bytes -
- -
- -
- Raw - Blame - History -
- - -
- - - - -
- -
-
- -
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"newLabName": {
"value": "devopslab"
},
"timeZoneId": {
"value": "W. Europe Standard Time"
},
"labVmShutDownTime": {
"value": "21:00"
},
"maxAllowedVmsPerUser": {
"value": 3
},
"maxAllowedVmsPerLab": {
"value": 100
},
"vmSize": {
"value": "Standard_B8ms"
},
"vmStorageType": {
"value": "Standard"
},
"vmUsername": {
"value": "devopshol"
},
"vmPassword": {
"value": "ADP#2019"
},
"offer": {
"value": "visualstudio2019"
},
"publisher": {
"value": "microsoftvisualstudio"
},
"sku": {
"value": "vs-2019-comm-win10-n"
},
"osType": {
"value": "Windows"
},
"version": {
"value": "latest"
},
"chocolatey_packages": {
"value": "git,vscode,googlechrome"
}
}
}
- - - -
- -
- - - -
- - -
- - -
-
- - - -
- -
- -
-
- - -
- - - - - - -
- - - You can’t perform that action at this time. -
- - - - - - - - - - - - - - -
- - - - +{ + "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "newLabName": { + "value": "devopslab" + }, + "timeZoneId": { + "value": "W. Europe Standard Time" + }, + "labVmShutDownTime": { + "value": "21:00" + }, + "maxAllowedVmsPerUser": { + "value": 3 + }, + "maxAllowedVmsPerLab": { + "value": 100 + }, + "vmSize": { + "value": "Standard_B8ms" + }, + "vmStorageType": { + "value": "Standard" + }, + "vmUsername": { + "value": "devopshol" + }, + "vmPassword": { + "value": "ADP#2019" + }, + "offer": { + "value": "visualstudio2019" + }, + "publisher": { + "value": "microsoftvisualstudio" + }, + "sku": { + "value": "vs-2019-comm-win10-n" + }, + "osType": { + "value": "Windows" + }, + "version": { + "value": "latest" + }, + "chocolatey_packages": { + "value": "git,vscode,googlechrome" + } + } +} \ No newline at end of file diff --git a/azure-rm/json/vm.json b/azure-rm/json/vm.json index b42eab9..be3713e 100644 --- a/azure-rm/json/vm.json +++ b/azure-rm/json/vm.json @@ -1,1547 +1,138 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DevOpsHOL/vm.json at master · andregeuze/DevOpsHOL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Skip to content -
- - - - - - - - - - - -
- -
- -
- -
- - - -
-
-
- - - - - - - - - - -
-
- -
    - - - -
  • - -
    - -
    - - - Watch - - -
    - Notifications -
    -
    - - - - - - - - -
    -
    -
    - -
    -
  • - -
  • -
    -
    - - -
    -
    - - -
    - -
  • - -
  • -
    -
    - -
  • -
- -

- - /DevOpsHOL - - - forked from Avanade/DevOpsHOL - -

- -
- - - - -
-
-
- - - - - - - - Permalink - - - - - -
- -
- - Branch: - master - - - - - - - -
- - -
- - Find file - - - Copy path - -
-
- - - - -
- Fetching contributors… -
- -
- - Cannot retrieve contributors at this time -
-
- - - - -
- -
- -
- 138 lines (138 sloc) - - 4.21 KB -
- -
- -
- Raw - Blame - History -
- - -
- - - - -
- -
-
- -
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"newVMName": {
"type": "string",
"metadata": {
"description": "The name of the new vm to be created."
}
},
"existingLabName": {
"type": "string",
"metadata": {
"description": "The name of an existing lab where the new vm will be created."
}
},
"offer": {
"type": "string",
"metadata": {
"description": "Offer of the gallery image"
}
},
"publisher": {
"type": "string",
"metadata": {
"description": "Publisher of the gallery image"
}
},
"sku": {
"type": "string",
"metadata": {
"description": "Sku of the gallery image"
}
},
"osType": {
"type": "string",
"metadata": {
"description": "OsType of the gallery image"
}
},
"version": {
"type": "string",
"defaultValue": "latest",
"metadata": {
"description": "Version of the gallery image"
}
},
"newVMSize": {
"type": "string",
"metadata": {
"description": "The size of the new vm to be created."
}
},
"userName": {
"type": "string",
"metadata": {
"description": "The username for the local account that will be created on the new vm."
}
},
"password": {
"type": "securestring",
"metadata": {
"description": "The password for the local account that will be created on the new vm."
}
},
"chocolatey_packages": {
"type": "string",
"metadata": {
"description": "The packages that will be installed by chocolatey on the new vm."
}
},
"chocolatey_allowEmptyChecksums": {
"type": "bool",
"defaultValue": true
},
"chocolatey_ignoreChecksums": {
"type": "bool",
"defaultValue": true
}
},
"variables": {
"labSubnetName": "[concat(variables('labVirtualNetworkName'), 'Subnet')]",
"labVirtualNetworkId": "[resourceId('Microsoft.DevTestLab/labs/virtualnetworks', parameters('existingLabName'), variables('labVirtualNetworkName'))]",
"labVirtualNetworkName": "[concat('Dtl', parameters('existingLabName'))]",
"resourceName": "[concat(parameters('existingLabName'), '/', parameters('newVMName'))]",
"resourceType": "Microsoft.DevTestLab/labs/virtualMachines"
},
"resources": [
{
"apiVersion": "2018-10-15-preview",
"type": "Microsoft.DevTestLab/labs/virtualMachines",
"name": "[variables('resourceName')]",
"location": "[resourceGroup().location]",
"properties": {
"size": "[parameters('newVMSize')]",
"isAuthenticationWithSshKey": false,
"userName": "[parameters('userName')]",
"sshKey": "",
"password": "[parameters('password')]",
"labVirtualNetworkId": "[variables('labVirtualNetworkId')]",
"labSubnetName": "[variables('labSubnetName')]",
"artifacts": [
{
"artifactId": "[resourceId('Microsoft.DevTestLab/labs/artifactSources/artifacts', parameters('existingLabName'), 'public repo', 'windows-chocolatey')]",
"parameters": [
{
"name": "packages",
"value": "[parameters('chocolatey_packages')]"
},
{
"name": "allowEmptyChecksums",
"value": "[parameters('chocolatey_allowEmptyChecksums')]"
},
{
"name": "ignoreChecksums",
"value": "[parameters('chocolatey_ignoreChecksums')]"
}
]
}
],
"notes": "Visual Studio 2019 Community on Windows 10 Enterprise N (x64)",
"galleryImageReference": {
"Sku": "[parameters('sku')]",
"OsType": "[parameters('osType')]",
"Publisher": "[parameters('publisher')]",
"Offer": "[parameters('offer')]",
"Version": "[parameters('version')]"
}
}
}
],
"outputs": {
"vmId": {
"type": "string",
"value": "[resourceId(variables('resourceType'), parameters('existingLabName'), parameters('newVMName'))]"
}
}
}
- - - -
- -
- - - -
- - -
- - -
-
- - - -
- -
- -
-
- - -
- - - - - - -
- - - You can’t perform that action at this time. -
- - - - - - - - - - - - - - -
- - - - +{ + "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "newVMName": { + "type": "string", + "metadata": { + "description": "The name of the new vm to be created." + } + }, + "existingLabName": { + "type": "string", + "metadata": { + "description": "The name of an existing lab where the new vm will be created." + } + }, + "offer": { + "type": "string", + "metadata": { + "description": "Offer of the gallery image" + } + }, + "publisher": { + "type": "string", + "metadata": { + "description": "Publisher of the gallery image" + } + }, + "sku": { + "type": "string", + "metadata": { + "description": "Sku of the gallery image" + } + }, + "osType": { + "type": "string", + "metadata": { + "description": "OsType of the gallery image" + } + }, + "version": { + "type": "string", + "defaultValue": "latest", + "metadata": { + "description": "Version of the gallery image" + } + }, + "newVMSize": { + "type": "string", + "metadata": { + "description": "The size of the new vm to be created." + } + }, + "userName": { + "type": "string", + "metadata": { + "description": "The username for the local account that will be created on the new vm." + } + }, + "password": { + "type": "securestring", + "metadata": { + "description": "The password for the local account that will be created on the new vm." + } + }, + "chocolatey_packages": { + "type": "string", + "metadata": { + "description": "The packages that will be installed by chocolatey on the new vm." + } + }, + "chocolatey_allowEmptyChecksums": { + "type": "bool", + "defaultValue": true + }, + "chocolatey_ignoreChecksums": { + "type": "bool", + "defaultValue": true + } + }, + "variables": { + "labSubnetName": "[concat(variables('labVirtualNetworkName'), 'Subnet')]", + "labVirtualNetworkId": "[resourceId('Microsoft.DevTestLab/labs/virtualnetworks', parameters('existingLabName'), variables('labVirtualNetworkName'))]", + "labVirtualNetworkName": "[concat('Dtl', parameters('existingLabName'))]", + "resourceName": "[concat(parameters('existingLabName'), '/', parameters('newVMName'))]", + "resourceType": "Microsoft.DevTestLab/labs/virtualMachines" + }, + "resources": [ + { + "apiVersion": "2018-10-15-preview", + "type": "Microsoft.DevTestLab/labs/virtualMachines", + "name": "[variables('resourceName')]", + "location": "[resourceGroup().location]", + "properties": { + "size": "[parameters('newVMSize')]", + "isAuthenticationWithSshKey": false, + "userName": "[parameters('userName')]", + "sshKey": "", + "password": "[parameters('password')]", + "labVirtualNetworkId": "[variables('labVirtualNetworkId')]", + "labSubnetName": "[variables('labSubnetName')]", + "artifacts": [ + { + "artifactId": "[resourceId('Microsoft.DevTestLab/labs/artifactSources/artifacts', parameters('existingLabName'), 'public repo', 'windows-chocolatey')]", + "parameters": [ + { + "name": "packages", + "value": "[parameters('chocolatey_packages')]" + }, + { + "name": "allowEmptyChecksums", + "value": "[parameters('chocolatey_allowEmptyChecksums')]" + }, + { + "name": "ignoreChecksums", + "value": "[parameters('chocolatey_ignoreChecksums')]" + } + ] + } + ], + "notes": "Visual Studio 2019 Community on Windows 10 Enterprise N (x64)", + "galleryImageReference": { + "Sku": "[parameters('sku')]", + "OsType": "[parameters('osType')]", + "Publisher": "[parameters('publisher')]", + "Offer": "[parameters('offer')]", + "Version": "[parameters('version')]" + } + } + } + ], + "outputs": { + "vmId": { + "type": "string", + "value": "[resourceId(variables('resourceType'), parameters('existingLabName'), parameters('newVMName'))]" + } + } +} \ No newline at end of file diff --git a/azure-rm/json/vm.parameters.json b/azure-rm/json/vm.parameters.json index b20f8cb..040460f 100644 --- a/azure-rm/json/vm.parameters.json +++ b/azure-rm/json/vm.parameters.json @@ -1,1151 +1,39 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DevOpsHOL/vm.parameters.json at master · andregeuze/DevOpsHOL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Skip to content -
- - - - - - - - - - - -
- -
- -
- -
- - - -
-
-
- - - - - - - - - - -
-
- -
    - - - -
  • - -
    - -
    - - - Watch - - -
    - Notifications -
    -
    - - - - - - - - -
    -
    -
    - -
    -
  • - -
  • -
    -
    - - -
    -
    - - -
    - -
  • - -
  • -
    -
    - -
  • -
- -

- - /DevOpsHOL - - - forked from Avanade/DevOpsHOL - -

- -
- - - - -
-
-
- - - - - - - - Permalink - - - - - -
- -
- - Branch: - master - - - - - - - -
- - -
- - Find file - - - Copy path - -
-
- - - - -
- Fetching contributors… -
- -
- - Cannot retrieve contributors at this time -
-
- - - - -
- -
- -
- 39 lines (39 sloc) - - 937 Bytes -
- -
- -
- Raw - Blame - History -
- - -
- - - - -
- -
-
- -
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"newVMName": {
"value": "devopsvm"
},
"existingLabName": {
"value": "devopslab"
},
"newVMSize": {
"value": "Standard_B8ms"
},
"userName": {
"value": "devopshol"
},
"password": {
"value": "ADP#2019"
},
"chocolatey_packages": {
"value": "git,vscode,googlechrome"
},
"offer": {
"value": "visualstudio2019"
},
"publisher": {
"value": "microsoftvisualstudio"
},
"sku": {
"value": "vs-2019-comm-win10-n"
},
"osType": {
"value": "Windows"
},
"version": {
"value": "latest"
}
}
}
- - - -
- -
- - - -
- - -
- - -
-
- - - -
- -
- -
-
- - -
- - - - - - -
- - - You can’t perform that action at this time. -
- - - - - - - - - - - - - - -
- - - - +{ + "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "newVMName": { + "value": "devopsvm" + }, + "existingLabName": { + "value": "devopslab" + }, + "newVMSize": { + "value": "Standard_B8ms" + }, + "userName": { + "value": "devopshol" + }, + "password": { + "value": "ADP#2019" + }, + "chocolatey_packages": { + "value": "git,vscode,googlechrome" + }, + "offer": { + "value": "visualstudio2019" + }, + "publisher": { + "value": "microsoftvisualstudio" + }, + "sku": { + "value": "vs-2019-comm-win10-n" + }, + "osType": { + "value": "Windows" + }, + "version": { + "value": "latest" + } + } +} \ No newline at end of file From 47c23fbce0968be12fcb609b4a8e8a41977727ab Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 21:14:27 +0200 Subject: [PATCH 090/168] update main instructions --- README.md | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 03622cd..8af2362 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,18 @@ -# Avanade DevOps HOL -These are the hands on labs associated with the Avanade DevOps Practitioners course. This is based to a large part on the [PartsUnlimitedHOL](https://github.com/Microsoft/PartsUnlimitedE2E/blob/master/PartsUnlimited-aspnet45/docs/GettingStarted.md) but simplified to use the Visual Studio MVC sample application. It does not use the PartsUnlimited HOL, but we want to acknowledge that project's contribution to this project. +# Avanade DevOps Hands-On Labs +These are the hands-on labs associated with the Avanade DevOps Practitioners course. This is based to a large part on the [PartsUnlimitedHOL](https://github.com/Microsoft/PartsUnlimitedE2E/blob/master/PartsUnlimited-aspnet45/docs/GettingStarted.md) but simplified to use the Visual Studio MVC sample application. It does not use the PartsUnlimited HOL, but we want to acknowledge that project's contribution to this project. -You can accomplish these labs using an Azure VM as the development machine. This not only keeps you from having to make changes to your local environment, but it gives you additional experience using Azure and PowerShell. To start setting up your environment, make sure to follow the steps in the Prerequisites lab. +The labs can be completed using an Azure Virtual Machine as development environment. This not only keeps you from having to make changes to your local environment, but it gives you additional experience using Azure and PowerShell. The [Prerequisites](azure-rm/README.md) instructions help you to set up this environment. -## Course Training Labs and Estimated Effort -Below you will find the available training labs and the estimated time they will take to complete. The labs have been ordered in a logical way +## Course Labs +The course contains the following labs: -The order in which they are presented, is the recommended order to run through them. - -| Lab | Estimated Effort (minutes) | -| --------- |:--------------------------:| -| [Prerequisites - Set up your development environment with PowerShell and ARM](azure-rm/README.md) | 30 | -| [Lab 1 - Continuous Integration with Azure DevOps](azure-devops-project/README.md) | 60 | -| [Lab 2 - Multi-stage deployments with Azure DevOps](multi-stage-deployments/README.md) | 45 | -| [Lab 3 - UI Testing with Selenium and Azure DevOps](ui-testing/README.md) | 90 | -| [Lab 4 - Static code analysis with SonarQube](sonarqube/README.md) | 45 | -| [Lab 5 - Feature Toggles](feature-flag/README.md) | 45 | -| [[**Optional**] Lab 6 - Security Verification Tests in your CD pipeline](security-testing/README.md) | 45 | -| [Lab 7 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 | +| Lab | Effort | +| :-------- |:--------------------------:| +| [Prerequisites - Set up development environment](azure-rm/README.md) | 30 min | +| [Lab 1 - Continuous Integration with Azure DevOps](azure-devops-project/README.md) | 60 min | +| [Lab 2 - Multi-stage deployments with Azure DevOps](multi-stage-deployments/README.md) | 45 min | +| [Lab 3 - UI Testing with Selenium and Azure DevOps](ui-testing/README.md) | 90 min | +| [Lab 4 - Static code analysis with SonarQube](sonarqube/README.md) | 45 min | +| [Lab 5 - Feature Toggles](feature-flag/README.md) | 45 min | +| [Lab 6 - *(Optional)* - Security Verification Tests in your CD pipeline](security-testing/README.md) | 45 min | +| [Lab 7 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 min | From 8fb9381a6ec9624aa9f68bb3e725f41ed171f2c0 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 21:14:48 +0200 Subject: [PATCH 091/168] update main instructions --- .vs/slnx.sqlite | Bin 0 -> 77824 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 .vs/slnx.sqlite diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..2789d33fdb46ae3131456a0cf07e6d1a87e98eb1 GIT binary patch literal 77824 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 Lga9G%(h&GRMWAB4 literal 0 HcmV?d00001 From c4066508c6d5dea7a42515f4c88dc6eb046c4ccc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Geuze?= Date: Wed, 10 Apr 2019 21:18:06 +0200 Subject: [PATCH 092/168] add demo scripts for automation and dsc --- demos/README.md | 22 +++++++++++++++------- demos/azure-automation-dsc/HelloWorld.ps1 | 16 ++++++++++++++++ demos/azure-automation-dsc/webserver.ps1 | 21 +++++++++++++++++++++ 3 files changed, 52 insertions(+), 7 deletions(-) create mode 100644 demos/azure-automation-dsc/HelloWorld.ps1 create mode 100644 demos/azure-automation-dsc/webserver.ps1 diff --git a/demos/README.md b/demos/README.md index 7807a56..49146c8 100644 --- a/demos/README.md +++ b/demos/README.md @@ -2,14 +2,22 @@ This is an overview of all the demos and how to run them. ## Dev Test Labs -- Go to [Azure-rm](../azure-rm) and run the ProvisionEnvironment.ps1 script. -- Review the result in your Azure Portal +1. Go to [Azure-rm](../azure-rm) and run the ProvisionEnvironment.ps1 script. +1. Review the result in your Azure Portal + +## Azure Automation DSC +1. Show runbooks with gallery, custom scripts +1. Show how to use Azure automation: + - Create an Azure automation account in Azure + - Import the DSC configuration and compile it + - Create a Windows **SERVER** Virtual Machine + - Register the VM as DSC node to the new DSC configuration ## Multi-stage deployments -- Run the steps from [this lab](../multi-stage-deployments/README.md) -- Walk through the steps with the class +1. Run the steps from [this lab](../multi-stage-deployments/README.md) +1. Walk through the steps with the class ## SonarQube -- Run the steps from [this lab](../sonarqube/README.md) -- Walk through the steps with the class -- Show the SonarQube dashboard +1. Run the steps from [this lab](../sonarqube/README.md) +1. Walk through the steps with the class +1. Show the SonarQube dashboard diff --git a/demos/azure-automation-dsc/HelloWorld.ps1 b/demos/azure-automation-dsc/HelloWorld.ps1 new file mode 100644 index 0000000..3c561be --- /dev/null +++ b/demos/azure-automation-dsc/HelloWorld.ps1 @@ -0,0 +1,16 @@ +Configuration HelloWorld { + + # Import the module that contains the File resource. + Import-DscResource -ModuleName PsDesiredStateConfiguration + + # The Node statement specifies which targets to compile MOF files for, when this configuration is executed. + Node 'localhost' { + + # The File resource can ensure the state of files, or copy them from a source to a destination with persistent updates. + File HelloWorld { + DestinationPath = "C:\Temp\HelloWorld.txt" + Ensure = "Present" + Contents = "Hello World from DSC!" + } + } +} \ No newline at end of file diff --git a/demos/azure-automation-dsc/webserver.ps1 b/demos/azure-automation-dsc/webserver.ps1 new file mode 100644 index 0000000..cde290e --- /dev/null +++ b/demos/azure-automation-dsc/webserver.ps1 @@ -0,0 +1,21 @@ +configuration WebServer +{ + Node IsWebServer + { + WindowsFeature IIS + { + Ensure = 'Present' + Name = 'Web-Server' + IncludeAllSubFeature = $true + } + } + + Node NotWebServer + { + WindowsFeature IIS + { + Ensure = 'Absent' + Name = 'Web-Server' + } + } +} \ No newline at end of file From fd269b7e13aa6423a75372e4d17c99f3d64a871a Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 21:19:17 +0200 Subject: [PATCH 093/168] update prerequisites to azure portal instructions --- azure-rm/ProvisionEnvironment.ps1 | Bin 2650 -> 0 bytes azure-rm/README.md | 79 ++++---- azure-rm/json/devtestlab.json | 239 ----------------------- azure-rm/json/devtestlab.parameters.json | 51 ----- azure-rm/json/vm.json | 138 ------------- azure-rm/json/vm.parameters.json | 39 ---- 6 files changed, 35 insertions(+), 511 deletions(-) delete mode 100644 azure-rm/ProvisionEnvironment.ps1 delete mode 100644 azure-rm/json/devtestlab.json delete mode 100644 azure-rm/json/devtestlab.parameters.json delete mode 100644 azure-rm/json/vm.json delete mode 100644 azure-rm/json/vm.parameters.json diff --git a/azure-rm/ProvisionEnvironment.ps1 b/azure-rm/ProvisionEnvironment.ps1 deleted file mode 100644 index 5a7c2d3af49164ff054a852117a7c4e4041607c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2650 zcmd6p&2Q5{5XI+=#Q(5La)5&oaO1!M6~YD5DuteqARlg8ln;|Q4Yc%M2YzoiTRTpj z6c7@!?AW`rGjHa-nfB+8mc6n$*Nppx4J@~F-lulNcWS5H`kk_qnzQHJ4O?I}vy8X< zcF*5U)(`B=dRUIUWzJWMrB3OYd(YZku%h$MzVTe*-*GDC8nP#kEq<5Q=Q&{aoJbK> zhX@nzGaxzUeQp=n2;Txkj_WowiWe{`TJ$m_!!nMZU3x?T_3an}!mf`O@GJIfaOf+u zD#jjpW%kq_+Y@_Mi}1XJ#M#PMGWVE;yg(dt5G#vy{Q@_m8w8Gs@>j5z+n8#X*?Pm- z5mr;Yi?t!Y;%Uq+73ixz|A6)ZS&P{O<;1#m;pYI~Q`S@a>OFnOTbs2xTI=Ecj1!0O z`}ro;6&5Y~Xpc(OOW6Iwdc$7wcFM^m=yG4dYkSDfmCs0w>k3h&B;l`OlC}rFUP9(f zm=5tM%Z~Rv_TH}jQ*{X1-HdVfeCvHnv$4uml*ctScc84>EA+O%Z^{Y~j-W7gs)L=> zD?;2k>Mg#Co~i2Hl@u?pO>D)kW`nc$pmnHAy)M3IzMAseC(6Kc8R{GL+{b#vrG6IY zZO?O5W`k(z?Gt;;bAjz8mh#^7xI>hbuWaohC|lkGigI@QI#|6SjB)D3xwn~LG5s27 zPyWLR&A2epR{UzczE7)F9^<1=7w8K9JDgu_skzEVF@2MJ-?b96PT2x-v6u;ni?^>{$_-}|FkhP zk{wwV_1RU6!m8@|T_uY)*{bgy+i<0de2iKEFp)Y0j-2RjoN( z{7$57>-++Q_3=-9jQ+Z(Bil{#+Q)e4-v5L5g15$+0ZnE7R};08z{ Change directory link and select the new AD instance that you just created. - For more information, you can reference [Associate an existing subscription to your Azure AD directory](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-how-subscriptions-associated-directory#to-associate-an-existing-subscription-to-your-azure-ad-directory) -## Preparing a Development environment - -1. Make sure you have an active Azure DevOps account.
-[Sign up for Azure DevOps](https://dev.azure.com/) - -2. Verify that PowerShell v5+ is installed along with the AzureRM modules. - - Install-Module Powershellget -Force - - Install-Module -Name AzureRm -AllowClobber - - Import-Module -Name AzureRM - -3. Using an Azure development environment is strongly encouraged. This avoids conflicts with your existing development environment. Complete the steps listed below in the [Azure Development Environment](#azure-development-environment). - -4. Complete the [Getting Started](getting-started/README.md) lab. This will make sure that your environment is correctly configured and ready to execute the remaining labs in the course. - -5. Configure a private Build/Release agent from the [Private Agent](private-agent/README.md) lab. - -## Set up the Azure Development Environment -You can either configure an Azure development environment on your own or use the PowerShell script provided by this lab. This will create a DevTestLab in a new Azure Resource Group and then configure an Azure VM with Windows 10 and the latest Visual Studio Community edition. It will also use Chocolatey to install a collection of other tools and applications. - ->**Note:** Not all VM SKUs are available in every region. You can get the list of SKUs in a particular location with the following PowerShell commands. -```PowerShell -$locName="South Central US" -Get-AzureRMVMImageSku -Location $locName -Publisher "MicrosoftVisualStudio" -Offer "VisualStudio" | Select Skus -``` - -To start setting up your environment, follow these steps: - -1. Clone this repository or download the [azure-rm](../azure-rm) folder and extract the files on your system. - -1. Open **ProvisionEnvironment.ps1** and modify the following lines of PowerShell code in the top of the file: - ```PowerShell - $subscriptionName = "Services" # Change to the name of your azure subscription - $ResourceGroupName = "adp2019" # Change if you want to name the resource group differently - ``` - -1. Then open a PowerShell console in the same folder and execute the file: .\ProvisionEnvironment.ps1 - -1. Watch how the script will create your required resources in Azure. **The process may take 20 minutes.** +## Prepare development environment + +1. Create a DevTest lab\ +Follow instructions from [Create a lab in Azure DevTest Labs](https://docs.microsoft.com/azure/lab-services/devtest-lab-create-lab). Ensure the following settings: + - Lab name: devopslab + - Resource group: devopslab (new) + - Location: West Europe + - Auto-shutdown: default (Enabled, 19:00) + +2. Add a Virtual Machine to your DevTest lab\ +Follow instructions from [Add a VM to a lab in Azure DevTest Labs](https://docs.microsoft.com/azure/lab-services/devtest-lab-add-vm). Ensure the following settings: + - Choose a base: Visual Studio 2019 Community on Windows 10 Enterprise N (x64) + - Virtual machine name: devopsvm + - User name: devopshol + - Password: ADP#2019 + - Virtual machine size: Standard_B8ms + - OS disk type: Standard SSD + - Artifacts selection: Git, Visual Studio Code, Chrome + +3. Verify connection to the Virtual Machine + - Wait untill the virtual machine is fully provisioned and the artifacts are applied.\ + *(this can take up to 20 minutes)* + - Verify you can use the virtual machine by connecting to it:\ + Select 'Connect' in the Virtual machine Overview in the portal and provide the credentials you used in the previous step. ## Next steps -Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file +Return to the [Lab index](../README.md) to continue with the course labs. \ No newline at end of file diff --git a/azure-rm/json/devtestlab.json b/azure-rm/json/devtestlab.json deleted file mode 100644 index 3356097..0000000 --- a/azure-rm/json/devtestlab.json +++ /dev/null @@ -1,239 +0,0 @@ -{ - "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "newLabName": { - "type": "string", - "defaultValue": "FabrikamDemoLab", - "metadata": { - "description": "The name of the new lab instance to be created." - } - }, - "timeZoneId": { - "type": "string", - "defaultValue": "UTC", - "metadata": { - "description": "The timezone of the lab." - } - }, - "labVmShutDownTime": { - "type": "string", - "minLength": 5, - "maxLength": 5, - "defaultValue": "21:00", - "metadata": { - "description": "Set 'Auto Shutdown' policy: The UTC time at which the Lab VMs will be automatically shutdown (E.g. 17:30, 20:00, 09:00)." - } - }, - "maxAllowedVmsPerUser": { - "type": "int", - "minValue": 0, - "defaultValue": 10, - "metadata": { - "description": "Set 'max VM allowed per user' policy: The maximum number of VMs allowed per user." - } - }, - "maxAllowedVmsPerLab": { - "type": "int", - "minValue": 0, - "defaultValue": 100, - "metadata": { - "description": "Set 'Total VMs allowed in Lab' policy: The maximum number of VMs allowed per lab." - } - }, - "vmSize": { - "type": "string", - "defaultValue": "Standard_D1", - "metadata": { - "description": "The size of all the VMs to be created in the lab." - } - }, - "vmStorageType": { - "type": "string", - "defaultValue": "Premium", - "metadata": { - "description": "The storage type ('Premium' or 'Standard') of all the VMs to be created in the lab." - } - }, - "vmUsername": { - "type": "string", - "defaultValue": "demolab", - "metadata": { - "description": "The username for the local account that will be created on all the new VMs." - } - }, - "vmPassword": { - "type": "securestring", - "defaultValue": "<3DevTestLabs!", - "metadata": { - "description": "The password for the local account that will be created on all the new VMs." - } - }, - "offer": { - "type": "string", - "defaultValue": "visualstudio2019" - }, - "publisher": { - "type": "string", - "defaultValue": "microsoftvisualstudio" - }, - "sku": { - "type": "string", - "defaultValue": "vs-2019-comm-win10-n" - }, - "osType": { - "type": "string", - "defaultValue": "Windows" - }, - "version": { - "type": "string", - "defaultValue": "latest" - }, - "chocolatey_packages": { - "type": "string", - "defaultValue": "git,vscode,googlechrome", - "metadata": { - "description": "The packages that will be installed by chocolatey on the new vm." - } - }, - "chocolatey_allowEmptyChecksums": { - "type": "bool", - "defaultValue": true - }, - "chocolatey_ignoreChecksums": { - "type": "bool", - "defaultValue": true - } - }, - "variables": { - "newLabId": "[resourceId('Microsoft.DevTestLab/labs', parameters('newLabName'))]", - "labVirtualNetworkName": "[concat('Dtl', parameters('newLabName'))]", - "labSubnetName": "[concat(variables('labVirtualNetworkName'), 'Subnet')]", - "labVirtualNetworkId": "[concat('/virtualnetworks/', variables('labVirtualNetworkName'))]", - "vmFormulaName": "[concat(parameters('newLabName'), '/Developer')]", - "vmFormulaDescription": "[concat('Formula for lab VMs in ', parameters('newLabName'))]" - }, - "resources": [ - { - "apiVersion": "2017-04-26-preview", - "type": "Microsoft.DevTestLab/labs", - "name": "[parameters('newLabName')]", - "location": "[resourceGroup().location]", - "resources": [ - { - "apiVersion": "2017-04-26-preview", - "name": "[variables('labVirtualNetworkName')]", - "type": "virtualnetworks", - "dependsOn": [ - "[variables('newLabId')]" - ] - }, - { - "apiVersion": "2017-04-26-preview", - "name": "LabVmsShutdown", - "type": "schedules", - "dependsOn": [ - "[variables('newLabId')]" - ], - "properties": { - "status": "Enabled", - "timeZoneId": "[parameters('timeZoneId')]", - "taskType": "LabVmsShutdownTask", - "dailyRecurrence": { - "time": "[replace(parameters('labVmShutDownTime'),':','')]" - } - } - }, - { - "apiVersion": "2017-04-26-preview", - "name": "default/MaxVmsAllowedPerUser", - "type": "policysets/policies", - "dependsOn": [ - "[variables('newLabId')]" - ], - "properties": { - "description": "", - "factName": "UserOwnedLabVmCount", - "threshold": "[string(parameters('maxAllowedVmsPerUser'))]", - "evaluatorType": "MaxValuePolicy", - "status": "enabled" - } - }, - { - "apiVersion": "2017-04-26-preview", - "name": "default/MaxVmsAllowedPerLab", - "type": "policysets/policies", - "dependsOn": [ - "[variables('newLabId')]" - ], - "properties": { - "description": "", - "factName": "LabVmCount", - "threshold": "[string(parameters('maxAllowedVmsPerLab'))]", - "evaluatorType": "MaxValuePolicy", - "status": "enabled" - } - } - ] - }, - { - "apiVersion": "2017-04-26-preview", - "type": "Microsoft.DevTestLab/labs/formulas", - "name": "[variables('vmFormulaName')]", - "location": "[resourceGroup().location]", - "dependsOn": [ - "[variables('newLabId')]" - ], - "properties": { - "description": "[variables('vmFormulaDescription')]", - "osType": "[parameters('osType')]", - "formulaContent": { - "properties": { - "size": "[parameters('vmSize')]", - "userName": "[parameters('vmUsername')]", - "password": "[parameters('vmPassword')]", - "labSubnetName": "[variables('labSubnetName')]", - "labVirtualNetworkId": "[variables('labVirtualNetworkId')]", - "allowClaim": true, - "storageType": "[parameters('vmStorageType')]", - "galleryimagereference": { - "Sku": "[parameters('sku')]", - "OsType": "[parameters('osType')]", - "Publisher": "[parameters('publisher')]", - "Offer": "[parameters('offer')]", - "Version": "[parameters('version')]" - }, - "networkInterface": { - "virtualNetworkId": "[variables('labVirtualNetworkId')]" - }, - "artifacts": [ - { - "artifactid": "/artifactsources/public repo/artifacts/windows-chocolatey", - "parameters": [ - { - "name": "packages", - "value": "[parameters('chocolatey_packages')]" - }, - { - "name": "allowEmptyChecksums", - "value": "[parameters('chocolatey_allowEmptyChecksums')]" - }, - { - "name": "ignoreChecksums", - "value": "[parameters('chocolatey_ignoreChecksums')]" - } - ] - } - ] - } - } - } - } - ], - "outputs": { - "labId": { - "type": "string", - "value": "[resourceId('Microsoft.DevTestLab/labs', parameters('newLabName'))]" - } - } -} \ No newline at end of file diff --git a/azure-rm/json/devtestlab.parameters.json b/azure-rm/json/devtestlab.parameters.json deleted file mode 100644 index 6c33069..0000000 --- a/azure-rm/json/devtestlab.parameters.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "newLabName": { - "value": "devopslab" - }, - "timeZoneId": { - "value": "W. Europe Standard Time" - }, - "labVmShutDownTime": { - "value": "21:00" - }, - "maxAllowedVmsPerUser": { - "value": 3 - }, - "maxAllowedVmsPerLab": { - "value": 100 - }, - "vmSize": { - "value": "Standard_B8ms" - }, - "vmStorageType": { - "value": "Standard" - }, - "vmUsername": { - "value": "devopshol" - }, - "vmPassword": { - "value": "ADP#2019" - }, - "offer": { - "value": "visualstudio2019" - }, - "publisher": { - "value": "microsoftvisualstudio" - }, - "sku": { - "value": "vs-2019-comm-win10-n" - }, - "osType": { - "value": "Windows" - }, - "version": { - "value": "latest" - }, - "chocolatey_packages": { - "value": "git,vscode,googlechrome" - } - } -} \ No newline at end of file diff --git a/azure-rm/json/vm.json b/azure-rm/json/vm.json deleted file mode 100644 index be3713e..0000000 --- a/azure-rm/json/vm.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "newVMName": { - "type": "string", - "metadata": { - "description": "The name of the new vm to be created." - } - }, - "existingLabName": { - "type": "string", - "metadata": { - "description": "The name of an existing lab where the new vm will be created." - } - }, - "offer": { - "type": "string", - "metadata": { - "description": "Offer of the gallery image" - } - }, - "publisher": { - "type": "string", - "metadata": { - "description": "Publisher of the gallery image" - } - }, - "sku": { - "type": "string", - "metadata": { - "description": "Sku of the gallery image" - } - }, - "osType": { - "type": "string", - "metadata": { - "description": "OsType of the gallery image" - } - }, - "version": { - "type": "string", - "defaultValue": "latest", - "metadata": { - "description": "Version of the gallery image" - } - }, - "newVMSize": { - "type": "string", - "metadata": { - "description": "The size of the new vm to be created." - } - }, - "userName": { - "type": "string", - "metadata": { - "description": "The username for the local account that will be created on the new vm." - } - }, - "password": { - "type": "securestring", - "metadata": { - "description": "The password for the local account that will be created on the new vm." - } - }, - "chocolatey_packages": { - "type": "string", - "metadata": { - "description": "The packages that will be installed by chocolatey on the new vm." - } - }, - "chocolatey_allowEmptyChecksums": { - "type": "bool", - "defaultValue": true - }, - "chocolatey_ignoreChecksums": { - "type": "bool", - "defaultValue": true - } - }, - "variables": { - "labSubnetName": "[concat(variables('labVirtualNetworkName'), 'Subnet')]", - "labVirtualNetworkId": "[resourceId('Microsoft.DevTestLab/labs/virtualnetworks', parameters('existingLabName'), variables('labVirtualNetworkName'))]", - "labVirtualNetworkName": "[concat('Dtl', parameters('existingLabName'))]", - "resourceName": "[concat(parameters('existingLabName'), '/', parameters('newVMName'))]", - "resourceType": "Microsoft.DevTestLab/labs/virtualMachines" - }, - "resources": [ - { - "apiVersion": "2018-10-15-preview", - "type": "Microsoft.DevTestLab/labs/virtualMachines", - "name": "[variables('resourceName')]", - "location": "[resourceGroup().location]", - "properties": { - "size": "[parameters('newVMSize')]", - "isAuthenticationWithSshKey": false, - "userName": "[parameters('userName')]", - "sshKey": "", - "password": "[parameters('password')]", - "labVirtualNetworkId": "[variables('labVirtualNetworkId')]", - "labSubnetName": "[variables('labSubnetName')]", - "artifacts": [ - { - "artifactId": "[resourceId('Microsoft.DevTestLab/labs/artifactSources/artifacts', parameters('existingLabName'), 'public repo', 'windows-chocolatey')]", - "parameters": [ - { - "name": "packages", - "value": "[parameters('chocolatey_packages')]" - }, - { - "name": "allowEmptyChecksums", - "value": "[parameters('chocolatey_allowEmptyChecksums')]" - }, - { - "name": "ignoreChecksums", - "value": "[parameters('chocolatey_ignoreChecksums')]" - } - ] - } - ], - "notes": "Visual Studio 2019 Community on Windows 10 Enterprise N (x64)", - "galleryImageReference": { - "Sku": "[parameters('sku')]", - "OsType": "[parameters('osType')]", - "Publisher": "[parameters('publisher')]", - "Offer": "[parameters('offer')]", - "Version": "[parameters('version')]" - } - } - } - ], - "outputs": { - "vmId": { - "type": "string", - "value": "[resourceId(variables('resourceType'), parameters('existingLabName'), parameters('newVMName'))]" - } - } -} \ No newline at end of file diff --git a/azure-rm/json/vm.parameters.json b/azure-rm/json/vm.parameters.json deleted file mode 100644 index 040460f..0000000 --- a/azure-rm/json/vm.parameters.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "newVMName": { - "value": "devopsvm" - }, - "existingLabName": { - "value": "devopslab" - }, - "newVMSize": { - "value": "Standard_B8ms" - }, - "userName": { - "value": "devopshol" - }, - "password": { - "value": "ADP#2019" - }, - "chocolatey_packages": { - "value": "git,vscode,googlechrome" - }, - "offer": { - "value": "visualstudio2019" - }, - "publisher": { - "value": "microsoftvisualstudio" - }, - "sku": { - "value": "vs-2019-comm-win10-n" - }, - "osType": { - "value": "Windows" - }, - "version": { - "value": "latest" - } - } -} \ No newline at end of file From 25814128fd5bcaa9bdb61d5fe5ae9648a8d1a429 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 21:20:17 +0200 Subject: [PATCH 094/168] add vs gitignore --- .gitignore | 246 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..23d2719 --- /dev/null +++ b/.gitignore @@ -0,0 +1,246 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +[Xx]64/ +[Xx]86/ +[Bb]uild/ +bld/ +[Bb]in/ +[Oo]bj/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +# *.[Pp]ublish.xml +*.azurePubxml + +# TODO: Un-comment the next line if you do not want to checkin +# your web deploy settings because they may include unencrypted +# passwords +#*.pubxml +*.publishproj + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignoreable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directory +AppPackages/ +BundleArtifacts/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# LightSwitch generated files +GeneratedArtifacts/ +ModelManifest.xml + +# Paket dependency manager +.paket/paket.exe + +# FAKE - F# Make +.fake/ +/powerpeers.services/PowerpeersData/PowerpeersData.jfm +/PowerpeersUI/ +/Powerpeers.Services/Powerpeers.Services/Helpers/TempFile.cs +/Powerpeers.Services/azure-cosmosdb-bulkexecutor-dotnet-getting-started From 62e2da88d973efa54aabb04cb1a0ba1b57a7e765 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 21:28:22 +0200 Subject: [PATCH 095/168] update gitignore --- .gitignore | 136 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 110 insertions(+), 26 deletions(-) diff --git a/.gitignore b/.gitignore index 23d2719..3e759b7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # User-specific files *.suo @@ -15,18 +17,21 @@ [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ -[Xx]64/ -[Xx]86/ -[Bb]uild/ +x64/ +x86/ bld/ [Bb]in/ [Oo]bj/ +[Ll]og/ -# Visual Studio 2015 cache/options directory +# Visual Studio 2015/2017 cache/options directory .vs/ # Uncomment if you have tasks that create the project's static files in wwwroot #wwwroot/ +# Visual Studio 2017 auto generated files +Generated\ Files/ + # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* @@ -40,18 +45,29 @@ TestResult.xml [Rr]eleasePS/ dlldata.c -# DNX +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core project.lock.json +project.fragment.lock.json artifacts/ +**/Properties/launchSettings.json +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio *_i.c *_p.c *_i.h *.ilk *.meta *.obj +*.iobj *.pch *.pdb +*.ipdb *.pgc *.pgd *.rsp @@ -81,6 +97,7 @@ ipch/ *.sdf *.cachefile *.VC.db +*.VC.VC.opendb # Visual Studio profiler *.psess @@ -88,6 +105,9 @@ ipch/ *.vspx *.sap +# Visual Studio Trace Files +*.e2e + # TFS 2012 Local Workspace $tf/ @@ -108,6 +128,14 @@ _TeamCity* # DotCover is a Code Coverage Tool *.dotCover +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + # NCrunch _NCrunch_* .*crunch*.local.xml @@ -137,24 +165,27 @@ DocProject/Help/html publish/ # Publish Web Output -# *.[Pp]ublish.xml +*.[Pp]ublish.xml *.azurePubxml - -# TODO: Un-comment the next line if you do not want to checkin -# your web deploy settings because they may include unencrypted -# passwords -#*.pubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml *.publishproj +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + # NuGet Packages *.nupkg # The packages folder can be ignored because of Package Restore -**/packages/* +**/[Pp]ackages/* # except build/, which is used as an MSBuild target. -!**/packages/build/ +!**/[Pp]ackages/build/ # Uncomment if necessary however generally it will be regenerated when needed -#!**/packages/repositories.config -# NuGet v3's project.json files produces more ignoreable files +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files *.nuget.props *.nuget.targets @@ -166,9 +197,12 @@ csx/ ecf/ rcf/ -# Windows Store app package directory +# Windows Store app package directories and files AppPackages/ BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx # Visual Studio cache files # files ending in .cache can be ignored @@ -178,16 +212,23 @@ BundleArtifacts/ # Others ClientBin/ -[Ss]tyle[Cc]op.* ~$* *~ *.dbmdl *.dbproj.schemaview +*.jfm *.pfx *.publishsettings -node_modules/ orleans.codegen.cs +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + # RIA/Silverlight projects Generated_Code/ @@ -198,15 +239,19 @@ _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak # SQL Server files *.mdf *.ldf +*.ndf # Business Intelligence projects *.rdl.data *.bim.layout *.bim_*.settings +*.rptproj.rsuser # Microsoft Fakes FakesAssemblies/ @@ -216,6 +261,7 @@ FakesAssemblies/ # Node.js Tools for Visual Studio .ntvs_analysis.dat +node_modules/ # Visual Studio 6 build log *.plg @@ -223,6 +269,9 @@ FakesAssemblies/ # Visual Studio 6 workspace options file *.opt +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + # Visual Studio LightSwitch build output **/*.HTMLClient/GeneratedArtifacts **/*.DesktopClient/GeneratedArtifacts @@ -231,16 +280,51 @@ FakesAssemblies/ **/*.Server/ModelManifest.xml _Pvt_Extensions -# LightSwitch generated files -GeneratedArtifacts/ -ModelManifest.xml - # Paket dependency manager .paket/paket.exe +paket-files/ # FAKE - F# Make .fake/ -/powerpeers.services/PowerpeersData/PowerpeersData.jfm -/PowerpeersUI/ -/Powerpeers.Services/Powerpeers.Services/Helpers/TempFile.cs -/Powerpeers.Services/azure-cosmosdb-bulkexecutor-dotnet-getting-started + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ From a0af83722550da22f4cd912a12fe4a1e73b5da1a Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 21:31:06 +0200 Subject: [PATCH 096/168] remove obsolete --- .vs/slnx.sqlite | Bin 77824 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .vs/slnx.sqlite diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite deleted file mode 100644 index 2789d33fdb46ae3131456a0cf07e6d1a87e98eb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77824 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 Lga9G%(h&GRMWAB4 From f021d18002752e576a89243315860bb6c68f6077 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 22:02:24 +0200 Subject: [PATCH 097/168] update prerequisites to azure portal instructions --- azure-rm/README.md | 82 ++++++++---------- .../azure-rm}/ProvisionEnvironment.ps1 | Bin .../azure-rm}/json/devtestlab.json | 0 .../azure-rm}/json/devtestlab.parameters.json | 0 {azure-rm => demos/azure-rm}/json/vm.json | 0 .../azure-rm}/json/vm.parameters.json | 0 6 files changed, 38 insertions(+), 44 deletions(-) rename {azure-rm => demos/azure-rm}/ProvisionEnvironment.ps1 (100%) rename {azure-rm => demos/azure-rm}/json/devtestlab.json (100%) rename {azure-rm => demos/azure-rm}/json/devtestlab.parameters.json (100%) rename {azure-rm => demos/azure-rm}/json/vm.json (100%) rename {azure-rm => demos/azure-rm}/json/vm.parameters.json (100%) diff --git a/azure-rm/README.md b/azure-rm/README.md index 040a8f8..3422143 100644 --- a/azure-rm/README.md +++ b/azure-rm/README.md @@ -1,11 +1,16 @@ -# Avanade DevOps HOL - Prerequisites - Set up your development environment with PowerShell and ARM -If you are taking the Avanade DevOps Practitioners course, then the following are pre-requisites for the beginning of the course. The pre-requisites are straightforward but a few of the tasks take some time so doing this before the class will save time during the course and allow you to get the maximum value from the class. +# Prerequisites lab - Set up your development environment +Follow this lab to set up a development environment for the course labs. Creating the environment can take some time, so it is recommended to complete this before attending the course. -## Preparing your Azure subscription +## Prepare Azure DevOps and Azure subscription -Make sure your Azure subscription is enabled and you can log in and create resources. Visit the [Azure Portal](https://portal.azure.com) to verify. +1. Make sure you have an active Azure DevOps account.\ +[Sign up for Azure DevOps](https://dev.azure.com/) + +2. Make sure you have an active Azure subscription.\ +Sign in to the [Azure Portal](https://portal.azure.com) to verify you can log in and create resources.\ +If you used a (Avanade) organization MDSN account, go to the next step. -If you are using your Avanade email to access the Azure portal, then you will need to create a new Active Directory instance. This is because the labs require creating an enterprise application id and individual users do not have permissions to create enterprise applications on the Avanade AD instance. +3. (only for organization accounts) If you are using your Avanade email to access the Azure portal, then you will need to create a new Active Directory instance. This is because the labs require creating an enterprise application id and individual users do not have permissions to create enterprise applications on the Avanade AD instance. - In the [Azure Portal](https://portal.azure.com), *Create a Resource* of *Azure Active Directory* with a meaningful name. This is probably something you will use as a general purpose AD instance (i.e. not just for the class) so you may want to name it appropriately. @@ -14,44 +19,33 @@ If you are using your Avanade email to access the Azure portal, then you will ne - On the Subscriptions' Overview panel, choose the -> Change directory link and select the new AD instance that you just created. - For more information, you can reference [Associate an existing subscription to your Azure AD directory](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-how-subscriptions-associated-directory#to-associate-an-existing-subscription-to-your-azure-ad-directory) -## Preparing a Development environment - -1. Make sure you have an active Azure DevOps account.
-[Sign up for Azure DevOps](https://dev.azure.com/) - -2. Verify that PowerShell v5+ is installed along with the AzureRM modules. - - Install-Module Powershellget -Force - - Install-Module -Name AzureRm -AllowClobber - - Import-Module -Name AzureRM - -3. Using an Azure development environment is strongly encouraged. This avoids conflicts with your existing development environment. Complete the steps listed below in the [Azure Development Environment](#azure-development-environment). - -4. Complete the [Getting Started](getting-started/README.md) lab. This will make sure that your environment is correctly configured and ready to execute the remaining labs in the course. - -5. Configure a private Build/Release agent from the [Private Agent](private-agent/README.md) lab. - -## Set up the Azure Development Environment -You can either configure an Azure development environment on your own or use the PowerShell script provided by this lab. This will create a DevTestLab in a new Azure Resource Group and then configure an Azure VM with Windows 10 and the latest Visual Studio Community edition. It will also use Chocolatey to install a collection of other tools and applications. - ->**Note:** Not all VM SKUs are available in every region. You can get the list of SKUs in a particular location with the following PowerShell commands. -```PowerShell -$locName="South Central US" -Get-AzureRMVMImageSku -Location $locName -Publisher "MicrosoftVisualStudio" -Offer "VisualStudio" | Select Skus -``` - -To start setting up your environment, follow these steps: - -1. Clone this repository or download the [azure-rm](../azure-rm) folder and extract the files on your system. - -1. Open **ProvisionEnvironment.ps1** and modify the following lines of PowerShell code in the top of the file: - ```PowerShell - $subscriptionName = "Services" # Change to the name of your azure subscription - $ResourceGroupName = "adp2019" # Change if you want to name the resource group differently - ``` - -1. Then open a PowerShell console in the same folder and execute the file: .\ProvisionEnvironment.ps1 - -1. Watch how the script will create your required resources in Azure. **The process may take 20 minutes.** +## Prepare development environment + +1. Create a DevTest lab\ +Follow instructions from [Create a lab in Azure DevTest Labs](https://docs.microsoft.com/azure/lab-services/devtest-lab-create-lab). Ensure the following settings: + - Lab name: devopslab + - Resource group: devopslab (new) + - Location: West Europe + - Auto-shutdown: default (Enabled, 19:00) + +2. Add a Virtual Machine to your DevTest lab\ +Follow instructions from [Add a VM to a lab in Azure DevTest Labs](https://docs.microsoft.com/azure/lab-services/devtest-lab-add-vm). Ensure the following settings: + - Choose a base: Visual Studio 2019 Community on Windows 10 Enterprise N (x64) + - Virtual machine name: devopsvm + - User name: devopshol + - Password: ADP#2019 + - Virtual machine size: Standard_B8ms + - OS disk type: Standard SSD + - Artifacts selection: Install Chocolatey Packages, configuration: + - Packages: git,vscode,googlechrome + - Allow Empty Checksums: true + - Ignore Checksums: true + +3. Verify connection to the Virtual Machine + - Wait untill the virtual machine is fully provisioned and the artifacts are applied.\ + *(this can take up to 20 minutes)* + - Verify you can use the virtual machine by connecting to it:\ + Select 'Connect' in the Virtual machine Overview in the portal and provide the credentials you used in the previous step. ## Next steps -Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file +Return to the [Lab index](../README.md) to continue with the course labs. \ No newline at end of file diff --git a/azure-rm/ProvisionEnvironment.ps1 b/demos/azure-rm/ProvisionEnvironment.ps1 similarity index 100% rename from azure-rm/ProvisionEnvironment.ps1 rename to demos/azure-rm/ProvisionEnvironment.ps1 diff --git a/azure-rm/json/devtestlab.json b/demos/azure-rm/json/devtestlab.json similarity index 100% rename from azure-rm/json/devtestlab.json rename to demos/azure-rm/json/devtestlab.json diff --git a/azure-rm/json/devtestlab.parameters.json b/demos/azure-rm/json/devtestlab.parameters.json similarity index 100% rename from azure-rm/json/devtestlab.parameters.json rename to demos/azure-rm/json/devtestlab.parameters.json diff --git a/azure-rm/json/vm.json b/demos/azure-rm/json/vm.json similarity index 100% rename from azure-rm/json/vm.json rename to demos/azure-rm/json/vm.json diff --git a/azure-rm/json/vm.parameters.json b/demos/azure-rm/json/vm.parameters.json similarity index 100% rename from azure-rm/json/vm.parameters.json rename to demos/azure-rm/json/vm.parameters.json From bddf61fcf80a6d4a51a642db719be247e80d25f3 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 22:11:19 +0200 Subject: [PATCH 098/168] remove gitignore --- .gitignore | 330 ----------------------------------------------------- 1 file changed, 330 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 3e759b7..0000000 --- a/.gitignore +++ /dev/null @@ -1,330 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ -**/Properties/launchSettings.json - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# JetBrains Rider -.idea/ -*.sln.iml - -# CodeRush -.cr/ - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ From 29bac66cccd9da1355723cd2a6685215c03fe040 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 22:13:59 +0200 Subject: [PATCH 099/168] remove gitignore --- .gitignore | 330 ----------------------------------------------------- 1 file changed, 330 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 3e759b7..0000000 --- a/.gitignore +++ /dev/null @@ -1,330 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ -**/Properties/launchSettings.json - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# JetBrains Rider -.idea/ -*.sln.iml - -# CodeRush -.cr/ - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ From 8e62bbef252f97ed9caf6d85839206d7dd062c49 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 22:14:48 +0200 Subject: [PATCH 100/168] remove gitignore --- .gitignore | 330 ----------------------------------------------------- 1 file changed, 330 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 3e759b7..0000000 --- a/.gitignore +++ /dev/null @@ -1,330 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ -**/Properties/launchSettings.json - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# JetBrains Rider -.idea/ -*.sln.iml - -# CodeRush -.cr/ - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ From 136ae4f39c80faa0e06073eb7d0bbc1189e529f6 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 22:15:31 +0200 Subject: [PATCH 101/168] remove gitignore --- .gitignore | 246 ----------------------------------------------------- 1 file changed, 246 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 23d2719..0000000 --- a/.gitignore +++ /dev/null @@ -1,246 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -[Xx]64/ -[Xx]86/ -[Bb]uild/ -bld/ -[Bb]in/ -[Oo]bj/ - -# Visual Studio 2015 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# DNX -project.lock.json -artifacts/ - -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.pch -*.pdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -# *.[Pp]ublish.xml -*.azurePubxml - -# TODO: Un-comment the next line if you do not want to checkin -# your web deploy settings because they may include unencrypted -# passwords -#*.pubxml -*.publishproj - -# NuGet Packages -*.nupkg -# The packages folder can be ignored because of Package Restore -**/packages/* -# except build/, which is used as an MSBuild target. -!**/packages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/packages/repositories.config -# NuGet v3's project.json files produces more ignoreable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directory -AppPackages/ -BundleArtifacts/ - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ - -# Others -ClientBin/ -[Ss]tyle[Cc]op.* -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.pfx -*.publishsettings -node_modules/ -orleans.codegen.cs - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm - -# SQL Server files -*.mdf -*.ldf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# LightSwitch generated files -GeneratedArtifacts/ -ModelManifest.xml - -# Paket dependency manager -.paket/paket.exe - -# FAKE - F# Make -.fake/ -/powerpeers.services/PowerpeersData/PowerpeersData.jfm -/PowerpeersUI/ -/Powerpeers.Services/Powerpeers.Services/Helpers/TempFile.cs -/Powerpeers.Services/azure-cosmosdb-bulkexecutor-dotnet-getting-started From 8cc7157fce76ec377386e9791b1ea74eae187ad1 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 22:21:09 +0200 Subject: [PATCH 102/168] move devops-project lab functional tests to ui testing lab --- azure-devops-project/README.md | 25 +++++++++++-------------- ui-testing/README.md | 16 +++++++++++++++- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/azure-devops-project/README.md b/azure-devops-project/README.md index 55b0e8a..bf8578f 100644 --- a/azure-devops-project/README.md +++ b/azure-devops-project/README.md @@ -1,4 +1,4 @@ -# Avanade DevOps HOL - Create a CI/CD pipeline for .NET with the Azure DevOps Project +# Continuous Integration with Azure DevOps In this lab, we setup our DevOps Project in Azure to create our CI/CD pipeline. This will provide us with a standard code base to work with. @@ -25,25 +25,22 @@ Based on [this](https://docs.microsoft.com/en-us/azure/devops-project/azure-devo - Update all NuGet packages to their 2.x counterparts (Right-click project > Manage NuGet packages > Select all packages > Update) - Add NuGet package to the web project: "Microsoft.NET.Sdk.Razor" -1. Add the following NuGet packages to the **FunctionalTests** project: - - Selenium.Support - - Selenium.WebDriver - - Selenium.Chrome.WebDriver - -1. We need to ensure that the Selenium Chrome driver executable will be copied to the output during publishing. Edit your **FunctionalTests** project file and add the following: - ```xml - - true - - ``` - 1. Unload the web project and unit test project. Make the following change to both project files: - Remove the line ```xml $(PackageTargetFallback);portable-net45+win8+wp8+wpa81; ``` -1. Reload all the projects, build your solution and run the unit tests. Make sure that the tests pass +1. Set the functional tests to be ignored (this will be enabled in another lab).\ +In the **FunctionalTests** project, make the following change: + ```csharp + SampleFunctionalTests.cs + + [Ignore] // <-- ignore test + public void SampleFunctionalTest1() + ``` + +1. Reload all the projects, build your solution and run the unit tests. Make sure that the **unit tests** pass 1. Open the folder "ArmTemplates" in your source, and edit the file "linux-webapp-template.json": - Change the dotnetcore version to 2.1: diff --git a/ui-testing/README.md b/ui-testing/README.md index 7efaac9..2147175 100644 --- a/ui-testing/README.md +++ b/ui-testing/README.md @@ -16,6 +16,20 @@ Based on the following tutorials: ## Tasks for local UI Testing +1. Remove the sample test (SampleFunctionalTests.cs) from the **FunctionalTests** project if it exists + +1. Add the following NuGet packages to the **FunctionalTests** project: + - Selenium.Support + - Selenium.WebDriver + - Selenium.Chrome.WebDriver + +1. We need to ensure that the Selenium Chrome driver executable will be copied to the output during publishing. Edit your **FunctionalTests** project file and add the following: + ```xml + + true + + ``` + 1. Modify the .runsettings file if it already exists, or add a new .runsettings file with the following content:
Click here to view the contents @@ -137,7 +151,7 @@ Based on the following tutorials: ```
-1. Remove SampleFunctionalTests from the project if it exists, and add a new class UITests to the **FunctionalTests** project. +1. Add a new class UITests to the **FunctionalTests** project.
Click here to view the code ```csharp From 3d6be9cf58e358e33e8ee654d213e10b191936c1 Mon Sep 17 00:00:00 2001 From: JW Kroes <49476606+janwkroes@users.noreply.github.com> Date: Wed, 10 Apr 2019 22:23:39 +0200 Subject: [PATCH 103/168] update main instructions (#8) * update main introduction * update prerequisites lab * update prerequisites formatting * undo master deletes * resolve conflict * attempt resolve conflict * attempt resolve conflict * update pipeline lab (move functional tests to ui testing lab) * reset pull request * revert to geuze master * revert to geuze master * revert to geuze master * update main instructions * update main instructions * add vs gitignore * update gitignore * remove obsolete * remove gitignore --- README.md | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 03622cd..8af2362 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,18 @@ -# Avanade DevOps HOL -These are the hands on labs associated with the Avanade DevOps Practitioners course. This is based to a large part on the [PartsUnlimitedHOL](https://github.com/Microsoft/PartsUnlimitedE2E/blob/master/PartsUnlimited-aspnet45/docs/GettingStarted.md) but simplified to use the Visual Studio MVC sample application. It does not use the PartsUnlimited HOL, but we want to acknowledge that project's contribution to this project. +# Avanade DevOps Hands-On Labs +These are the hands-on labs associated with the Avanade DevOps Practitioners course. This is based to a large part on the [PartsUnlimitedHOL](https://github.com/Microsoft/PartsUnlimitedE2E/blob/master/PartsUnlimited-aspnet45/docs/GettingStarted.md) but simplified to use the Visual Studio MVC sample application. It does not use the PartsUnlimited HOL, but we want to acknowledge that project's contribution to this project. -You can accomplish these labs using an Azure VM as the development machine. This not only keeps you from having to make changes to your local environment, but it gives you additional experience using Azure and PowerShell. To start setting up your environment, make sure to follow the steps in the Prerequisites lab. +The labs can be completed using an Azure Virtual Machine as development environment. This not only keeps you from having to make changes to your local environment, but it gives you additional experience using Azure and PowerShell. The [Prerequisites](azure-rm/README.md) instructions help you to set up this environment. -## Course Training Labs and Estimated Effort -Below you will find the available training labs and the estimated time they will take to complete. The labs have been ordered in a logical way +## Course Labs +The course contains the following labs: -The order in which they are presented, is the recommended order to run through them. - -| Lab | Estimated Effort (minutes) | -| --------- |:--------------------------:| -| [Prerequisites - Set up your development environment with PowerShell and ARM](azure-rm/README.md) | 30 | -| [Lab 1 - Continuous Integration with Azure DevOps](azure-devops-project/README.md) | 60 | -| [Lab 2 - Multi-stage deployments with Azure DevOps](multi-stage-deployments/README.md) | 45 | -| [Lab 3 - UI Testing with Selenium and Azure DevOps](ui-testing/README.md) | 90 | -| [Lab 4 - Static code analysis with SonarQube](sonarqube/README.md) | 45 | -| [Lab 5 - Feature Toggles](feature-flag/README.md) | 45 | -| [[**Optional**] Lab 6 - Security Verification Tests in your CD pipeline](security-testing/README.md) | 45 | -| [Lab 7 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 | +| Lab | Effort | +| :-------- |:--------------------------:| +| [Prerequisites - Set up development environment](azure-rm/README.md) | 30 min | +| [Lab 1 - Continuous Integration with Azure DevOps](azure-devops-project/README.md) | 60 min | +| [Lab 2 - Multi-stage deployments with Azure DevOps](multi-stage-deployments/README.md) | 45 min | +| [Lab 3 - UI Testing with Selenium and Azure DevOps](ui-testing/README.md) | 90 min | +| [Lab 4 - Static code analysis with SonarQube](sonarqube/README.md) | 45 min | +| [Lab 5 - Feature Toggles](feature-flag/README.md) | 45 min | +| [Lab 6 - *(Optional)* - Security Verification Tests in your CD pipeline](security-testing/README.md) | 45 min | +| [Lab 7 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 min | From d6d005c071e5b030bdb177806533c66bc9a5db34 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 22:25:44 +0200 Subject: [PATCH 104/168] revert prereqs to geuze master --- azure-rm/ProvisionEnvironment.ps1 | Bin 0 -> 2650 bytes azure-rm/README.md | 82 ++++---- azure-rm/json/devtestlab.json | 239 +++++++++++++++++++++++ azure-rm/json/devtestlab.parameters.json | 51 +++++ azure-rm/json/vm.json | 138 +++++++++++++ azure-rm/json/vm.parameters.json | 39 ++++ 6 files changed, 511 insertions(+), 38 deletions(-) create mode 100644 azure-rm/ProvisionEnvironment.ps1 create mode 100644 azure-rm/json/devtestlab.json create mode 100644 azure-rm/json/devtestlab.parameters.json create mode 100644 azure-rm/json/vm.json create mode 100644 azure-rm/json/vm.parameters.json diff --git a/azure-rm/ProvisionEnvironment.ps1 b/azure-rm/ProvisionEnvironment.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..5a7c2d3af49164ff054a852117a7c4e4041607c8 GIT binary patch literal 2650 zcmd6p&2Q5{5XI+=#Q(5La)5&oaO1!M6~YD5DuteqARlg8ln;|Q4Yc%M2YzoiTRTpj z6c7@!?AW`rGjHa-nfB+8mc6n$*Nppx4J@~F-lulNcWS5H`kk_qnzQHJ4O?I}vy8X< zcF*5U)(`B=dRUIUWzJWMrB3OYd(YZku%h$MzVTe*-*GDC8nP#kEq<5Q=Q&{aoJbK> zhX@nzGaxzUeQp=n2;Txkj_WowiWe{`TJ$m_!!nMZU3x?T_3an}!mf`O@GJIfaOf+u zD#jjpW%kq_+Y@_Mi}1XJ#M#PMGWVE;yg(dt5G#vy{Q@_m8w8Gs@>j5z+n8#X*?Pm- z5mr;Yi?t!Y;%Uq+73ixz|A6)ZS&P{O<;1#m;pYI~Q`S@a>OFnOTbs2xTI=Ecj1!0O z`}ro;6&5Y~Xpc(OOW6Iwdc$7wcFM^m=yG4dYkSDfmCs0w>k3h&B;l`OlC}rFUP9(f zm=5tM%Z~Rv_TH}jQ*{X1-HdVfeCvHnv$4uml*ctScc84>EA+O%Z^{Y~j-W7gs)L=> zD?;2k>Mg#Co~i2Hl@u?pO>D)kW`nc$pmnHAy)M3IzMAseC(6Kc8R{GL+{b#vrG6IY zZO?O5W`k(z?Gt;;bAjz8mh#^7xI>hbuWaohC|lkGigI@QI#|6SjB)D3xwn~LG5s27 zPyWLR&A2epR{UzczE7)F9^<1=7w8K9JDgu_skzEVF@2MJ-?b96PT2x-v6u;ni?^>{$_-}|FkhP zk{wwV_1RU6!m8@|T_uY)*{bgy+i<0de2iKEFp)Y0j-2RjoN( z{7$57>-++Q_3=-9jQ+Z(Bil{#+Q)e4-v5L5g15$+0ZnE7R};08z{ Change directory link and select the new AD instance that you just created. - For more information, you can reference [Associate an existing subscription to your Azure AD directory](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-how-subscriptions-associated-directory#to-associate-an-existing-subscription-to-your-azure-ad-directory) -## Prepare development environment - -1. Create a DevTest lab\ -Follow instructions from [Create a lab in Azure DevTest Labs](https://docs.microsoft.com/azure/lab-services/devtest-lab-create-lab). Ensure the following settings: - - Lab name: devopslab - - Resource group: devopslab (new) - - Location: West Europe - - Auto-shutdown: default (Enabled, 19:00) - -2. Add a Virtual Machine to your DevTest lab\ -Follow instructions from [Add a VM to a lab in Azure DevTest Labs](https://docs.microsoft.com/azure/lab-services/devtest-lab-add-vm). Ensure the following settings: - - Choose a base: Visual Studio 2019 Community on Windows 10 Enterprise N (x64) - - Virtual machine name: devopsvm - - User name: devopshol - - Password: ADP#2019 - - Virtual machine size: Standard_B8ms - - OS disk type: Standard SSD - - Artifacts selection: Install Chocolatey Packages, configuration: - - Packages: git,vscode,googlechrome - - Allow Empty Checksums: true - - Ignore Checksums: true - -3. Verify connection to the Virtual Machine - - Wait untill the virtual machine is fully provisioned and the artifacts are applied.\ - *(this can take up to 20 minutes)* - - Verify you can use the virtual machine by connecting to it:\ - Select 'Connect' in the Virtual machine Overview in the portal and provide the credentials you used in the previous step. +## Preparing a Development environment + +1. Make sure you have an active Azure DevOps account.
+[Sign up for Azure DevOps](https://dev.azure.com/) + +2. Verify that PowerShell v5+ is installed along with the AzureRM modules. + - Install-Module Powershellget -Force + - Install-Module -Name AzureRm -AllowClobber + - Import-Module -Name AzureRM + +3. Using an Azure development environment is strongly encouraged. This avoids conflicts with your existing development environment. Complete the steps listed below in the [Azure Development Environment](#azure-development-environment). + +4. Complete the [Getting Started](getting-started/README.md) lab. This will make sure that your environment is correctly configured and ready to execute the remaining labs in the course. + +5. Configure a private Build/Release agent from the [Private Agent](private-agent/README.md) lab. + +## Set up the Azure Development Environment +You can either configure an Azure development environment on your own or use the PowerShell script provided by this lab. This will create a DevTestLab in a new Azure Resource Group and then configure an Azure VM with Windows 10 and the latest Visual Studio Community edition. It will also use Chocolatey to install a collection of other tools and applications. + +>**Note:** Not all VM SKUs are available in every region. You can get the list of SKUs in a particular location with the following PowerShell commands. +```PowerShell +$locName="South Central US" +Get-AzureRMVMImageSku -Location $locName -Publisher "MicrosoftVisualStudio" -Offer "VisualStudio" | Select Skus +``` + +To start setting up your environment, follow these steps: + +1. Clone this repository or download the [azure-rm](../azure-rm) folder and extract the files on your system. + +1. Open **ProvisionEnvironment.ps1** and modify the following lines of PowerShell code in the top of the file: + ```PowerShell + $subscriptionName = "Services" # Change to the name of your azure subscription + $ResourceGroupName = "adp2019" # Change if you want to name the resource group differently + ``` + +1. Then open a PowerShell console in the same folder and execute the file: .\ProvisionEnvironment.ps1 + +1. Watch how the script will create your required resources in Azure. **The process may take 20 minutes.** ## Next steps -Return to the [Lab index](../README.md) to continue with the course labs. \ No newline at end of file +Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file diff --git a/azure-rm/json/devtestlab.json b/azure-rm/json/devtestlab.json new file mode 100644 index 0000000..3356097 --- /dev/null +++ b/azure-rm/json/devtestlab.json @@ -0,0 +1,239 @@ +{ + "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "newLabName": { + "type": "string", + "defaultValue": "FabrikamDemoLab", + "metadata": { + "description": "The name of the new lab instance to be created." + } + }, + "timeZoneId": { + "type": "string", + "defaultValue": "UTC", + "metadata": { + "description": "The timezone of the lab." + } + }, + "labVmShutDownTime": { + "type": "string", + "minLength": 5, + "maxLength": 5, + "defaultValue": "21:00", + "metadata": { + "description": "Set 'Auto Shutdown' policy: The UTC time at which the Lab VMs will be automatically shutdown (E.g. 17:30, 20:00, 09:00)." + } + }, + "maxAllowedVmsPerUser": { + "type": "int", + "minValue": 0, + "defaultValue": 10, + "metadata": { + "description": "Set 'max VM allowed per user' policy: The maximum number of VMs allowed per user." + } + }, + "maxAllowedVmsPerLab": { + "type": "int", + "minValue": 0, + "defaultValue": 100, + "metadata": { + "description": "Set 'Total VMs allowed in Lab' policy: The maximum number of VMs allowed per lab." + } + }, + "vmSize": { + "type": "string", + "defaultValue": "Standard_D1", + "metadata": { + "description": "The size of all the VMs to be created in the lab." + } + }, + "vmStorageType": { + "type": "string", + "defaultValue": "Premium", + "metadata": { + "description": "The storage type ('Premium' or 'Standard') of all the VMs to be created in the lab." + } + }, + "vmUsername": { + "type": "string", + "defaultValue": "demolab", + "metadata": { + "description": "The username for the local account that will be created on all the new VMs." + } + }, + "vmPassword": { + "type": "securestring", + "defaultValue": "<3DevTestLabs!", + "metadata": { + "description": "The password for the local account that will be created on all the new VMs." + } + }, + "offer": { + "type": "string", + "defaultValue": "visualstudio2019" + }, + "publisher": { + "type": "string", + "defaultValue": "microsoftvisualstudio" + }, + "sku": { + "type": "string", + "defaultValue": "vs-2019-comm-win10-n" + }, + "osType": { + "type": "string", + "defaultValue": "Windows" + }, + "version": { + "type": "string", + "defaultValue": "latest" + }, + "chocolatey_packages": { + "type": "string", + "defaultValue": "git,vscode,googlechrome", + "metadata": { + "description": "The packages that will be installed by chocolatey on the new vm." + } + }, + "chocolatey_allowEmptyChecksums": { + "type": "bool", + "defaultValue": true + }, + "chocolatey_ignoreChecksums": { + "type": "bool", + "defaultValue": true + } + }, + "variables": { + "newLabId": "[resourceId('Microsoft.DevTestLab/labs', parameters('newLabName'))]", + "labVirtualNetworkName": "[concat('Dtl', parameters('newLabName'))]", + "labSubnetName": "[concat(variables('labVirtualNetworkName'), 'Subnet')]", + "labVirtualNetworkId": "[concat('/virtualnetworks/', variables('labVirtualNetworkName'))]", + "vmFormulaName": "[concat(parameters('newLabName'), '/Developer')]", + "vmFormulaDescription": "[concat('Formula for lab VMs in ', parameters('newLabName'))]" + }, + "resources": [ + { + "apiVersion": "2017-04-26-preview", + "type": "Microsoft.DevTestLab/labs", + "name": "[parameters('newLabName')]", + "location": "[resourceGroup().location]", + "resources": [ + { + "apiVersion": "2017-04-26-preview", + "name": "[variables('labVirtualNetworkName')]", + "type": "virtualnetworks", + "dependsOn": [ + "[variables('newLabId')]" + ] + }, + { + "apiVersion": "2017-04-26-preview", + "name": "LabVmsShutdown", + "type": "schedules", + "dependsOn": [ + "[variables('newLabId')]" + ], + "properties": { + "status": "Enabled", + "timeZoneId": "[parameters('timeZoneId')]", + "taskType": "LabVmsShutdownTask", + "dailyRecurrence": { + "time": "[replace(parameters('labVmShutDownTime'),':','')]" + } + } + }, + { + "apiVersion": "2017-04-26-preview", + "name": "default/MaxVmsAllowedPerUser", + "type": "policysets/policies", + "dependsOn": [ + "[variables('newLabId')]" + ], + "properties": { + "description": "", + "factName": "UserOwnedLabVmCount", + "threshold": "[string(parameters('maxAllowedVmsPerUser'))]", + "evaluatorType": "MaxValuePolicy", + "status": "enabled" + } + }, + { + "apiVersion": "2017-04-26-preview", + "name": "default/MaxVmsAllowedPerLab", + "type": "policysets/policies", + "dependsOn": [ + "[variables('newLabId')]" + ], + "properties": { + "description": "", + "factName": "LabVmCount", + "threshold": "[string(parameters('maxAllowedVmsPerLab'))]", + "evaluatorType": "MaxValuePolicy", + "status": "enabled" + } + } + ] + }, + { + "apiVersion": "2017-04-26-preview", + "type": "Microsoft.DevTestLab/labs/formulas", + "name": "[variables('vmFormulaName')]", + "location": "[resourceGroup().location]", + "dependsOn": [ + "[variables('newLabId')]" + ], + "properties": { + "description": "[variables('vmFormulaDescription')]", + "osType": "[parameters('osType')]", + "formulaContent": { + "properties": { + "size": "[parameters('vmSize')]", + "userName": "[parameters('vmUsername')]", + "password": "[parameters('vmPassword')]", + "labSubnetName": "[variables('labSubnetName')]", + "labVirtualNetworkId": "[variables('labVirtualNetworkId')]", + "allowClaim": true, + "storageType": "[parameters('vmStorageType')]", + "galleryimagereference": { + "Sku": "[parameters('sku')]", + "OsType": "[parameters('osType')]", + "Publisher": "[parameters('publisher')]", + "Offer": "[parameters('offer')]", + "Version": "[parameters('version')]" + }, + "networkInterface": { + "virtualNetworkId": "[variables('labVirtualNetworkId')]" + }, + "artifacts": [ + { + "artifactid": "/artifactsources/public repo/artifacts/windows-chocolatey", + "parameters": [ + { + "name": "packages", + "value": "[parameters('chocolatey_packages')]" + }, + { + "name": "allowEmptyChecksums", + "value": "[parameters('chocolatey_allowEmptyChecksums')]" + }, + { + "name": "ignoreChecksums", + "value": "[parameters('chocolatey_ignoreChecksums')]" + } + ] + } + ] + } + } + } + } + ], + "outputs": { + "labId": { + "type": "string", + "value": "[resourceId('Microsoft.DevTestLab/labs', parameters('newLabName'))]" + } + } +} \ No newline at end of file diff --git a/azure-rm/json/devtestlab.parameters.json b/azure-rm/json/devtestlab.parameters.json new file mode 100644 index 0000000..6c33069 --- /dev/null +++ b/azure-rm/json/devtestlab.parameters.json @@ -0,0 +1,51 @@ +{ + "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "newLabName": { + "value": "devopslab" + }, + "timeZoneId": { + "value": "W. Europe Standard Time" + }, + "labVmShutDownTime": { + "value": "21:00" + }, + "maxAllowedVmsPerUser": { + "value": 3 + }, + "maxAllowedVmsPerLab": { + "value": 100 + }, + "vmSize": { + "value": "Standard_B8ms" + }, + "vmStorageType": { + "value": "Standard" + }, + "vmUsername": { + "value": "devopshol" + }, + "vmPassword": { + "value": "ADP#2019" + }, + "offer": { + "value": "visualstudio2019" + }, + "publisher": { + "value": "microsoftvisualstudio" + }, + "sku": { + "value": "vs-2019-comm-win10-n" + }, + "osType": { + "value": "Windows" + }, + "version": { + "value": "latest" + }, + "chocolatey_packages": { + "value": "git,vscode,googlechrome" + } + } +} \ No newline at end of file diff --git a/azure-rm/json/vm.json b/azure-rm/json/vm.json new file mode 100644 index 0000000..be3713e --- /dev/null +++ b/azure-rm/json/vm.json @@ -0,0 +1,138 @@ +{ + "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "newVMName": { + "type": "string", + "metadata": { + "description": "The name of the new vm to be created." + } + }, + "existingLabName": { + "type": "string", + "metadata": { + "description": "The name of an existing lab where the new vm will be created." + } + }, + "offer": { + "type": "string", + "metadata": { + "description": "Offer of the gallery image" + } + }, + "publisher": { + "type": "string", + "metadata": { + "description": "Publisher of the gallery image" + } + }, + "sku": { + "type": "string", + "metadata": { + "description": "Sku of the gallery image" + } + }, + "osType": { + "type": "string", + "metadata": { + "description": "OsType of the gallery image" + } + }, + "version": { + "type": "string", + "defaultValue": "latest", + "metadata": { + "description": "Version of the gallery image" + } + }, + "newVMSize": { + "type": "string", + "metadata": { + "description": "The size of the new vm to be created." + } + }, + "userName": { + "type": "string", + "metadata": { + "description": "The username for the local account that will be created on the new vm." + } + }, + "password": { + "type": "securestring", + "metadata": { + "description": "The password for the local account that will be created on the new vm." + } + }, + "chocolatey_packages": { + "type": "string", + "metadata": { + "description": "The packages that will be installed by chocolatey on the new vm." + } + }, + "chocolatey_allowEmptyChecksums": { + "type": "bool", + "defaultValue": true + }, + "chocolatey_ignoreChecksums": { + "type": "bool", + "defaultValue": true + } + }, + "variables": { + "labSubnetName": "[concat(variables('labVirtualNetworkName'), 'Subnet')]", + "labVirtualNetworkId": "[resourceId('Microsoft.DevTestLab/labs/virtualnetworks', parameters('existingLabName'), variables('labVirtualNetworkName'))]", + "labVirtualNetworkName": "[concat('Dtl', parameters('existingLabName'))]", + "resourceName": "[concat(parameters('existingLabName'), '/', parameters('newVMName'))]", + "resourceType": "Microsoft.DevTestLab/labs/virtualMachines" + }, + "resources": [ + { + "apiVersion": "2018-10-15-preview", + "type": "Microsoft.DevTestLab/labs/virtualMachines", + "name": "[variables('resourceName')]", + "location": "[resourceGroup().location]", + "properties": { + "size": "[parameters('newVMSize')]", + "isAuthenticationWithSshKey": false, + "userName": "[parameters('userName')]", + "sshKey": "", + "password": "[parameters('password')]", + "labVirtualNetworkId": "[variables('labVirtualNetworkId')]", + "labSubnetName": "[variables('labSubnetName')]", + "artifacts": [ + { + "artifactId": "[resourceId('Microsoft.DevTestLab/labs/artifactSources/artifacts', parameters('existingLabName'), 'public repo', 'windows-chocolatey')]", + "parameters": [ + { + "name": "packages", + "value": "[parameters('chocolatey_packages')]" + }, + { + "name": "allowEmptyChecksums", + "value": "[parameters('chocolatey_allowEmptyChecksums')]" + }, + { + "name": "ignoreChecksums", + "value": "[parameters('chocolatey_ignoreChecksums')]" + } + ] + } + ], + "notes": "Visual Studio 2019 Community on Windows 10 Enterprise N (x64)", + "galleryImageReference": { + "Sku": "[parameters('sku')]", + "OsType": "[parameters('osType')]", + "Publisher": "[parameters('publisher')]", + "Offer": "[parameters('offer')]", + "Version": "[parameters('version')]" + } + } + } + ], + "outputs": { + "vmId": { + "type": "string", + "value": "[resourceId(variables('resourceType'), parameters('existingLabName'), parameters('newVMName'))]" + } + } +} \ No newline at end of file diff --git a/azure-rm/json/vm.parameters.json b/azure-rm/json/vm.parameters.json new file mode 100644 index 0000000..040460f --- /dev/null +++ b/azure-rm/json/vm.parameters.json @@ -0,0 +1,39 @@ +{ + "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "newVMName": { + "value": "devopsvm" + }, + "existingLabName": { + "value": "devopslab" + }, + "newVMSize": { + "value": "Standard_B8ms" + }, + "userName": { + "value": "devopshol" + }, + "password": { + "value": "ADP#2019" + }, + "chocolatey_packages": { + "value": "git,vscode,googlechrome" + }, + "offer": { + "value": "visualstudio2019" + }, + "publisher": { + "value": "microsoftvisualstudio" + }, + "sku": { + "value": "vs-2019-comm-win10-n" + }, + "osType": { + "value": "Windows" + }, + "version": { + "value": "latest" + } + } +} \ No newline at end of file From c9a5f15fd8b5e52fb2de5f0b3d448546f50562a6 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Wed, 10 Apr 2019 22:27:10 +0200 Subject: [PATCH 105/168] revert to geuze master --- demos/azure-rm/ProvisionEnvironment.ps1 | Bin 2650 -> 0 bytes demos/azure-rm/json/devtestlab.json | 239 ------------------ .../azure-rm/json/devtestlab.parameters.json | 51 ---- demos/azure-rm/json/vm.json | 138 ---------- demos/azure-rm/json/vm.parameters.json | 39 --- 5 files changed, 467 deletions(-) delete mode 100644 demos/azure-rm/ProvisionEnvironment.ps1 delete mode 100644 demos/azure-rm/json/devtestlab.json delete mode 100644 demos/azure-rm/json/devtestlab.parameters.json delete mode 100644 demos/azure-rm/json/vm.json delete mode 100644 demos/azure-rm/json/vm.parameters.json diff --git a/demos/azure-rm/ProvisionEnvironment.ps1 b/demos/azure-rm/ProvisionEnvironment.ps1 deleted file mode 100644 index 5a7c2d3af49164ff054a852117a7c4e4041607c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2650 zcmd6p&2Q5{5XI+=#Q(5La)5&oaO1!M6~YD5DuteqARlg8ln;|Q4Yc%M2YzoiTRTpj z6c7@!?AW`rGjHa-nfB+8mc6n$*Nppx4J@~F-lulNcWS5H`kk_qnzQHJ4O?I}vy8X< zcF*5U)(`B=dRUIUWzJWMrB3OYd(YZku%h$MzVTe*-*GDC8nP#kEq<5Q=Q&{aoJbK> zhX@nzGaxzUeQp=n2;Txkj_WowiWe{`TJ$m_!!nMZU3x?T_3an}!mf`O@GJIfaOf+u zD#jjpW%kq_+Y@_Mi}1XJ#M#PMGWVE;yg(dt5G#vy{Q@_m8w8Gs@>j5z+n8#X*?Pm- z5mr;Yi?t!Y;%Uq+73ixz|A6)ZS&P{O<;1#m;pYI~Q`S@a>OFnOTbs2xTI=Ecj1!0O z`}ro;6&5Y~Xpc(OOW6Iwdc$7wcFM^m=yG4dYkSDfmCs0w>k3h&B;l`OlC}rFUP9(f zm=5tM%Z~Rv_TH}jQ*{X1-HdVfeCvHnv$4uml*ctScc84>EA+O%Z^{Y~j-W7gs)L=> zD?;2k>Mg#Co~i2Hl@u?pO>D)kW`nc$pmnHAy)M3IzMAseC(6Kc8R{GL+{b#vrG6IY zZO?O5W`k(z?Gt;;bAjz8mh#^7xI>hbuWaohC|lkGigI@QI#|6SjB)D3xwn~LG5s27 zPyWLR&A2epR{UzczE7)F9^<1=7w8K9JDgu_skzEVF@2MJ-?b96PT2x-v6u;ni?^>{$_-}|FkhP zk{wwV_1RU6!m8@|T_uY)*{bgy+i<0de2iKEFp)Y0j-2RjoN( z{7$57>-++Q_3=-9jQ+Z(Bil{#+Q)e4-v5L5g15$+0ZnE7R};08z{ Date: Wed, 10 Apr 2019 22:28:10 +0200 Subject: [PATCH 106/168] update prerequisites to azure portal instructions --- azure-rm/README.md | 7 +- demos/azure-rm/ProvisionEnvironment.ps1 | Bin 0 -> 2650 bytes demos/azure-rm/json/devtestlab.json | 239 ++++++++++++++++++ .../azure-rm/json/devtestlab.parameters.json | 51 ++++ demos/azure-rm/json/vm.json | 138 ++++++++++ demos/azure-rm/json/vm.parameters.json | 39 +++ 6 files changed, 472 insertions(+), 2 deletions(-) create mode 100644 demos/azure-rm/ProvisionEnvironment.ps1 create mode 100644 demos/azure-rm/json/devtestlab.json create mode 100644 demos/azure-rm/json/devtestlab.parameters.json create mode 100644 demos/azure-rm/json/vm.json create mode 100644 demos/azure-rm/json/vm.parameters.json diff --git a/azure-rm/README.md b/azure-rm/README.md index 487e770..3422143 100644 --- a/azure-rm/README.md +++ b/azure-rm/README.md @@ -1,4 +1,4 @@ -# Prerequisites lab - Set up development environment +# Prerequisites lab - Set up your development environment Follow this lab to set up a development environment for the course labs. Creating the environment can take some time, so it is recommended to complete this before attending the course. ## Prepare Azure DevOps and Azure subscription @@ -36,7 +36,10 @@ Follow instructions from [Add a VM to a lab in Azure DevTest Labs](https://docs. - Password: ADP#2019 - Virtual machine size: Standard_B8ms - OS disk type: Standard SSD - - Artifacts selection: Git, Visual Studio Code, Chrome + - Artifacts selection: Install Chocolatey Packages, configuration: + - Packages: git,vscode,googlechrome + - Allow Empty Checksums: true + - Ignore Checksums: true 3. Verify connection to the Virtual Machine - Wait untill the virtual machine is fully provisioned and the artifacts are applied.\ diff --git a/demos/azure-rm/ProvisionEnvironment.ps1 b/demos/azure-rm/ProvisionEnvironment.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..5a7c2d3af49164ff054a852117a7c4e4041607c8 GIT binary patch literal 2650 zcmd6p&2Q5{5XI+=#Q(5La)5&oaO1!M6~YD5DuteqARlg8ln;|Q4Yc%M2YzoiTRTpj z6c7@!?AW`rGjHa-nfB+8mc6n$*Nppx4J@~F-lulNcWS5H`kk_qnzQHJ4O?I}vy8X< zcF*5U)(`B=dRUIUWzJWMrB3OYd(YZku%h$MzVTe*-*GDC8nP#kEq<5Q=Q&{aoJbK> zhX@nzGaxzUeQp=n2;Txkj_WowiWe{`TJ$m_!!nMZU3x?T_3an}!mf`O@GJIfaOf+u zD#jjpW%kq_+Y@_Mi}1XJ#M#PMGWVE;yg(dt5G#vy{Q@_m8w8Gs@>j5z+n8#X*?Pm- z5mr;Yi?t!Y;%Uq+73ixz|A6)ZS&P{O<;1#m;pYI~Q`S@a>OFnOTbs2xTI=Ecj1!0O z`}ro;6&5Y~Xpc(OOW6Iwdc$7wcFM^m=yG4dYkSDfmCs0w>k3h&B;l`OlC}rFUP9(f zm=5tM%Z~Rv_TH}jQ*{X1-HdVfeCvHnv$4uml*ctScc84>EA+O%Z^{Y~j-W7gs)L=> zD?;2k>Mg#Co~i2Hl@u?pO>D)kW`nc$pmnHAy)M3IzMAseC(6Kc8R{GL+{b#vrG6IY zZO?O5W`k(z?Gt;;bAjz8mh#^7xI>hbuWaohC|lkGigI@QI#|6SjB)D3xwn~LG5s27 zPyWLR&A2epR{UzczE7)F9^<1=7w8K9JDgu_skzEVF@2MJ-?b96PT2x-v6u;ni?^>{$_-}|FkhP zk{wwV_1RU6!m8@|T_uY)*{bgy+i<0de2iKEFp)Y0j-2RjoN( z{7$57>-++Q_3=-9jQ+Z(Bil{#+Q)e4-v5L5g15$+0ZnE7R};08z{ Date: Wed, 10 Apr 2019 22:28:49 +0200 Subject: [PATCH 107/168] move devops-project lab functional tests to ui testing lab (#9) * update main introduction * update prerequisites lab * update prerequisites formatting * undo master deletes * resolve conflict * attempt resolve conflict * attempt resolve conflict * update pipeline lab (move functional tests to ui testing lab) * reset pull request * revert to geuze master * revert to geuze master * revert to geuze master * add vs gitignore * update gitignore * update prerequisites to azure portal instructions * remove gitignore * move devops-project lab functional tests to ui testing lab * revert prereqs to geuze master * revert to geuze master --- azure-devops-project/README.md | 25 +++++++++++-------------- ui-testing/README.md | 16 +++++++++++++++- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/azure-devops-project/README.md b/azure-devops-project/README.md index 55b0e8a..bf8578f 100644 --- a/azure-devops-project/README.md +++ b/azure-devops-project/README.md @@ -1,4 +1,4 @@ -# Avanade DevOps HOL - Create a CI/CD pipeline for .NET with the Azure DevOps Project +# Continuous Integration with Azure DevOps In this lab, we setup our DevOps Project in Azure to create our CI/CD pipeline. This will provide us with a standard code base to work with. @@ -25,25 +25,22 @@ Based on [this](https://docs.microsoft.com/en-us/azure/devops-project/azure-devo - Update all NuGet packages to their 2.x counterparts (Right-click project > Manage NuGet packages > Select all packages > Update) - Add NuGet package to the web project: "Microsoft.NET.Sdk.Razor" -1. Add the following NuGet packages to the **FunctionalTests** project: - - Selenium.Support - - Selenium.WebDriver - - Selenium.Chrome.WebDriver - -1. We need to ensure that the Selenium Chrome driver executable will be copied to the output during publishing. Edit your **FunctionalTests** project file and add the following: - ```xml - - true - - ``` - 1. Unload the web project and unit test project. Make the following change to both project files: - Remove the line ```xml $(PackageTargetFallback);portable-net45+win8+wp8+wpa81; ``` -1. Reload all the projects, build your solution and run the unit tests. Make sure that the tests pass +1. Set the functional tests to be ignored (this will be enabled in another lab).\ +In the **FunctionalTests** project, make the following change: + ```csharp + SampleFunctionalTests.cs + + [Ignore] // <-- ignore test + public void SampleFunctionalTest1() + ``` + +1. Reload all the projects, build your solution and run the unit tests. Make sure that the **unit tests** pass 1. Open the folder "ArmTemplates" in your source, and edit the file "linux-webapp-template.json": - Change the dotnetcore version to 2.1: diff --git a/ui-testing/README.md b/ui-testing/README.md index 7efaac9..2147175 100644 --- a/ui-testing/README.md +++ b/ui-testing/README.md @@ -16,6 +16,20 @@ Based on the following tutorials: ## Tasks for local UI Testing +1. Remove the sample test (SampleFunctionalTests.cs) from the **FunctionalTests** project if it exists + +1. Add the following NuGet packages to the **FunctionalTests** project: + - Selenium.Support + - Selenium.WebDriver + - Selenium.Chrome.WebDriver + +1. We need to ensure that the Selenium Chrome driver executable will be copied to the output during publishing. Edit your **FunctionalTests** project file and add the following: + ```xml + + true + + ``` + 1. Modify the .runsettings file if it already exists, or add a new .runsettings file with the following content:
Click here to view the contents @@ -137,7 +151,7 @@ Based on the following tutorials: ```
-1. Remove SampleFunctionalTests from the project if it exists, and add a new class UITests to the **FunctionalTests** project. +1. Add a new class UITests to the **FunctionalTests** project.
Click here to view the code ```csharp From 641040cf424998c951a15748011bc6c45349ed11 Mon Sep 17 00:00:00 2001 From: JW Kroes <49476606+janwkroes@users.noreply.github.com> Date: Wed, 10 Apr 2019 22:30:57 +0200 Subject: [PATCH 108/168] update prerequisites to azure portal instructions (#10) * update main introduction * update prerequisites lab * update prerequisites formatting * undo master deletes * resolve conflict * attempt resolve conflict * attempt resolve conflict * update pipeline lab (move functional tests to ui testing lab) * reset pull request * revert to geuze master * revert to geuze master * revert to geuze master * update prerequisites to azure portal instructions * add vs gitignore * remove gitignore * update prerequisites to azure portal instructions --- azure-rm/README.md | 82 ++++++++---------- .../azure-rm}/ProvisionEnvironment.ps1 | Bin .../azure-rm}/json/devtestlab.json | 0 .../azure-rm}/json/devtestlab.parameters.json | 0 {azure-rm => demos/azure-rm}/json/vm.json | 0 .../azure-rm}/json/vm.parameters.json | 0 6 files changed, 38 insertions(+), 44 deletions(-) rename {azure-rm => demos/azure-rm}/ProvisionEnvironment.ps1 (100%) rename {azure-rm => demos/azure-rm}/json/devtestlab.json (100%) rename {azure-rm => demos/azure-rm}/json/devtestlab.parameters.json (100%) rename {azure-rm => demos/azure-rm}/json/vm.json (100%) rename {azure-rm => demos/azure-rm}/json/vm.parameters.json (100%) diff --git a/azure-rm/README.md b/azure-rm/README.md index 040a8f8..3422143 100644 --- a/azure-rm/README.md +++ b/azure-rm/README.md @@ -1,11 +1,16 @@ -# Avanade DevOps HOL - Prerequisites - Set up your development environment with PowerShell and ARM -If you are taking the Avanade DevOps Practitioners course, then the following are pre-requisites for the beginning of the course. The pre-requisites are straightforward but a few of the tasks take some time so doing this before the class will save time during the course and allow you to get the maximum value from the class. +# Prerequisites lab - Set up your development environment +Follow this lab to set up a development environment for the course labs. Creating the environment can take some time, so it is recommended to complete this before attending the course. -## Preparing your Azure subscription +## Prepare Azure DevOps and Azure subscription -Make sure your Azure subscription is enabled and you can log in and create resources. Visit the [Azure Portal](https://portal.azure.com) to verify. +1. Make sure you have an active Azure DevOps account.\ +[Sign up for Azure DevOps](https://dev.azure.com/) + +2. Make sure you have an active Azure subscription.\ +Sign in to the [Azure Portal](https://portal.azure.com) to verify you can log in and create resources.\ +If you used a (Avanade) organization MDSN account, go to the next step. -If you are using your Avanade email to access the Azure portal, then you will need to create a new Active Directory instance. This is because the labs require creating an enterprise application id and individual users do not have permissions to create enterprise applications on the Avanade AD instance. +3. (only for organization accounts) If you are using your Avanade email to access the Azure portal, then you will need to create a new Active Directory instance. This is because the labs require creating an enterprise application id and individual users do not have permissions to create enterprise applications on the Avanade AD instance. - In the [Azure Portal](https://portal.azure.com), *Create a Resource* of *Azure Active Directory* with a meaningful name. This is probably something you will use as a general purpose AD instance (i.e. not just for the class) so you may want to name it appropriately. @@ -14,44 +19,33 @@ If you are using your Avanade email to access the Azure portal, then you will ne - On the Subscriptions' Overview panel, choose the -> Change directory link and select the new AD instance that you just created. - For more information, you can reference [Associate an existing subscription to your Azure AD directory](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-how-subscriptions-associated-directory#to-associate-an-existing-subscription-to-your-azure-ad-directory) -## Preparing a Development environment - -1. Make sure you have an active Azure DevOps account.
-[Sign up for Azure DevOps](https://dev.azure.com/) - -2. Verify that PowerShell v5+ is installed along with the AzureRM modules. - - Install-Module Powershellget -Force - - Install-Module -Name AzureRm -AllowClobber - - Import-Module -Name AzureRM - -3. Using an Azure development environment is strongly encouraged. This avoids conflicts with your existing development environment. Complete the steps listed below in the [Azure Development Environment](#azure-development-environment). - -4. Complete the [Getting Started](getting-started/README.md) lab. This will make sure that your environment is correctly configured and ready to execute the remaining labs in the course. - -5. Configure a private Build/Release agent from the [Private Agent](private-agent/README.md) lab. - -## Set up the Azure Development Environment -You can either configure an Azure development environment on your own or use the PowerShell script provided by this lab. This will create a DevTestLab in a new Azure Resource Group and then configure an Azure VM with Windows 10 and the latest Visual Studio Community edition. It will also use Chocolatey to install a collection of other tools and applications. - ->**Note:** Not all VM SKUs are available in every region. You can get the list of SKUs in a particular location with the following PowerShell commands. -```PowerShell -$locName="South Central US" -Get-AzureRMVMImageSku -Location $locName -Publisher "MicrosoftVisualStudio" -Offer "VisualStudio" | Select Skus -``` - -To start setting up your environment, follow these steps: - -1. Clone this repository or download the [azure-rm](../azure-rm) folder and extract the files on your system. - -1. Open **ProvisionEnvironment.ps1** and modify the following lines of PowerShell code in the top of the file: - ```PowerShell - $subscriptionName = "Services" # Change to the name of your azure subscription - $ResourceGroupName = "adp2019" # Change if you want to name the resource group differently - ``` - -1. Then open a PowerShell console in the same folder and execute the file: .\ProvisionEnvironment.ps1 - -1. Watch how the script will create your required resources in Azure. **The process may take 20 minutes.** +## Prepare development environment + +1. Create a DevTest lab\ +Follow instructions from [Create a lab in Azure DevTest Labs](https://docs.microsoft.com/azure/lab-services/devtest-lab-create-lab). Ensure the following settings: + - Lab name: devopslab + - Resource group: devopslab (new) + - Location: West Europe + - Auto-shutdown: default (Enabled, 19:00) + +2. Add a Virtual Machine to your DevTest lab\ +Follow instructions from [Add a VM to a lab in Azure DevTest Labs](https://docs.microsoft.com/azure/lab-services/devtest-lab-add-vm). Ensure the following settings: + - Choose a base: Visual Studio 2019 Community on Windows 10 Enterprise N (x64) + - Virtual machine name: devopsvm + - User name: devopshol + - Password: ADP#2019 + - Virtual machine size: Standard_B8ms + - OS disk type: Standard SSD + - Artifacts selection: Install Chocolatey Packages, configuration: + - Packages: git,vscode,googlechrome + - Allow Empty Checksums: true + - Ignore Checksums: true + +3. Verify connection to the Virtual Machine + - Wait untill the virtual machine is fully provisioned and the artifacts are applied.\ + *(this can take up to 20 minutes)* + - Verify you can use the virtual machine by connecting to it:\ + Select 'Connect' in the Virtual machine Overview in the portal and provide the credentials you used in the previous step. ## Next steps -Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file +Return to the [Lab index](../README.md) to continue with the course labs. \ No newline at end of file diff --git a/azure-rm/ProvisionEnvironment.ps1 b/demos/azure-rm/ProvisionEnvironment.ps1 similarity index 100% rename from azure-rm/ProvisionEnvironment.ps1 rename to demos/azure-rm/ProvisionEnvironment.ps1 diff --git a/azure-rm/json/devtestlab.json b/demos/azure-rm/json/devtestlab.json similarity index 100% rename from azure-rm/json/devtestlab.json rename to demos/azure-rm/json/devtestlab.json diff --git a/azure-rm/json/devtestlab.parameters.json b/demos/azure-rm/json/devtestlab.parameters.json similarity index 100% rename from azure-rm/json/devtestlab.parameters.json rename to demos/azure-rm/json/devtestlab.parameters.json diff --git a/azure-rm/json/vm.json b/demos/azure-rm/json/vm.json similarity index 100% rename from azure-rm/json/vm.json rename to demos/azure-rm/json/vm.json diff --git a/azure-rm/json/vm.parameters.json b/demos/azure-rm/json/vm.parameters.json similarity index 100% rename from azure-rm/json/vm.parameters.json rename to demos/azure-rm/json/vm.parameters.json From 1bccd6cff7767317ea2667642947f0eb971ad11c Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Thu, 11 Apr 2019 09:36:18 +0200 Subject: [PATCH 109/168] update ui testing to work with visual studio test task --- ui-testing/README.md | 114 +++++++++++++++++-------------------------- 1 file changed, 45 insertions(+), 69 deletions(-) diff --git a/ui-testing/README.md b/ui-testing/README.md index 2147175..f27ce4d 100644 --- a/ui-testing/README.md +++ b/ui-testing/README.md @@ -1,50 +1,52 @@ -# Avanade DevOps HOL - UI Testing +# UI Testing with Selenium and Azure DevOps -In this lab, we will add ui tests to our test project. +This lab contains instructions to create automated functional UI tests.\ +The instructions are based on the following documentation: -Based on the following tutorials: - -- [Get started with Selenium testing in a CD pipeline](https://docs.microsoft.com/en-us/vsts/build-release/test/continuous-test-selenium) -- Documentation on [dotnet vstest](https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-vstest) +- [UI test with Selenium](https://docs.microsoft.com/azure/devops/pipelines/test/continuous-test-selenium) +- [dotnet vstest](https://docs.microsoft.com/dotnet/core/tools/dotnet-vstest) ## Prerequisites -- The [Azure Devops Project](../azure-devops-project/README.md) lab. -- A Virtual Machine on Azure. Follow [prerequisites](../getting-started/README.md) to set it up. -- Set up a private VSTS agent using [this tutorial](../private-agent/README.md). -- Optional: complete [Feature Flag](../feature-flag/README.md) lab. +- Complete lab: [Continuous Integration with Azure DevOps](../azure-devops-project/README.md) +- Complete lab: [Multi-stage deployments with Azure DevOps](../multi-stage-deployments/README.md) -## Tasks for local UI Testing +## Configure local UI Testing -1. Remove the sample test (SampleFunctionalTests.cs) from the **FunctionalTests** project if it exists +1. In the **FunctionalTests** project, remove the sample test (SampleFunctionalTests.cs) if it exists -1. Add the following NuGet packages to the **FunctionalTests** project: +1. On the **FunctionalTests** project, add the following NuGet packages: - Selenium.Support - Selenium.WebDriver - - Selenium.Chrome.WebDriver + - Selenium.WebDriver.ChromeDriver -1. We need to ensure that the Selenium Chrome driver executable will be copied to the output during publishing. Edit your **FunctionalTests** project file and add the following: +1. Ensure the Selenium Chrome driver executable is copied to the output during publish. On the **FunctionalTests** project, edit the project file and add the following: ```xml true ``` -1. Modify the .runsettings file if it already exists, or add a new .runsettings file with the following content: -
Click here to view the contents +1. In the **FunctionalTests** project, (modify or) create a .runsettings file containing the siteUrl as parameter. Find the local website port in the website project *(aspnet-core-dotnet-core\Properties\launchSettings.json)* and create: + +
functionalTests.runsettings (expand to view code) ```xml - + ```
-1. Add folder PageObjects and add classes for all the pages to the **FunctionalTests** project. - -
Code for BasePage +1. Configure Visual Studio to use the .runsettings file using:\ +[Configure unit tests by using a .runsettings file](https://docs.microsoft.com/visualstudio/test/configure-unit-tests-by-using-a-dot-runsettings-file) + +1. In the **FunctionalTests** project, add functional test classes for all pages.\ +Add a folder 'PageObjects' and add the following classes to it. + -
BasePage.cs (expand to view code) ```csharp using OpenQA.Selenium; @@ -84,7 +86,7 @@ Based on the following tutorials: ```
- -
Code for Home page + -
HomePage.cs (expand to view code) ```csharp using OpenQA.Selenium; @@ -105,7 +107,7 @@ Based on the following tutorials: ```
- -
Code for About page + -
AboutPage.cs (expand to view code) ```csharp using OpenQA.Selenium; @@ -128,7 +130,7 @@ Based on the following tutorials: ```
- -
Code for Contact page + -
ContactPage.cs (expand to view code) ```csharp using OpenQA.Selenium; @@ -151,8 +153,8 @@ Based on the following tutorials: ```
-1. Add a new class UITests to the **FunctionalTests** project. -
Click here to view the code +1. In the **FunctionalTests** project, create the following test class for the functional UI tests: + -
UITests.cs (expand to view code) ```csharp using Microsoft.VisualStudio.TestTools.UnitTesting; @@ -239,57 +241,31 @@ Based on the following tutorials: ```
-1. Configure Visual Studio to [use the .runsettings](https://docs.microsoft.com/en-us/visualstudio/test/configure-unit-tests-by-using-a-dot-runsettings-file) file - -1. Start your website, so that it's running on the url that you specified in the .runsettings file - -1. Run the UI test and make sure that it succeeds - -## Tasks for UI Testing in the Staging environment - -1. Edit your Build Definition, to use a different Agent Pool: - - - Change the Agent Pool to "Hosted Windows 2019 with VS2019". The default Linux Agent does not seem to handle .exe files, as the extension is stripped from those files during publishing. - -1. Edit your Release Definition, QA environment - - Change the Agent Pool to "Hosted Windows 2019 with VS2019". We need a windows agent here in order to use ChromeDriver.exe +1. Start your website once (using IIS Express settings) by debugging it, and then stop the debugger. This will ensure the website will be running in the local IIS Express instance, on the url specified in the .runsettings file. - - Add task: [Replace Tokens (by Guillaume Rouchon)](https://marketplace.visualstudio.com/items?itemName=qetza.replacetokens&targetId=af3daf82-7dfb-457e-a101-fb27736d03ca) (You'll need to add this to your organization, then re-open the Editor to add this task type) - - Root directory: $(System.DefaultWorkingDirectory)/Drop/drop/FunctionalTests - - Target files: **/*.runsettings +1. Run the UI tests you just created and make sure that it succeeds. - - Add task: .NET Core - - Command: custom - - Custom command: vstest - - Arguments (Replace the .dll with your own, if the project was named otherwise): - ``` - aspnet-core-dotnet-core.FunctionalTests.dll --logger:"trx;LogFileName=functionalTestsResults.trx" --Settings:$(System.DefaultWorkingDirectory)/Drop/drop/FunctionalTests/release.runsettings --ResultsDirectory:. - ``` +## Configure automated UI Testing (on the staging environment) - - Add task: Publish Test Results - - Test result format: VSTest - - Test results files: **/*.trx - - Search folder: $(System.DefaultWorkingDirectory)/Drop/drop/FunctionalTests - - - - Go to the Variables tab, add variable "SiteUrl" with Scope "Staging" and url "https://\-staging.azurewebsites.net" +1. The UI Test tasks are Windows based, which requires a Windows agent.\ +In the **Azure DevOps** project, in the **Build** and in the **Release - QA stage**, change the agent jobs to run on the agent **'Hosted Windows 2019 with VS2019'** -1. Add new file release.runsettings to the **FunctionalTests** project, with "Copy to Output directory" set to "Copy always". Notice the different value of the parameter. This is a token that will be replaced by an actual Url during the Release in Azure DevOps. -
Click here to view the contents +1. In the Azure DevOps **Release**, configure a variable for the website url on the staging environment. +Edit the release, go to Variables, and add the variable: +- *Name:* SiteUrl +- *Value:* https://\.azurewebsites.net +- *Scope:* QA stage name - ```xml - - - - - - - ``` -
+1. In the Azure DevOps **Release**, include a task to run the functional UI tests.\ +Add a task of type Test - **Visual Studio Test**, and ensure it includes: +- *Test files:* **\\*FunctionalTest\*.dll +- *Settings file:* ../drop/../functionalTests.runsettings +- *Override test run parameters:* -siteUrl $(SiteUrl) -1. Commit your code to trigger a build and release +1. Commit your code to trigger a **Build**, followed by a **Release** -1. Upon Release completion, review the Test results and the uploaded screenshots +1. Upon **Release** completion, review the Test results ## Stretch goals @@ -297,4 +273,4 @@ Based on the following tutorials: 1. Upload the Test screenshots to Azure DevOps. https://stackoverflow.com/questions/52823650/selenium-screenshots-in-vsts-azure-devops ## Next steps -Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file +Return to the [Lab index](../README.md) and continue with the next lab \ No newline at end of file From 7ec3517fc682bb6db3a892324d5c35f1fdb4c310 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Thu, 11 Apr 2019 09:40:31 +0200 Subject: [PATCH 110/168] fix formatting --- ui-testing/README.md | 160 +++++++++++++++++++++---------------------- 1 file changed, 80 insertions(+), 80 deletions(-) diff --git a/ui-testing/README.md b/ui-testing/README.md index f27ce4d..ad351aa 100644 --- a/ui-testing/README.md +++ b/ui-testing/README.md @@ -46,116 +46,116 @@ The instructions are based on the following documentation: 1. In the **FunctionalTests** project, add functional test classes for all pages.\ Add a folder 'PageObjects' and add the following classes to it. - -
BasePage.cs (expand to view code) +
BasePage.cs (expand to view code) - ```csharp - using OpenQA.Selenium; + ```csharp + using OpenQA.Selenium; - abstract class BasePage - { - protected readonly IWebDriver Driver; - protected readonly string BaseUrl; + abstract class BasePage + { + protected readonly IWebDriver Driver; + protected readonly string BaseUrl; - protected BasePage(IWebDriver driver, string baseUrl) - { - Driver = driver; - BaseUrl = baseUrl; - } + protected BasePage(IWebDriver driver, string baseUrl) + { + Driver = driver; + BaseUrl = baseUrl; + } - public HomePage GoToHomePage() - { - var home = Driver.FindElement(By.LinkText("Home")); - home.Click(); - return new HomePage(Driver, BaseUrl); - } + public HomePage GoToHomePage() + { + var home = Driver.FindElement(By.LinkText("Home")); + home.Click(); + return new HomePage(Driver, BaseUrl); + } - public AboutPage GoToAboutPage() - { - var about = Driver.FindElement(By.LinkText("About")); - about.Click(); - return new AboutPage(Driver, BaseUrl); - } + public AboutPage GoToAboutPage() + { + var about = Driver.FindElement(By.LinkText("About")); + about.Click(); + return new AboutPage(Driver, BaseUrl); + } - public ContactPage GoToContactPage() - { - var contact = Driver.FindElement(By.LinkText("Contact")); - contact.Click(); - return new ContactPage(Driver, BaseUrl); - } + public ContactPage GoToContactPage() + { + var contact = Driver.FindElement(By.LinkText("Contact")); + contact.Click(); + return new ContactPage(Driver, BaseUrl); } - ``` -
+ } + ``` +
- -
HomePage.cs (expand to view code) +
HomePage.cs (expand to view code) - ```csharp - using OpenQA.Selenium; + ```csharp + using OpenQA.Selenium; - class HomePage : BasePage + class HomePage : BasePage + { + public HomePage(IWebDriver driver, string baseUrl) : base(driver, baseUrl) { - public HomePage(IWebDriver driver, string baseUrl) : base(driver, baseUrl) - { - } + } - public string Title { get; set; } + public string Title { get; set; } - public void GoToPage() - { - Driver.Navigate().GoToUrl($"{BaseUrl}"); - } + public void GoToPage() + { + Driver.Navigate().GoToUrl($"{BaseUrl}"); } - ``` -
+ } + ``` +
- -
AboutPage.cs (expand to view code) +
AboutPage.cs (expand to view code) - ```csharp - using OpenQA.Selenium; - using OpenQA.Selenium.Support.PageObjects; + ```csharp + using OpenQA.Selenium; + using OpenQA.Selenium.Support.PageObjects; - class AboutPage : BasePage + class AboutPage : BasePage + { + public AboutPage(IWebDriver driver, string baseUrl) : base(driver, baseUrl) { - public AboutPage(IWebDriver driver, string baseUrl) : base(driver, baseUrl) - { - } + } - [FindsBy(How = How.ClassName, Using = "fusion-main-menu-icon")] - private IWebElement searchIcon; + [FindsBy(How = How.ClassName, Using = "fusion-main-menu-icon")] + private IWebElement searchIcon; - public void GoToPage() - { - Driver.Navigate().GoToUrl($"{BaseUrl}/Home/About"); - } + public void GoToPage() + { + Driver.Navigate().GoToUrl($"{BaseUrl}/Home/About"); } - ``` -
+ } + ``` +
- -
ContactPage.cs (expand to view code) +
ContactPage.cs (expand to view code) - ```csharp - using OpenQA.Selenium; - using OpenQA.Selenium.Support.PageObjects; + ```csharp + using OpenQA.Selenium; + using OpenQA.Selenium.Support.PageObjects; - class ContactPage : BasePage + class ContactPage : BasePage + { + public ContactPage(IWebDriver driver, string baseUrl) : base(driver, baseUrl) { - public ContactPage(IWebDriver driver, string baseUrl) : base(driver, baseUrl) - { - } + } - [FindsBy(How = How.ClassName, Using = "fusion-main-menu-icon")] - private IWebElement searchIcon; + [FindsBy(How = How.ClassName, Using = "fusion-main-menu-icon")] + private IWebElement searchIcon; - public void GoToPage() - { - Driver.Navigate().GoToUrl($"{BaseUrl}/Home/Contact"); - } + public void GoToPage() + { + Driver.Navigate().GoToUrl($"{BaseUrl}/Home/Contact"); } - ``` -
+ } + ``` +
1. In the **FunctionalTests** project, create the following test class for the functional UI tests: - -
UITests.cs (expand to view code) - +
UITests.cs (expand to view code) + ```csharp using Microsoft.VisualStudio.TestTools.UnitTesting; using OpenQA.Selenium; From 00078dbfd638fceb5f75e854213b44baf2452076 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Thu, 11 Apr 2019 09:46:37 +0200 Subject: [PATCH 111/168] fix formatting --- ui-testing/README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/ui-testing/README.md b/ui-testing/README.md index ad351aa..b3e36bf 100644 --- a/ui-testing/README.md +++ b/ui-testing/README.md @@ -251,21 +251,22 @@ Add a folder 'PageObjects' and add the following classes to it. 1. The UI Test tasks are Windows based, which requires a Windows agent.\ In the **Azure DevOps** project, in the **Build** and in the **Release - QA stage**, change the agent jobs to run on the agent **'Hosted Windows 2019 with VS2019'** -1. In the Azure DevOps **Release**, configure a variable for the website url on the staging environment. +2. In the Azure DevOps **Release**, configure a variable for the website url on the staging environment. Edit the release, go to Variables, and add the variable: - *Name:* SiteUrl -- *Value:* https://\.azurewebsites.net +- *Value:* [https://\.azurewebsites.net] - *Scope:* QA stage name -1. In the Azure DevOps **Release**, include a task to run the functional UI tests.\ +3. In the Azure DevOps **Release**, include a task to run the functional UI tests.\ Add a task of type Test - **Visual Studio Test**, and ensure it includes: + - *Test files:* **\\*FunctionalTest\*.dll - *Settings file:* ../drop/../functionalTests.runsettings - *Override test run parameters:* -siteUrl $(SiteUrl) -1. Commit your code to trigger a **Build**, followed by a **Release** +4. Commit your code to trigger a **Build**, followed by a **Release** -1. Upon **Release** completion, review the Test results +5. Upon **Release** completion, review the Test results ## Stretch goals From 69c675c91c4bcc0f186010619942e17b441141e0 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Thu, 11 Apr 2019 09:47:53 +0200 Subject: [PATCH 112/168] fix formatting --- ui-testing/README.md | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/ui-testing/README.md b/ui-testing/README.md index b3e36bf..8ee8db5 100644 --- a/ui-testing/README.md +++ b/ui-testing/README.md @@ -251,22 +251,21 @@ Add a folder 'PageObjects' and add the following classes to it. 1. The UI Test tasks are Windows based, which requires a Windows agent.\ In the **Azure DevOps** project, in the **Build** and in the **Release - QA stage**, change the agent jobs to run on the agent **'Hosted Windows 2019 with VS2019'** -2. In the Azure DevOps **Release**, configure a variable for the website url on the staging environment. +1. In the Azure DevOps **Release**, configure a variable for the website url on the staging environment. Edit the release, go to Variables, and add the variable: -- *Name:* SiteUrl -- *Value:* [https://\.azurewebsites.net] -- *Scope:* QA stage name + - *Name:* SiteUrl + - *Value:* [https://\.azurewebsites.net] + - *Scope:* QA stage name -3. In the Azure DevOps **Release**, include a task to run the functional UI tests.\ +1. In the Azure DevOps **Release**, include a task to run the functional UI tests.\ Add a task of type Test - **Visual Studio Test**, and ensure it includes: + - *Test files:* **\\*FunctionalTest\*.dll + - *Settings file:* ../drop/../functionalTests.runsettings + - *Override test run parameters:* -siteUrl $(SiteUrl) -- *Test files:* **\\*FunctionalTest\*.dll -- *Settings file:* ../drop/../functionalTests.runsettings -- *Override test run parameters:* -siteUrl $(SiteUrl) +1. Commit your code to trigger a **Build**, followed by a **Release** -4. Commit your code to trigger a **Build**, followed by a **Release** - -5. Upon **Release** completion, review the Test results +1. Upon **Release** completion, review the Test results ## Stretch goals From cb3e8ebf188e7e76b7d4950cecef6e220ebcb173 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Thu, 11 Apr 2019 10:09:12 +0200 Subject: [PATCH 113/168] update intro and prereqs --- sonarqube/README.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/sonarqube/README.md b/sonarqube/README.md index dd4e5a1..05fdb1e 100644 --- a/sonarqube/README.md +++ b/sonarqube/README.md @@ -1,15 +1,14 @@ -# Avanade DevOps HOL - Analysis with SonarQube +# Static code analysis with SonarQube -In this lab, we enable SonarQube for analysis of our code. +This lab contains instructions to enable automated code analysis using SonarQube.\ +The instructions are based on the following documentation: -Based on [this](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Extension+for+VSTS-TFS) tutorial. +- [Analyzing with SonarQube Extension for VSTS-TFS](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Extension+for+VSTS-TFS) ## Prerequisites -- Complete [Continuous Deployment with Visual Studio Release Management](../continuous-deployment/README.md) lab with a private agent. -- Your VSTS Agent Machine needs Java 8 installed, because the VSTS SonarQube Extension has that [requirement](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Extension+for+VSTS-TFS). -- SonarQube server installed and configured. For the purposes of the Avanade DevOps class, the address and login for the SonarQube server to be used will be supplied by the instructor. If you are doing this lab on your own, use the Azure portal to create a SonarQube server using the "SonarQube Certified by Bitnami" template from the marketplace. -- Install the [SonarQube extension](https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarqube) into your VSTS environment. +- Complete lab: [Continuous Integration with Azure DevOps](../azure-devops-project/README.md) +- Complete lab: [Multi-stage deployments with Azure DevOps](../multi-stage-deployments/README.md) ## Tasks From ea0b6c2526eabd09c3878e3de8b1d45d5de32ca6 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Thu, 11 Apr 2019 13:13:23 +0200 Subject: [PATCH 114/168] update sonarqube instructions to container instance --- sonarqube/README.md | 104 +++++++++++++++++++++++++++----------------- 1 file changed, 63 insertions(+), 41 deletions(-) diff --git a/sonarqube/README.md b/sonarqube/README.md index 05fdb1e..ea6b088 100644 --- a/sonarqube/README.md +++ b/sonarqube/README.md @@ -10,53 +10,75 @@ The instructions are based on the following documentation: - Complete lab: [Continuous Integration with Azure DevOps](../azure-devops-project/README.md) - Complete lab: [Multi-stage deployments with Azure DevOps](../multi-stage-deployments/README.md) -## Tasks - -1. For the class, the instructor will provide you with a project name and token. If doing this lab with your own server, create a new project and save away the token for use in the next steps. - -1. Edit your build definition and add task "Prepare analysis on SonarQube" before any Msbuild or VSBuild task. - - Install SonarQube extension from marketplace if the task is not yet available on your VSTS account - - Add a new SonarQube service endpoint if you don't have one yet (Use the saved Token or token provided by the instructor) - - Enter the saved Project Key and make up a name for your Project - - Under Advanced, use the following additional properties: - - sonar.exclusions=wwwroot/lib/** - - d:sonar.login="\" - -1. Add task "Run Code Analysis" and "Publish Quality Gate Result" to your build. - -1. Reorder the tasks to respect the following order: - - Prepare Analysis task before any MSBuild or Visual Studio Build task - - Run Code Analysis task after the Visual Studio Test task - - Publish Quality Gate Result task after the Run Code Analysis task - -1. Save the build, do not queue it. - -1. Edit your Web Application's Project file (csproj) and add a ProjectGuid. This is a workaround for the SonarQube runner to work with dotnet core projects, because the dotnet build task will come up with the following warning: "```The project does not have a valid ProjectGuid. Analysis results for this project will not be uploaded to SonarQube```". - -
Click here for the project file change - - ```xml - - netcoreapp2.0 - - ... - - c1182fc3-8c56-4d10-b550-965843e9e9b4 - - ``` -
- -1. Once the project file is updated, push these changes to queue the next build. - -1. When the build process has finished, open the latest build and click on "Detailed SonarQube report" in the build Summary tab. Review the project analysis on the SonarQube site. +## Create a SonarQube instance and project + +1. Using the [Azure Portal](https://portal.azure.com), create a SonarQube container instance. Follow instructions from\ +[Quickstart: Deploy a container instance in Azure using the Azure portal](https://docs.microsoft.com/azure/container-instances/container-instances-quickstart-portal)\ +Ensure the following settings: + - *Container name:* sonarqube-aci + - *Container image:* sonarqube + - *Resource group:* sonarqube-rg (new) + - *DNS name label:* sonar\ + - *Port:* 9000 + +1. When provisioning is complete, create a project in SonarQube: + - Visit the SonarQube instance at\ +*http:\//sonar\.\.azurecontainer.io:9000* + - Login using the default credentials (admin/admin) + - Under Projects, select Create new project. Ensure the following settings: + - *Project key:* devopshol + - *Display name:* devopshol + - Generate a token for access to the project on the next page.\ +*NOTE: store the token somewhere, it is needed in the next steps to configure the Release** + +## Configure SonarQube analysis on the CI Build + +1. Add the SonarQube analysis tasks to the **Build**: + - Edit the CI **Build** + - Add the following SonarQube tasks **before** the Build task: + - Prepare analysis on SonarQube. Ensure the following settings: + - SonarQube Server Endpoint: *(new)* + - *Connection name:* 'sonarqube \' + - *Server Url:* \ + - *Token*: \ + - Project Key: \ + - Project Name: \ + - Add the following SonarQube tasks **after** the Build task: + - Run Code Analysis + - Publish Quality Gate Result + - Save the build, do not queue it + +1. Add a project guid to the **Website** project.\ +*This is a workaround for the SonarQube runner to work with dotnet core projects.\ +Otherwise, the dotnet build task will have an error similar to:*\ +```No analysable projects were found. SonarQube analysis will not be performed. Check the build summary report for details.```\ +Edit the project file (\.csproj), and ensure the *ProjectGuid* property is present: + +
<websiteprojectname>.csproj (expand to view code) + + ```xml + + c1182fc3-8c56-4d10-b550-965843e9e9b4 + + ``` +
+ +1. Commit and push the project file changes, to queue a build. + +1. When finished, inspect the SonarQube results for the build: + - Check the build Summary tab + - Inspect the status in the section **SonarQube Analysis Report** + - Open the SonarQube project results by following the **Detailed SonarQube report** link. + - Review the code analysis outcome in the SonarQube project results ## Stretch goals -1. Install 'SonarLint for Visual Studio 2017' via 'Tools/Extensions and Updates...' -2. Configure your Sonar server via Team Explorer/SonarQube +1. Install 'SonarLint for Visual Studio 2017' via 'Tools - Extensions and Updates...' +2. Configure your Sonar server via Team Explorer - SonarQube 3. Build your application and see the Sonar issues appear in the Error List of Visual Studio 4. Mark an issue in SonarQube as false positive and rebuild your application 5. Resolve technical debt or issues reported by SonarQube 6. Set up own SonarQube server to use in this lab using Bitnami ## Next steps -Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file +Return to the [Lab index](../README.md) and continue with the next lab \ No newline at end of file From 000b5e6ed2fd68f2c74fd84a998ff773ed81fdc4 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Thu, 11 Apr 2019 13:14:19 +0200 Subject: [PATCH 115/168] fix formatting --- sonarqube/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sonarqube/README.md b/sonarqube/README.md index ea6b088..e5c53c5 100644 --- a/sonarqube/README.md +++ b/sonarqube/README.md @@ -29,7 +29,7 @@ Ensure the following settings: - *Project key:* devopshol - *Display name:* devopshol - Generate a token for access to the project on the next page.\ -*NOTE: store the token somewhere, it is needed in the next steps to configure the Release** +*NOTE: store the token somewhere, it is needed in the next steps to configure the Release* ## Configure SonarQube analysis on the CI Build From cab695382be9b72b01d2be282f67019944660872 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Thu, 11 Apr 2019 13:16:43 +0200 Subject: [PATCH 116/168] fix formatting --- sonarqube/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sonarqube/README.md b/sonarqube/README.md index e5c53c5..a4d29f6 100644 --- a/sonarqube/README.md +++ b/sonarqube/README.md @@ -25,10 +25,10 @@ Ensure the following settings: - Visit the SonarQube instance at\ *http:\//sonar\.\.azurecontainer.io:9000* - Login using the default credentials (admin/admin) - - Under Projects, select Create new project. Ensure the following settings: + - Under Projects, select **Create new project**. Ensure the following settings: - *Project key:* devopshol - *Display name:* devopshol - - Generate a token for access to the project on the next page.\ + - On the resulting project page, select **Generate** to generate a project token.\ *NOTE: store the token somewhere, it is needed in the next steps to configure the Release* ## Configure SonarQube analysis on the CI Build From cb8a45634dceca182d92bcb3d4efeea15d08c4d4 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Thu, 11 Apr 2019 13:17:18 +0200 Subject: [PATCH 117/168] formatting --- sonarqube/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sonarqube/README.md b/sonarqube/README.md index a4d29f6..9c25bdf 100644 --- a/sonarqube/README.md +++ b/sonarqube/README.md @@ -22,7 +22,7 @@ Ensure the following settings: - *Port:* 9000 1. When provisioning is complete, create a project in SonarQube: - - Visit the SonarQube instance at\ + - **Visit** the **SonarQube** instance at\ *http:\//sonar\.\.azurecontainer.io:9000* - Login using the default credentials (admin/admin) - Under Projects, select **Create new project**. Ensure the following settings: From 8767278f164fbd8cac7fb740489f834941441743 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Thu, 11 Apr 2019 23:37:26 +0200 Subject: [PATCH 118/168] update feature toggle instructions --- feature-flag/README.md | 266 ++++++++++++++++++++++------------------- 1 file changed, 143 insertions(+), 123 deletions(-) diff --git a/feature-flag/README.md b/feature-flag/README.md index 8ce07e1..304329c 100644 --- a/feature-flag/README.md +++ b/feature-flag/README.md @@ -1,19 +1,24 @@ -# Avanade DevOps HOL - Feature Flag for Web Application -Feature flags provide the ability to turn features of your application on and off at a moments notice, no code deployments required. In this lab, we will add code to the project to demonstrate the use of feature flags to allow selectively turning on and off features to expose functionality. +# Feature Toggles -In this lab, we add a Feature Toggle mechanism to our web application. The toggle will be enabled by json config and tested locally. To implement this, we use the [FeatureToggle.Net](https://github.com/jason-roberts/FeatureToggle) framework by Jason Roberts. This lab is based on the [Parts Unlimited](https://microsoft.github.io/PartsUnlimited/advanced/FeatureFlagWeb.html) reference project and the [example implementation](https://github.com/jason-roberts/FeatureToggle/tree/master/src/Examples/AspDotNetCoreExample) by Jason Roberts. +This lab contains instructions to use feature toggles in an application. +Feature toggles, or flags, provide the ability to selectively turn features on and off to expose functionality. +The instructions are based on the following documentation: -## Pre-requisites: ## -- Complete [Getting Started](../getting-started/README.md) hands on lab. +- [Simple, Reliable Feature Toggles in .NET](http://jason-roberts.github.io/FeatureToggle.Docs/) -## Tasks +## Prerequisites -1. Add the following NuGet package to your Web Application project: - - FeatureToggle (by Jason Roberts) +- Complete lab: [Continuous Integration with Azure DevOps](../azure-devops-project/README.md) +- Complete lab: [Multi-stage deployments with Azure DevOps](../multi-stage-deployments/README.md) + +## Add a feature toggle to the application -1. Apply the following code changes to your Web Application: +1. In the **Website** project, add the feature toggle NuGet package: + - FeatureToggle (by Jason Roberts) - -
Add class "CheckPhoneNumber" in a folder named "Feature" +1. In the **Website** project, add a feature toggle: + - Create a feature toggle class in a 'Feature' folder +
Feature\CheckPhoneNumber.cs (expand to view code) ```csharp using FeatureToggle; @@ -23,156 +28,171 @@ In this lab, we add a Feature Toggle mechanism to our web application. The toggl public class CheckPhoneNumber : SimpleFeatureToggle { } } ``` -
+
- -
Add class "ContactViewModel" in a folder named "Models". This class will be used to bring the Feature Toggle setting to the Contact page - - ```csharp - using FeatureToggle; + - Add the feature toggle configuration to the appsettings +
appsettings.json (expand to view code) - namespace aspnet_core_dotnet_core.Models + ```json { - public class ContactViewModel - { - public IFeatureToggle CheckPhoneNumber { get; set; } - - public string Name { get; set; } - - public int? PhoneNumber { get; set; } + "FeatureToggle": { + "CheckPhoneNumber": false } + ... } ``` -
+
- -
Modify "Controllers/HomeController" to bind the new viewmodel to the Contact page. The Contact method already exists, so replace it entirely. + - Initialize the feature toggle setting from the configuration during startup - ```csharp - ... +
Startup.cs (expand to view code) - private readonly CheckPhoneNumber _checkPhoneNumber; + ```csharp + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + // Set provider config so file is read from content root path + var provider = new AppSettingsProvider { Configuration = Configuration }; - public HomeController(CheckPhoneNumber checkPhoneNumber) - { - _checkPhoneNumber = checkPhoneNumber; - } + // Add your feature here + services.AddSingleton(new CheckPhoneNumber { ToggleValueProvider = provider }); + ... + } + ``` +
- ... +1. In the **Website** project, implement the feature toggle in a (new) phone number form on the contact page: + - Create a view model for the contact page including the feature toggle - public IActionResult Contact() - { - ViewData["Message"] = "Your contact page."; +
Models\ContactViewModel.cs (expand to view code) - return View(new ContactViewModel { CheckPhoneNumber = _checkPhoneNumber }); - } + ```csharp + using FeatureToggle; - ... - ``` -
+ namespace aspnet_core_dotnet_core.Models + { + public class ContactViewModel + { + public IFeatureToggle CheckPhoneNumber { get; set; } - -
Modify "Views/Home/Contact" to include a reference to your model class, and to add a new form to the page. Make sure you replace "yourprojectname" + public string Name { get; set; } - ```csharp - @model .Models.ContactViewModel + public int? PhoneNumber { get; set; } + } + } + ``` +
- ... + - Inject the feature toggle in the controller, and pass it to the contact page -
-
-
- - - -
-
- +
Controllers\HomeController.cs" (expand to view code) - @if (Model.CheckPhoneNumber.FeatureEnabled) + ```csharp + public class HomeController : Controller + { + private readonly CheckPhoneNumber _checkPhoneNumber; + + protected HomeController() { - @Html.TextBoxFor(m => m.PhoneNumber, new { @class = "form-control", placeholder = "555-555-5555", type = "tel", pattern = "\\d{3}[\\-]\\d{3}[\\-]\\d{4}", id = "phone" }) } - else + + public HomeController(CheckPhoneNumber checkPhoneNumber) { - @Html.TextBoxFor(m => m.PhoneNumber, new { @class = "form-control", placeholder = "Phone Number", id = "phone" }) + _checkPhoneNumber = checkPhoneNumber; } - -
-
- -
-
- ``` -
- - -
Modify the "Startup" class. Replace the ConfigureServices method with the code below - - ```csharp - public class Startup - { - ... - - // This method gets called by the runtime. Use this method to add services to the container. - public void ConfigureServices(IServiceCollection services) - { - // Set provider config so file is read from content root path - var provider = new AppSettingsProvider { Configuration = Configuration }; + ... - // Add your feature here - services.AddSingleton(new CheckPhoneNumber { ToggleValueProvider = provider }); + public IActionResult Contact() + { + ... + // return a contact view model including the toggle setting + return View(new ContactViewModel { CheckPhoneNumber = _checkPhoneNumber }); + } - services.AddMvc(); + ... } + ``` +
- ... - } - - ``` -
- - -
Modify your Unit Test class + - Add the form with a toggle for the phone number logic to the contact page +
Views\Home\Contact.cshtml (expand to view code) - Change every occurrence of: - ```csharp - HomeController controller = new HomeController(); - ``` - - to: - ```csharp - HomeController controller = new HomeController(new CheckPhoneNumber()); - ``` -
+ ```csharp + @model aspnet_core_dotnet_core.Models.ContactViewModel + ... -1. Add the feature toggle configuration to the appsettings: - - -
Modify config file "appsettings.json" with the feature toggle activated - - ```json - { - "FeatureToggle": { - "CheckPhoneNumber": true - }, - "Logging": { - "IncludeScopes": false, - "LogLevel": { - "Default": "Warning" - } - } - } - ``` -
+
+
+
+ + + +
+
+ + + @if (Model.CheckPhoneNumber.FeatureEnabled) + { + @Html.TextBoxFor(m => m.PhoneNumber, new { @class = "form-control", placeholder = "555-555-5555", type = "tel", pattern = "\\d{3}[\\-]\\d{3}[\\-]\\d{4}", id = "phone" }) + } + else + { + @Html.TextBoxFor(m => m.PhoneNumber, new { @class = "form-control", placeholder = "Phone Number", id = "phone" }) + } + + +
+
+ +
+
+ ``` +
+ + - In the UnitTest project, adjust the unit tests to the feature toggle injection + +
SampleUnitTests.cs (expand to view code) + + ```csharp + public void IndexPageTest() + { + var controller = new HomeController(null); + ... + public void AboutPageTest() + { + var controller = new HomeController(null); + ... + public void ContactPageTest() + { + var controller = new HomeController(null); + ``` +
+ +1. Start the website locally and test the feature toggle in the Contact form: + - With the toggle set to **false** in config, on the Contact page form: + 1. Enter any phone number and hit submit. Notice how no validation error is given + - With the toggle set to **true** in config, on the Contact page form: + 1. Enter phone number 0123456789, hit submit, and notice the validation error + 1. Enter phone number 123-123-5678, submit and notice the page refreshes without error -1. Run the web application locally and test the new Contact form: +## Configure the feature toggle in the release pipeline - 1. Disable the feature by editing the config, set it to false, reload the page: +1. Edit the Release pipeline - 1. Enter any phone number and hit submit. Notice how no validation error is given +1. In the Azure DevOps **Release**, configure the feature toggle variable on the **qa** environment. +Edit the release, go to Variables, and add the variables: - 1. Enable the feature, reload the page: + |Name |Value|Scope| + |:-----------------------------|:----|:----| + |FeatureToggle:CheckPhoneNumber|true |qa | + |FeatureToggle:CheckPhoneNumber|false|dev | - 1. Enter phone number 0123456789, hit submit, and notice the validation error +1. Commit your code to trigger a **Build**, followed by a **Release** - 1. Enter phone number 123-123-5678, submit and notice the page refreshes without error +1. Approve the release to all environments, and inspect the results. +The qa environment should have the feature enabled, and the dev environment not. 1. Push your code changes and let your pipeline do it's job From d1e3bd8b23d94c2b2a0cf500c1b6fb4e96ccabf7 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Thu, 11 Apr 2019 23:38:21 +0200 Subject: [PATCH 119/168] formatting --- feature-flag/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature-flag/README.md b/feature-flag/README.md index 304329c..7bb5f3e 100644 --- a/feature-flag/README.md +++ b/feature-flag/README.md @@ -191,7 +191,7 @@ Edit the release, go to Variables, and add the variables: 1. Commit your code to trigger a **Build**, followed by a **Release** -1. Approve the release to all environments, and inspect the results. +1. Approve the release to all environments, and inspect the results:\ The qa environment should have the feature enabled, and the dev environment not. 1. Push your code changes and let your pipeline do it's job From a3f324c31b6d7c4cf75efe8f18d8cf4255e264dc Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Thu, 11 Apr 2019 23:39:09 +0200 Subject: [PATCH 120/168] formatting --- feature-flag/README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/feature-flag/README.md b/feature-flag/README.md index 7bb5f3e..0c3c0eb 100644 --- a/feature-flag/README.md +++ b/feature-flag/README.md @@ -192,9 +192,7 @@ Edit the release, go to Variables, and add the variables: 1. Commit your code to trigger a **Build**, followed by a **Release** 1. Approve the release to all environments, and inspect the results:\ -The qa environment should have the feature enabled, and the dev environment not. - -1. Push your code changes and let your pipeline do it's job +The **qa** environment should have the feature enabled, and the **dev** environment not. ## Next steps -Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file +Return to the [Lab index](../README.md) and continue with the next lab \ No newline at end of file From 7c6c74563315664066e911965619bc9bdd7ae9cd Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Thu, 11 Apr 2019 23:39:36 +0200 Subject: [PATCH 121/168] formatting --- feature-flag/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature-flag/README.md b/feature-flag/README.md index 0c3c0eb..8e386d3 100644 --- a/feature-flag/README.md +++ b/feature-flag/README.md @@ -181,7 +181,7 @@ The instructions are based on the following documentation: 1. Edit the Release pipeline -1. In the Azure DevOps **Release**, configure the feature toggle variable on the **qa** environment. +1. In the Azure DevOps **Release**, configure the feature toggle variable on the **qa** environment.\ Edit the release, go to Variables, and add the variables: |Name |Value|Scope| From ba76bf4f626270ee6a928828a6783e78db93c38a Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Thu, 11 Apr 2019 23:57:12 +0200 Subject: [PATCH 122/168] fix release variables --- feature-flag/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/feature-flag/README.md b/feature-flag/README.md index 8e386d3..ffc7e73 100644 --- a/feature-flag/README.md +++ b/feature-flag/README.md @@ -186,8 +186,8 @@ Edit the release, go to Variables, and add the variables: |Name |Value|Scope| |:-----------------------------|:----|:----| - |FeatureToggle:CheckPhoneNumber|true |qa | - |FeatureToggle:CheckPhoneNumber|false|dev | + |FeatureToggle.CheckPhoneNumber|true |qa | + |FeatureToggle.CheckPhoneNumber|false|dev | 1. Commit your code to trigger a **Build**, followed by a **Release** From 36c8f73b31674c96bfb2525d50a35abf2cdc46cb Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Fri, 12 Apr 2019 00:57:52 +0200 Subject: [PATCH 123/168] fix feature toggle environment settings --- feature-flag/README.md | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/feature-flag/README.md b/feature-flag/README.md index ffc7e73..eae4321 100644 --- a/feature-flag/README.md +++ b/feature-flag/README.md @@ -179,15 +179,18 @@ The instructions are based on the following documentation: ## Configure the feature toggle in the release pipeline -1. Edit the Release pipeline - -1. In the Azure DevOps **Release**, configure the feature toggle variable on the **qa** environment.\ -Edit the release, go to Variables, and add the variables: - - |Name |Value|Scope| - |:-----------------------------|:----|:----| - |FeatureToggle.CheckPhoneNumber|true |qa | - |FeatureToggle.CheckPhoneNumber|false|dev | +1. Configure the feature toggle to be enabled on the **qa** environment: + - Edit the Azure DevOps **Release** pipeline + - Go to Variables, and add the variables: + + |Name |Value|Scope| + |:-----------------------------|:----|:----| + |FeatureToggle.CheckPhoneNumber|true |qa | + |FeatureToggle.CheckPhoneNumber|false|dev | + + - In the **Deploy Azure App Service** task, under *Application and Configuration Settings*,\ + ensure the following setting: + - *App settings:* ```-FEATURETOGGLE__CHECKPHONENUMBER $(FeatureToggle.CheckPhoneNumber)``` 1. Commit your code to trigger a **Build**, followed by a **Release** From ef260c6983b63586b99dc1fb7572ba1e871540f6 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Fri, 12 Apr 2019 01:21:26 +0200 Subject: [PATCH 124/168] update smoke testing lab instructions --- smoke-testing/README.md | 105 +++++++++++++++++++++------------------- 1 file changed, 56 insertions(+), 49 deletions(-) diff --git a/smoke-testing/README.md b/smoke-testing/README.md index 78c4e36..34b7bf6 100644 --- a/smoke-testing/README.md +++ b/smoke-testing/README.md @@ -1,79 +1,86 @@ -# Avanade DevOps HOL - Smoke Testing +# Validating the release with automated Smoke Testing -In this lab, we add smoke tests to our test project. +This lab contains instructions to enable automated smoke testing in the release. ## Prerequisites -- Complete [UI Testing](../ui-testing/README.md). +- Complete lab: [Continuous Integration with Azure DevOps](../azure-devops-project/README.md) +- Complete lab: [Multi-stage deployments with Azure DevOps](../multi-stage-deployments/README.md) +- Complete lab: [UI Testing with Selenium and Azure DevOps](../ui-testing/README.md) -## Tasks +## Configure local Smoke Testing -1. Edit your build definition. Let the Test task ignore both "UI" and "Smoke" categories - - Change the filter argument to the following: --filter TestCategory!=UI&TestCategory!=Smoke - -1. Edit your release definition, Production environment: - 1. Add task "Replace Tokens", similar to the one in QA - 1. Add task: Visual Studio Test - - Search folder: $(System.DefaultWorkingDirectory)/Drop/tests - - Test filter criteria: TestCategory=Smoke - - Settings file: $(System.DefaultWorkingDirectory)/Drop/tests/vsts.runsettings - 1. Add variable "SiteUrl" with Scope "Production" and url "https://\.azurewebsites.net" - -1. Add new class SmokeTests to your test project with the UITests -
Code for the SmokeTests class +1. In the **FunctionalTest** project, add a smoke test to validate if the website is available: +
SmokeTests.cs (expand to view code) ```csharp - [TestClass] - public class SmokeTests - { - public TestContext TestContext { get; set; } - - private string _siteUrl; - private int _timeout; + using Microsoft.VisualStudio.TestTools.UnitTesting; + using System; + using System.Net; - [TestInitialize()] - public void MyTestInitialize() + namespace aspnet_core_dotnet_core.FunctionalTests + { + [TestClass] + public class SmokeTests { - if (TestContext.Properties.Contains("siteUrl")) - { - _siteUrl = TestContext.Properties["siteUrl"].ToString(); - } + public TestContext TestContext { get; set; } - _timeout = 60000; - } + private string _siteUrl; - [TestMethod] - [TestCategory("Smoke")] - public void ValidateSiteIsAvailable() - { - try + [TestInitialize()] + public void MyTestInitialize() { - var request = WebRequest.CreateHttp(_siteUrl); - request.Timeout = _timeout; - request.ReadWriteTimeout = _timeout; - using (var response = (HttpWebResponse)request.GetResponse()) + if (TestContext.Properties.ContainsKey("siteUrl")) { - // Assert - Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); + _siteUrl = TestContext.Properties["siteUrl"].ToString(); } } - catch (Exception ex) + + [TestMethod] + [TestCategory("Smoke")] + public void ValidateSiteIsAvailable() { - Console.WriteLine("Exception: {0}", ex.Message); - Assert.Fail(ex.Message); + try + { + var request = WebRequest.CreateHttp(_siteUrl); + request.Timeout = 60000; + request.ReadWriteTimeout = 60000; + using (var response = (HttpWebResponse)request.GetResponse()) + { + // Assert + Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); + } + } + catch (Exception ex) + { + Console.WriteLine("Exception: {0}", ex.Message); + Assert.Fail(ex.Message); + } } } } ```
-1. Build your solution and run your Web App (F5). Run all your Tests locally and make sure they all succeed. +1. Validate if the test passes:\ +Right-click the *ValidateSiteIsAvailable()* test method and select **Run Test(s)** + +## Configure automated Smoke Testing in the release pipeline + +1. Include a task to run the Smoke tests in the release pipeline: + - Edit the Azure DevOps **Release** + - Clone the existing **Visual Studio Test** task + - Rename the first test task to **Run Smoke Tests** and ensure it has this setting: + - *Test filter criteria:* TestCategory=Smoke + - Rename the second test task to **Run UI Tests** and ensure it has this setting: + - *Test filter criteria:* TestCategory=UI -1. Commit your code change and make sure your build and release succeed. Both your QA and Production environment should be updated. QA should have run a Smoke and UI Test, with resulting screenshots from the UI Test. Production should have run a Smoke test only +1. Commit your code to trigger a **Build**, followed by a **Release**.\ + Upon completion, inspect the release results and verify the Smoke test passed. ## Stretch goals 1. Refactor all the hardcoded timeout values to a variable in the runsettings file. Make them tokenized for replacement during the Release ## Next steps -Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file +Return to the [Lab index](../README.md) and continue with the next lab \ No newline at end of file From 94571e11f794b11e812d8dde18141170a816e644 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Fri, 12 Apr 2019 01:26:16 +0200 Subject: [PATCH 125/168] update lab order --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8af2362..7d36f55 100644 --- a/README.md +++ b/README.md @@ -14,5 +14,5 @@ The course contains the following labs: | [Lab 3 - UI Testing with Selenium and Azure DevOps](ui-testing/README.md) | 90 min | | [Lab 4 - Static code analysis with SonarQube](sonarqube/README.md) | 45 min | | [Lab 5 - Feature Toggles](feature-flag/README.md) | 45 min | -| [Lab 6 - *(Optional)* - Security Verification Tests in your CD pipeline](security-testing/README.md) | 45 min | -| [Lab 7 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 min | +| [Lab 6 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 min | +| [Lab 7 - *(Optional)* - Security Verification Tests in your CD pipeline](security-testing/README.md) | 45 min | From fd3a636c18ef9b075d803d31cb138ea72ab0d736 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Fri, 12 Apr 2019 13:44:54 +0200 Subject: [PATCH 126/168] fix smoke testing lab instructions --- smoke-testing/README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/smoke-testing/README.md b/smoke-testing/README.md index 34b7bf6..f717cb1 100644 --- a/smoke-testing/README.md +++ b/smoke-testing/README.md @@ -69,14 +69,18 @@ Right-click the *ValidateSiteIsAvailable()* test method and select **Run Test(s) 1. Include a task to run the Smoke tests in the release pipeline: - Edit the Azure DevOps **Release** - - Clone the existing **Visual Studio Test** task + - In the **qa** environment stage, clone the existing **Visual Studio Test** task - Rename the first test task to **Run Smoke Tests** and ensure it has this setting: - *Test filter criteria:* TestCategory=Smoke - Rename the second test task to **Run UI Tests** and ensure it has this setting: - *Test filter criteria:* TestCategory=UI + - Create the same **Run UI Tests** task in the **dev** environment stage 1. Commit your code to trigger a **Build**, followed by a **Release**.\ - Upon completion, inspect the release results and verify the Smoke test passed. + Upon completion, inspect the release results and verify the Smoke test passed.\ + Notice the difference in executed tests per environment stage: + - **qa** environment stage: **smoke** tests and **UI** tests have been executed + - **dev** environment stage: **smoke** tests have been executed ## Stretch goals From d702ea122b0564a73ac33f4e789bfe4e92fa41c5 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Fri, 12 Apr 2019 13:48:35 +0200 Subject: [PATCH 127/168] fix ui testing instructions --- ui-testing/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-testing/README.md b/ui-testing/README.md index 8ee8db5..5c14df3 100644 --- a/ui-testing/README.md +++ b/ui-testing/README.md @@ -249,7 +249,7 @@ Add a folder 'PageObjects' and add the following classes to it. ## Configure automated UI Testing (on the staging environment) 1. The UI Test tasks are Windows based, which requires a Windows agent.\ -In the **Azure DevOps** project, in the **Build** and in the **Release - QA stage**, change the agent jobs to run on the agent **'Hosted Windows 2019 with VS2019'** +In the **Azure DevOps** project, in the **Build** and in **both** of the **Release** environment stages, change the agent jobs to run on the agent **'Hosted Windows 2019 with VS2019'** 1. In the Azure DevOps **Release**, configure a variable for the website url on the staging environment. Edit the release, go to Variables, and add the variable: From 79565f58d6ae71e7839746da8cfeca081c873525 Mon Sep 17 00:00:00 2001 From: Jan Willem Kroes Date: Fri, 12 Apr 2019 14:30:10 +0200 Subject: [PATCH 128/168] add optional lab feature-branching --- README.md | 1 + feature-branching/README.md | 69 +++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 feature-branching/README.md diff --git a/README.md b/README.md index 7d36f55..32d8b01 100644 --- a/README.md +++ b/README.md @@ -16,3 +16,4 @@ The course contains the following labs: | [Lab 5 - Feature Toggles](feature-flag/README.md) | 45 min | | [Lab 6 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 min | | [Lab 7 - *(Optional)* - Security Verification Tests in your CD pipeline](security-testing/README.md) | 45 min | +| [Lab 8 - *(Optional)* - Feature branching and branch protection](feature-branching/README.md) | 45 min | diff --git a/feature-branching/README.md b/feature-branching/README.md new file mode 100644 index 0000000..c9e407c --- /dev/null +++ b/feature-branching/README.md @@ -0,0 +1,69 @@ +# Feature branching and branch protection + +This lab contains instructions to ensure code quality using pull requests and branch protection. +The instructions are based on the following documentation: + +- [Review code with pull requests](https://docs.microsoft.com/en-us/azure/devops/repos/git/pull-requests) +- [Improve code quality with branch policies](https://docs.microsoft.com/azure/devops/repos/git/branch-policies) + +## Prerequisites + +- Complete lab: [Continuous Integration with Azure DevOps](../azure-devops-project/README.md) +- Complete lab: [Multi-stage deployments with Azure DevOps](../multi-stage-deployments/README.md) + +## Enable branch protection + +1. Protect the **master** branch of your repository by enabling a **branch policy** using:\ + [Improve code quality with branch policies](https://docs.microsoft.com/azure/devops/repos/git/branch-policies) + Ensure the following policy settings are enabled: + - Require a minimum number of 1 reviewers (Allow users to approve their own changes) + +## Configure pull request build + +1. Create a copy of the **CI Build**, and name it **PR Build** + +1. In the **PR Build**, remove all tasks that are publishing artifacts.\ + Ensure the pull request build only contains build and test tasks. + +1. Edit the **master** branch policy, enable **Build validation** and set it to the **PR Build** + +## Create a feature branch and make a pull request + +1. In your Azure DevOps project, under Repos - Branches, create a new feature branch: + On the **devopshol** repository, create a feature branch named 'feature/slogan' Protect the **master** branch of your repository by enabling a branch policy using:\ + [Review code with pull requests](https://docs.microsoft.com/en-us/azure/devops/repos/git/pull-requests) + +1. Switch to the feature branch in Visual Studio + +1. In the **Website** project, add a slogan to the home page: +
Views\Home\Index.cshtml (expand to view code) + + ```csharp + ... +
+

DevOps HOL application slogan

+ +
+ ... + ``` +
+ +1. Commit the changes to the feature branch, and **push** or **sync** the changes to Azure DevOps + +1. Create a pull request, from the feature branch to master.\ + Inspect the pull request overview page + Approve the pull request, and notice the CI Build is triggered after approval. + +## Stretch goals + +1. Move the shared tasks of the **CI** (Continous Integration) build and the **PR** (Pull Request) to a **Task Group**.\ + Ensure the following setup: + - **PR Build:** + - 'Build application' task group, containing: Build + Test tasks + - **CI Build:** + - 'Build application' task group, containing: Build + Test tasks + - Publish artifact tasks +1. Prefix the Build number with 'feature' + +## Next steps +Return to the [Lab index](../README.md) and continue with the next lab \ No newline at end of file From 3e5ed7f03ecdcf6f833b3131a17d2a8545c06560 Mon Sep 17 00:00:00 2001 From: JW Kroes <49476606+janwkroes@users.noreply.github.com> Date: Fri, 12 Apr 2019 14:39:52 +0200 Subject: [PATCH 129/168] fix formatting --- feature-branching/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/feature-branching/README.md b/feature-branching/README.md index c9e407c..b49cfc1 100644 --- a/feature-branching/README.md +++ b/feature-branching/README.md @@ -1,6 +1,6 @@ # Feature branching and branch protection -This lab contains instructions to ensure code quality using pull requests and branch protection. +This lab contains instructions to ensure code quality using pull requests and branch protection.\ The instructions are based on the following documentation: - [Review code with pull requests](https://docs.microsoft.com/en-us/azure/devops/repos/git/pull-requests) @@ -66,4 +66,4 @@ The instructions are based on the following documentation: 1. Prefix the Build number with 'feature' ## Next steps -Return to the [Lab index](../README.md) and continue with the next lab \ No newline at end of file +Return to the [Lab index](../README.md) and continue with the next lab From 7569ef01e2936ae42150b0df7fe1f3e6ab439d80 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Tue, 10 Dec 2019 11:57:22 +0100 Subject: [PATCH 130/168] update prereqs to use microsoft edge --- azure-rm/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-rm/README.md b/azure-rm/README.md index 3422143..98e6b40 100644 --- a/azure-rm/README.md +++ b/azure-rm/README.md @@ -37,7 +37,7 @@ Follow instructions from [Add a VM to a lab in Azure DevTest Labs](https://docs. - Virtual machine size: Standard_B8ms - OS disk type: Standard SSD - Artifacts selection: Install Chocolatey Packages, configuration: - - Packages: git,vscode,googlechrome + - Packages: `git,vscode,microsoft-edge-insider` - Allow Empty Checksums: true - Ignore Checksums: true From 76a6f17aded4b0ecd5f66e696d0bce552131dd95 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Tue, 10 Dec 2019 11:59:40 +0100 Subject: [PATCH 131/168] update vm size --- azure-rm/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/azure-rm/README.md b/azure-rm/README.md index 98e6b40..d4edd52 100644 --- a/azure-rm/README.md +++ b/azure-rm/README.md @@ -34,7 +34,8 @@ Follow instructions from [Add a VM to a lab in Azure DevTest Labs](https://docs. - Virtual machine name: devopsvm - User name: devopshol - Password: ADP#2019 - - Virtual machine size: Standard_B8ms + - Virtual machine size: + - Pick any size that fits within your subscription - OS disk type: Standard SSD - Artifacts selection: Install Chocolatey Packages, configuration: - Packages: `git,vscode,microsoft-edge-insider` From 7a253cd301dbd02347f06b68404b5ee6d3065f54 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Sun, 22 Dec 2019 16:47:54 +0000 Subject: [PATCH 132/168] update on CI --- azure-devops-project/README.md | 68 ++++++++++++++-------------- azure-rm/README.md | 13 ++++-- images/dotnetcore-runtime-stack.png | Bin 22601 -> 0 bytes images/pipelines-delete.png | Bin 0 -> 20659 bytes images/pipelines-disable-ci.png | Bin 0 -> 10219 bytes images/pipelines-unlink.png | Bin 0 -> 25432 bytes images/pipelines-view-yaml.png | Bin 0 -> 9808 bytes 7 files changed, 43 insertions(+), 38 deletions(-) delete mode 100644 images/dotnetcore-runtime-stack.png create mode 100644 images/pipelines-delete.png create mode 100644 images/pipelines-disable-ci.png create mode 100644 images/pipelines-unlink.png create mode 100644 images/pipelines-view-yaml.png diff --git a/azure-devops-project/README.md b/azure-devops-project/README.md index bf8578f..0eaaa89 100644 --- a/azure-devops-project/README.md +++ b/azure-devops-project/README.md @@ -1,6 +1,6 @@ # Continuous Integration with Azure DevOps -In this lab, we setup our DevOps Project in Azure to create our CI/CD pipeline. This will provide us with a standard code base to work with. +In this lab, we setup our DevOps Project in Azure to create our CI/CD pipeline. This will provide us with a standard code base to work with. We will also generate a YAML file from the existing pipeline, so we can work with Pipeline as Code in future labs. Based on [this](https://docs.microsoft.com/en-us/azure/devops-project/azure-devops-project-aspnet-core) tutorial. @@ -10,6 +10,8 @@ Based on [this](https://docs.microsoft.com/en-us/azure/devops-project/azure-devo ## Tasks +### Setting up the code repository on your development machine + 1. Go to your Azure Portal and create a new DevOps Project. Make sure it meets the following demands: - .NET Runtime - ASP.NET Core application @@ -18,50 +20,48 @@ Based on [this](https://docs.microsoft.com/en-us/azure/devops-project/azure-devo 1. When the azure resources are created, go to your Azure DevOps account and make sure that: - The first Build and Release are successful - - The App is deployed and accessable + - The App is deployed and accessable through the web app url (*.azurewebsites.net) + +1. Clone your code repository to your development environment using: + - `git clone ` + +### Set up the Pipeline as Code +In the following steps, it is important to unlink any parameters so they + +1. In the root folder of your repository, create a new file called `azure-pipelines.yaml` -1. Clone your code repository to your development environment and open your solution in Visual Studio: - - Upgrade all projects to ASP.NET Core 2.1 (Right-click project > Properties) - - Update all NuGet packages to their 2.x counterparts (Right-click project > Manage NuGet packages > Select all packages > Update) - - Add NuGet package to the web project: "Microsoft.NET.Sdk.Razor" +1. In your browser, go to Azure DevOps Pipelines and Edit the existing pipeline: + - Unlink the parameters: + ![](../images/pipelines-unlink.png) -1. Unload the web project and unit test project. Make the following change to both project files: - - Remove the line - ```xml - $(PackageTargetFallback);portable-net45+win8+wp8+wpa81; - ``` + - Go to Triggers and disable continuous integration: + ![](../images/pipelines-disable-ci.png) -1. Set the functional tests to be ignored (this will be enabled in another lab).\ -In the **FunctionalTests** project, make the following change: - ```csharp - SampleFunctionalTests.cs + - Save the pipeline changes, do not queue - [Ignore] // <-- ignore test - public void SampleFunctionalTest1() - ``` + - Select the Agent Job and click 'View YAML': + ![](../images/pipelines-view-yaml.png) -1. Reload all the projects, build your solution and run the unit tests. Make sure that the **unit tests** pass + - Select all text from the YAML view and copy it -1. Open the folder "ArmTemplates" in your source, and edit the file "linux-webapp-template.json": - - Change the dotnetcore version to 2.1: - ```json - "linuxFxVersion": { - "type": "string", - "defaultValue": "dotnetcore|2.1" - }, - ``` +1. Paste all the contents into your `azure-pipelines.yaml` file -1. Go to your Azure Devops project site and edit the Release definition - - In the step "Deploy Azure App Service" change the Runtime Stack to .NET Core 2.1 - ![](../images/dotnetcore-runtime-stack.png) +1. Save all changes and commit + push them to your repository -1. Push your code to trigger a build/release +## Set up a pipeline in Azure Devops using the YAML file +1. Go to Azure DevOps Pipelines and click 'New Pipeline' -1. When the Release is finished, visit your web app url to verify it is still working +1. Create the new pipeline with the following settings: + - Azure Repos Git (YAML) + - Choose your git repository + - Existing Azure Pipelines YAML file + - Choose the YAML file from your repository -## Stretch goals +1. Add a new Variable: + - Name: BuildConfiguration + - Value: release -1. Add custom logging to Application Insights through your Web App +1. Click Run to finalize the setup and wait for the build to complete ## Next steps Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file diff --git a/azure-rm/README.md b/azure-rm/README.md index d4edd52..ed27a04 100644 --- a/azure-rm/README.md +++ b/azure-rm/README.md @@ -6,11 +6,11 @@ Follow this lab to set up a development environment for the course labs. Creatin 1. Make sure you have an active Azure DevOps account.\ [Sign up for Azure DevOps](https://dev.azure.com/) -2. Make sure you have an active Azure subscription.\ +1. Make sure you have an active Azure subscription.\ Sign in to the [Azure Portal](https://portal.azure.com) to verify you can log in and create resources.\ If you used a (Avanade) organization MDSN account, go to the next step. -3. (only for organization accounts) If you are using your Avanade email to access the Azure portal, then you will need to create a new Active Directory instance. This is because the labs require creating an enterprise application id and individual users do not have permissions to create enterprise applications on the Avanade AD instance. +1. (only for organization accounts) If you are using your Avanade email to access the Azure portal, then you will need to create a new Active Directory instance. This is because the labs require creating an enterprise application id and individual users do not have permissions to create enterprise applications on the Avanade AD instance. - In the [Azure Portal](https://portal.azure.com), *Create a Resource* of *Azure Active Directory* with a meaningful name. This is probably something you will use as a general purpose AD instance (i.e. not just for the class) so you may want to name it appropriately. @@ -28,7 +28,7 @@ Follow instructions from [Create a lab in Azure DevTest Labs](https://docs.micro - Location: West Europe - Auto-shutdown: default (Enabled, 19:00) -2. Add a Virtual Machine to your DevTest lab\ +1. Add a Virtual Machine to your DevTest lab\ Follow instructions from [Add a VM to a lab in Azure DevTest Labs](https://docs.microsoft.com/azure/lab-services/devtest-lab-add-vm). Ensure the following settings: - Choose a base: Visual Studio 2019 Community on Windows 10 Enterprise N (x64) - Virtual machine name: devopsvm @@ -42,11 +42,16 @@ Follow instructions from [Add a VM to a lab in Azure DevTest Labs](https://docs. - Allow Empty Checksums: true - Ignore Checksums: true -3. Verify connection to the Virtual Machine +1. Verify connection to the Virtual Machine - Wait untill the virtual machine is fully provisioned and the artifacts are applied.\ *(this can take up to 20 minutes)* - Verify you can use the virtual machine by connecting to it:\ Select 'Connect' in the Virtual machine Overview in the portal and provide the credentials you used in the previous step. +1. Install .NET Core SDK version 2.2: + - Open a PowerShell window + - Enter this command and press Enter: + - `choco install dotnetcore-sdk --version=2.2.102 -y` + ## Next steps Return to the [Lab index](../README.md) to continue with the course labs. \ No newline at end of file diff --git a/images/dotnetcore-runtime-stack.png b/images/dotnetcore-runtime-stack.png deleted file mode 100644 index 3bf78b62618af50955b76872c306b110388ca5cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22601 zcmc$`cT`jDw=Nn#3pPYWKt(`BK}Cp4udyRyKt+0qB1LIIdJ>Y@uz-MofFu+Z4I&++ zgpfp<)KCn?&>}4mS}1`)LXsQ!e&6rzTlT)=+_BF&e=rzXBP;7I^PTf~=6vRQebdZX zeEY%e002PT}GzYTTJuPy+9^?=Fc3wJ`Cruz|Z4{`4O39d1+EmW-wj#9Xn zl6T5vH2QO+<%w>mC}ZWY_X(C}j+F)58CS~{PuSaSwjSM~wSBy1Yp83)89(I)ceSpJ zR|%)9_MM!XGwX1+nh)D6A9@{dLAAi)uVYtk?#l;+)yA6cA%v(p5mt!h=xD*>RCCKJ z+|8Yw#+A~fQu&iJ2VSk3r5D%)Zvy~6&-MAYs%|(B*DwSCGTYdIZx^T=0dKd1B|aSd zzh8=WZGICyK+ZuAPnVjMLRV)?`guRyecsDF`Pt4E{nSNjdSBl%#D~Ps^+xPUNyfWK zt2QSaEdMDH=xecz^xUO$>e=aGE0Km*MaCq@E(IJ*6GX*fNRHZQO$R8#Kk3wb5eUVQo!`BH2x*;emXlw z5Lg^jZ5%X%gt<`D8`J{Lr+LpJ)8rs$TAkG*(Ohk@tF7%rM@R<5D2rUBr zsw`Pp(m%{7D4As=ONCkPlYwYFBacchX9CTp^zKQYm_N$TCDK{tI8M|Ug8)PcqvVtY z{+Lvp7~pWqF)-*}Zrj>Kq9_xtejhzO!4-dU{)CF%9Cgg{mYUQxePeSp%O0tL^f&EK zQl9oIVU0$fwPU~U{O*x@w)m#cdvkr2U4aiS3M|yMf0t#P?(WXYOng3T38v`Aq?xVq zel+QK%l*cy^k0GRnVe*Cc!oZq94^mFdXb{d=SZZ@E;x1<5pF_CtQ85jj01(QnT~EN zSqS>=h_L#`U+j<8lzAfcB}WfPTTC$tufSPf5W3Srt5XybUD|bFCS04j5h%erE=hGUtEuPm3PUuiC#w1%cTa2@^ znbR8x92%mVnKJw?ZcO=sMD_#fNY$y zN{x+Q$P;hbcqQ8kl{wJFX<~(cFn+PN-|;2dMAGh=M|Qf`CVn>BpOz@Qm($>oP?&Sj z8{Xb$tI?D#^U2$L(~gCVd(;SGhd0+3>8^>Ek@MjC5Y2$^1tpJIT0{phT|SO}#A1LQ z6TeWVUHGnBhDRKv(^#_@d3lUH;PIWFes-XT=2nNyf_Z6w=>diZ52(GwI;@e7L9rd1aQP+12o6GKGqZ?kPKNt5$;`HgvUC`gKqO5Ca+e#2p2$x6 z^{(n6AJ&L{0xLL{Er}co;PWpA4tR$kS@_AS`g+S>cCornw+CiC&c$rJN8%690#w)hd~)&;s{+z3q2U+85WJ2k0Egb{HH2PIc#a=qRsjh@Zw zoQGfC_=0oY%wZL=CSn@mK3YC%|0Ztu-;)-A z6baHR1p|r+e1r=xcq(s#6*Ik4$OG72{oBLRcNx;yRej4s{rthd9cIIj=RL+qrC8}A zU3d0Jd&so*S02{M@jY}3C9AP+7E&0J9K4trpETFbD_w+E@U@srkqQGP2>Nof_`*U-)ocX-zRIt~3l%80TE9ETzH~Al)`b+E zobwr?xbUsu7tXr2A`{)8tLS#&+{@tCdAn48?-03!aSe?8c}=U|Y^ox*YueznkVX#f zIc@q}WdGS#8itQOva^{P9E=M4XxWbb)AxIRYxvn@;~&n^PEw zZ)F|I=k)F}4oXVFu(nJ*3h@Fw_UWhwL*+L-h8_n)uKDwnU5Sau4pb_2xgH{*ab2Wi zrGBizIfg?nlZZt>?Z?aN0b#4vC)njS{m z-xKmwuqF{Q81y9`f+WQJ95>g)!L`H>Enp8CMt@F8pcJ{)#{DA|8brYX^r8w3CPJUg8m`)mUsU>ipMhaJ^{+H^3gAC%sxv%^`cvL{#ZLQGb6 zs|b|zu!E|GI^o2R*I^Xew+d!$(8`f=kT*4{&d`nZros^b(3{HPN8ecOty(T>H7Fib zZx!3o88ZEymVb2JCjPY6YaM^U)!ISc2>^6Si`>}f8ZZPUfwUK$yT?aoh#T^|z7v?y zQ+~OPS@sUMwX{X1cH$FrL$>C$4;*%HAV#O`p~yD(fF@wS++&%}loeqOZ4u}& zzuw$cvUI@Sv&ikEhQ8K*M>R^v7JgVt>MMX?N&t&tZSP`zQh(#1}Z|`Hf)E*>@SAr{)bzlwDjVln3Sw=qbMgt#?O@ z)nQI~fZW|Zid%3wUU2^*ipNK$YTe;ih`?p2E*@4GO&&-&5{Mx&+509F`+}U!&!pW18{rZpK*I`_L2m~NuFRY+gkJpK zpAODrB)=gcmJYx4C}A#Q51WIx(VK6O`d}~9d9lXv1@133GnhE^Dt^KG+*q1qm~dHz zYOKJG&Pztm%*EnB$RC%5M2=CY*T889DKiBdSFxRdaW#<#Z5TXl=xQ}lcTRkPWUbxs z-lO9PmN=4=@JMEhc-TIL3N!@P4Ymu5u|D^%j0f{bTORve<}RQBhx#dP&~wrAoUF7iuecei3Le zdpOp!X|YNluw(?vYGqPW}bRzFCKHa;%|z?b)HyWp(#A+qpLstQnm+ z6?1IS^IU9Gl8s~&(S22JvrEsn=kXGMc~s|nUYU1mDoSyylP2s0TJ2aKJ6;n-{#=x@ z+qw~Jq~B7-lTJEC0lu@4bOb&g6^Zku_QKwZES`WQYO2e^v*xzPMWFTFN81HsYRqiUx6$KXlA~qLl1-YS3YuM zx!;?g(s&5h`235<^scYVqhe91pr9Wq*8?j2>!NHSPFC8J%?iB=38gy&z%J!7{1pZx z@QRrf_N^#jtPdn1EyT;i+$AmNM$&s9YVXl^Spoyc6)fpf!co7}Suh3bVS*nwQ22dRR&pxCw+^Lhhu%s@Gh>Pu$RnV35- zl)N^7o1_?4fV& z0Ru*&iYu6|?~G@NC%xfNKYZcxxtN?}WL`dxvgQ~|CT~);jTv_fATifR2x4vJ*I5~f z_-v?mDw9z)~8bxy8ze1{;Nwp18l(VD{CMrd|4s~wh3_ZU-WY0*DdQzVl57=gRG0x|9I&# z#%XoORsi68*a}Nk6cqy37^cV@-+8u%sHN7xhG+o)t1oeL{X@pe*GcdBF)(X-tovC0 z#q~%wgG*c?_*iGy-G{rx{U&C}^%pf_1+!`kP7maG0T+!&9!={xrv_dhf)og_^b*Jw z4a0mt4ZfYWcHnHK+{R#U8#Fc_RqeP@U*14R)7@!P&jU?uK8=X&^6u%N7u<{k(?x*F zK=KYZyZ1XM8%8?k*v~F}V;Xk{*)V4&oNck9i)YQ`CMtq3U_MrF^`{bFN<}%?-KZjB zyI45@On#x7+*f*kSZ*VM6KPISeSgK@Vwe{s(O2-Ojuhv%r%frVjOlt|#=v3g*+XSV zgu@Dxe|Be^I>9Whk4v!TFRGStF5S!vKgzy%J=aamW1>UrI@{e* z?XYG&5os8jI{E;PPjnzv>@HiW9H)$e;=zi}N&PW!kI^iAclYAX78E5aIes(#W==Z9 zQl^UE;5c*3HA^?`9Z##AWm8g7=1J5sy7a`rY_aP#Ecsc$fbhnY^*h~=#hYo2d&G|m zlgh)PzMK7e$5#WGtl?Cz|!W$3$GwB7+UeddH*PCk}7G(U5aT3 zJFXgesrnMKI*tKrs(IexRa9J1La8`66k^AB+M|v9jCS-MnT<(7K;&uc2SoJ4QkQ$7 zoS&-c77W{tj`0Ku6!(N>bjibFW*&qrh=hg?ry^!nxZPwQ>CVOF;b=ON(_d^i-Bax8 z*50UdYx0=&k8K=R4C#G5EHLxwYYI?NDK@sUxd6tNpEmW23zeB+eodfU0#oiTjZa-E z?EIqjsKxG4Y7d4zpgnfn@KTqrfT<59+|~c3Pu6o;To_HWx4$0cr|d~33zL^=SoFi=XEgmd zj2H{XYpo*a-MeYRhbaeXp`2^|Gh&$hc^nzOIMGd7Dvk~vQM51dTInh!1x|LUE>!*c z^~F=$GcQ@V+^xhCNJvKCsL(C-t*-c>_DjJiG-R?Xhs-08d2N>@94kWFE833bg%5pX zh$Yz6c^YLbY~OZNsa5iNcq^of?MH@}{DOtI4^LI4VjL*u8t$+A5U3zO*ggLSv}B)- zzt*iOQ@<^oiash3rn0>#?5QsCnM}C*w-8o7d2);U+Y0fN*8V|-0Y5Nn%DSSX9w=3r z^f@16uv`d{7?kfEykd4C4jM5ck6vLu=PkPJYOzbhabDX54xGK4WBQ9N$=FU*AeA?b zf{H8JN5PuaaZ6p8-+^|4bn=Q!cUri{_Ser7jNZ>mOtBUL^PJhFsbAX#3SU z&)0^VS0{Jv7njj!7)xXaA89G7LqsRjSo}emx4_}yfz;P z#+G>ZF7>le-3Hc9NZzlEG}!P)M3kUMX4lwoH<{f>Hkj>MfI9iI@UX!!8NsZCaQ2b{ zw=Gh(WLZ{PQwuIDH#BuQ=^^jE{%uVgwv#7muKpa^!>ZPCOJfSKpr;pZqMkA}z2*ue3Su zH=Hd0)Np(4@v|$v$1}oFF0MRF6$IH}N`4rMNO1&sI`OarK}CO@c5!;F>x*<)chirh zOC6YV1)pZzlH8(SSode@g#EZ&&LF$|uv?RP<$PDc%X`6&LAN7sq}plFWg%O$Z^&W< zbYj4a$V?pGvI1Y&*m@n++Q+lIMXkeJmA>Jm?5d(eJEC$dtKcGS(*`@GF7`mK>DbAs z_LN2+OB+>(qh{B$PfF{(9As&Ps3d39HmDEYBS0Nzwe&`;1_}2z`~M{Gl1f0B^Bof@ zyI6Rv1 zrs0d&Qevpg4@~zGuDd(KP|3R**SfdjE%{TCDb^`=GE3_El4Xga_J<-|bSU~QR;-Vv z0ivWpx6-_hD|fbyWIjrfmupX*WVe!GgXn(F?Y5crx%N6G3F6r-Xw@E`oe8xL`_s+X z#G(ASvbA(0#%VEudcvJEs z*3w;(x`RX7@8e`*D7u1Gi43m#^4V#!^}O8HU9Am1M}#Zv!DPY7h;E96g#^bEb(Y|@ z#oU*BRZzK72W?2FEM;{yNRZClQzYMcs;Hfu$xh-br%qoXXRWApSa7Tz-QX^XgdLoH zBlpKNrZMdsCEdUKCoTt$R;bR{HVGAI(dT&TgIRYjTo~u!GC$(X5p8iQkJ)bK{eWwZ9BZB{1xAPg z&02*}dWi0;*Kl_X=ukx4njD4I3ES#`fK)_gKnlVkD-`-#d$4uq6-@uDj)r#MC8Zi3dmGv9h*$ zS$>u^y+emWXSbYc;@^(JcCSdO$anGn9Lnn!McYE2ePrAaB^3urIk7 z>EE{y$@bGc=Qz2m2rEISRK5?nKVYH7b^Z|y`%j(Bfl;v^P!-D(%cN$tR) zgC&(YS{;Zx#__emBPj0P3!>73__G;&V(OiZaT#^3#0z5IKQe_hI!Wn;{gOSuP&oFD zQEOVxAai@N_YW}}F(jE9dynJEeKp@KMRq-9zv*#jIuQ)KUK%oJVCoy+!>wz-24j7b zdf{1^v$(@Y#eJk%7lC&~N7U19NL++SmDvA+QFol0EcS9MM*Zw}Y?U0$eT;Upo&=_33YMj+1GhTk7Y=ZBl>oe(6A6o_D%j|EL)6cF4i|Wo#?8NA3EO8o{=blsPuHO=Yt|*_0Q&G z+Sun=pP0QDQ=g)1k($XJRSigvC<&S`%4>EcXL7>unR7^j*vu3eN;i2bKOO&>x!9Jq z`DB{J++Hx*&u_~SKaQ4_0!Dt^Q3ILP4AvP`ozG%?X5e-imEHf7D?SO8?1Gkg-mQBk zma%+G``U*EFu818V0i}sU`K7o%KyN0HQ>^)*tL3*;s2GcjJr@FWxh{D41#@TjX~(q z+3;eVqs~$rQ9>>bq+CQaQz+A3m@R-6<;O8ll}!qC!@)*y($Qzf!zY;cjy-|2t9Rg zPspe9UQ(ZB z<8%(qs495rOt$ug3oq40HK=wpuQ<>UkGPLvAG-GuBp0SYs$}_V_X@>wPSYF4Z`CRl zfE5mfg<#N9?a}56XT)+!G#5rDFE0f)S7dp-=7&xz0rIztXxg`ec^p~<28@;pqP=@d zrX#fn&P3dy2|=w%h25r~G|@{_wCUbb^oXJYY$7wG`4jFdX`fK#SKIWhlor1W72mx5 zCn=jPhzY?dM!jcxU+<*C&VJ;9&u1qXO5O7~2u~s+jOAML6t-7J`JH=3nQMAT`ML7F z9Tyx9T4ubJyZ5s~H!M9I?2H-ERXmH;(<0z?w;Y&WY2?P(7?W4pkx8w`g|DiIMF;1x zh?PdhYZHA%Sox&_YPl56D+O`zt$10I0RlD_qt2bPaAypZJ9`S|N1M`wt7ElF5{B%y zs;ce6U7Fb7Py34WWV}8kI-KmzYMcpJ{&J$%LcPiInVoa6Pk-a$^d>h*({#Ve;?U{= zcW?n7-udpkA((R!<efrcxk!o^Oz7{6~N~_1Xt6eAArx$*X5dKbBwaOxC1C za7+|ZX_0%URPOe`g9jUk9!5F z*fQ}lc=O zsR*1{K4vX{-~IxZhk=ya-t4*k&Pyr0IIz0sTS?Q=zM*C}HCuZbfA#T^mdbWw6e*`kwcW;w~$czQE{EbCHx8r!+s ze7Xdu?;7i|;t)CG*!riH6<7E6EOJVNNXU`l{;IBvqD`{JnlJPesVA3Kp*3~B{XVvm z7E>Ijqh23ohDp>$20(%?6-f}yNQVGc8`p~wgMo03Ch&-qCn|QfR|b%6_;;?s^ZX(> z4?X$Ra{|z1@b5&z!@p|@;p^#zIR(3guW~*5vX7la2mL=Oq5roOU-mrYDl|LYKeK=5 zmS^qU@oQ`4?Zvgi`LB_ikhL82QBftGt5R0e_^kNAg3AH*;tObo8D{@PuN_v?d><@C zJZ(pQV>?@Pd*$8F2UGB73LQBir*!rJKcRh_vmnNjU?AhbLHScc_{|(=>PF9P;MTjM zr(ONlo`mD%nKwP9>y5L0_#RME`W|yB4(!-%9*(Q)xk^=E8&Zr%0FIgH=4roR?_6`g zz0V9rn9c$Yn!*w%HETi7MmIa#2ZjxhC-Q<-g_)zljB#1i2&gzVix;%HfE8*N*c`W5 z8mU1v^dttutYc#-Q|KcNZf{i(&|525K!7+VwNf;gH+Rx6fmwZLK^C%iV5eAdw_x6o z*kV1GiQiiaa$)W;!S6)#aW9o|OzY9#D{>pe1;0)|OIBn3PU*lzrur zyZu3Fk!Di;1}Z5=En1tXlRCdid%ixG#9UNbLhM+p*sN{MncI;qn#5gnJF8j0CsW;L zu{rHF66&RG^Z>V&&V*@@gYfUd*YM0yK_!{TFW*dr~<9De| z7p0!=8}P`*nEHhc1wLpmT$1?MxNp}b-Lko>O)9oV`B)vo%|znD;{?RqyyF}&Qh#!p zI6%TBN)%>xyv825{z+lnS;KH`H2X8JDr21zO6jD+eBwn*@szW=S*L<-EalvOgG%Zc zkP1GYg|@7|@7EpPpYm-2a~j3J*suuYy!B#h|7NS<1)>!iIPUu3TyKOyWoU4iw)nW& zfB0dNda}dPilz7m%0H7A#~6u9WWg-hea0;TcptnIGQW$$PAFGJlbRGAv%S7e_GS< zamxd9D##EyojPod;xa{fnJMy?H*Jzcd0lh&jHzbBx#C; zbQa_$=1%Db^Tn)vRQt~9m%%-mkt(GEM&BYhPKk>iYFqu2Wlip`(nKr(ZLRg~3{0r# z1*1m+98^($#Zb)hnGt(;O^!l^-m|qWR*`jQ__RPE75E1N(_^RA)SSqu$rSu#C1z2q zTU76oR@LOIQ@c^4c+;a)w1Xx;S}s{QkDqiKdLNt%6bv?mrG;M14dpE)*11=0lRZ?( zBzEW*@q#a3M?K(}uEfT_*#rhkOqHU>E~SuG)7WP^u&n0Q-%BN$YxbZ4@^L65op2T~ zBJGvUDEtPx8GWHso3%2*9y4=5EfjjK%63CjCA3X+*3!Ofgm<#93TUL5M}Y1phtALE z&<%oY4N$EgS9%xeG%t5yPg&G*&ip^!5MVGz@EV-~Z-Ll{ zF7;y}Sp1xVo6i(t^5>IaAAz}~bwC$+)=FokP_c)7N-f1L-dr7)i49~2B5MghrVJNn zW*ZWlur?LXBNg5poIhUt@%>6EDdeZU{M)RCbU$eHBloU4B_UodZGwsD#NF-(s=K~y zZzFv4>A7{CB=MDlXXmDlXM8}@|3sKi@&^b6wyI{`AGOxereT8U40`(Zy-&P=p3EaJ zJv%%~oWm!{t6Man{7#(hV>61HK4=l?o?9jwi#Qo9HI9|$r!(){_nR;PeGswX6glqwTygqnZ7 z5}jHGpH0Db^TnNr0h37cW?^$2rT>Y=FE%Xyo6FA34i((Tq8jPX*Q$L{%4MTUN{6aT zg08;BI+b9KNc^^S$K!&v63s8o;qrp_i<4w&C)BpR>@yH5-4vYsnphznJaC)ycv@aD z?bZIkAd!FX`dt<<+4XBEIQ2B~nvm3*#{0!lL**_#<1mj)IE8pJyW&m5U_FLwr};rS zlclT1dM1q1mPVQMn+yAOSzRl6l)hzKq5Chgupt7?=2rDyXwnz3Sio1EMsxG=cZ~zD zRxrI~UOe(LekNs4W=`LqJM8oe=W}VGG3@d#2?C0W06S<+C|rHUx~dg!>RioplM?Rh zFcr*=sYFnwkI)Pgw2=*J`*;5AIp{7eo#@lgrGxx`O)rPO`anlG3A!ixEsBIA>hM9D zGElYO#)h#ZyTZD6K^RfLDk7je#MZE!MmM{TUcN*%ciJ~x6|V{!V; zbKIc2=b>$v}Y5P;;^paUFW9h$B_(2k|;;(a4FO)-1&2T1Zi( zE~0$+#vR2%V5-yBAZx9vJDtMRz+N-yBFPUx;F?qJQ7P6Fo+7xg? zq!baRhO^MYPENrfyR*bVn@@zIdMLB4{-RQ&#_Tz zR2$eN)ax%pErgbtF#n+7 zfUGN`ZRIJC7|ubAl+nLKXE!nz<{&8EuepecmoIA#;DVnoqajQ*voY_`SLc-kVMgM4eR%gRm*kC715U~>bv5iUFIenWQ3o+ z<`fPgj}balo!}!^iW;;>JWin@p$>V62uJ13)MWVuakOGzi`H}L5CiVmiu^RgWBwv_ z%=qiBtKNdo1~14cw&}{*@k@q+kzv~p5%=5lJB?!vRd38_5#b&!DuvY9_ukZA&P@t1 zwOp)g3M#io+a*N1C^CisYQ)*)Zxw|CPHHTtbM@zrM9K{kFfFbYqBX#&S#328oU1F$ z5Y}--@W{sPYrV9@<%$VA%8Qmq_>0-hqNlA|GKydC>4wKe9JiGoBdST#zZWOdKsy(| zAvi4&(e7ZcsGGSTqA%R=8H)kBf)#FfIxV`ZD;n$|UJS?>JnIf-g-Yzn$`m&@8d7+l zl)T0$#U<9k_%Ajc!RwiB#Wu}yT+mKhvmy_gX4#$=od%m9GS>m6ISKJLXJ- z6R5gl`~#~o=ilE|@n(6|cTS&``P{kH&)^(>LGHZc>29Q#x}DeF%OwXV3d?(L9!D9C zyqIAy9+k+5>Sv3cH|Z)<$69P7_IPu-`jjY|2GNE_lAy(G68k9{&>J_gbtUUV_}QQC zx%~N}b2MRPk<0?(;a@`fR3s$yrweg;m#+v(cMZiZk1?}KYe2%xa-dKllsB{k8WsoC zp4Y$4e&tAX%4Oc)mTTTvU@L|clcM#DO?%=B z@mo7>k>aR?=%TD4;iVVyoRydZAp(tyFgZnD_7bS z3}nm*tFw8OUad%(e6N7`&n@D|oL{VB&!71e7eOmrtc_j$Md-=1IT18?yjVX#r736i zC`ZNN(CTosft%F{JVyx>Q}638iRj>kPk#?-4xAz0$_w8({8Ls0V6DVBA}Oe<)d1VM zVm1N4ZH#a3v^vZJHt$2(x&BF+jOaB}t1#~mR4gQ|sIdLUua}tKA)%Xyt(S{4Z`cQZ z$>L#9*lM$(irI%}cHIJ@Nbl^BYAOuQ!_7%eD#EoP8$RQswNq+Sz2V z4ccA!W64m=oRTE-MCxHCvo>UU+7r$0v216HXz#@96?D+*M5=$cxg#;qun93o9?G;? z)(1N6QF+xlz^hp;VL5s)$#czi(b!u4i(5a1TE1aK+lKD3LuNFHOrl@?0eq9RlR|&N z+|m=Cab0Wk-$IylLTMjqF51}K=~u*KTyYN@UNPHMY+ez1B@t^G}BzRj;C z5mL&2jYQ{6JuOheIti_|$S@Cx;zfMSH>SJCGbHkoB*WIeIqLPv$jSoSq5#*CLGdoP z=AzD_)q31Uj>wQPLJc*7 z^x(D~tBAC>i6gZe=K}uJ#FLGPZGH58O=}+W=P8BP7?fWb^g+m1Xvi-EXwv((B<~Wf zu976{mx=^=$I{7BMZ&H_x}kUbafP0~~Q({1H<4iJ^UO#=G|xuRQMwd*}TnD5XILuHug9o)3IJ^m@5v zCTEeQ*OoSQl=x~0441Xp7@5)o!;C6uG{+!I(3hirvh_1hYss6jU!!d79K-uv-fSh zZ*K!j3=NtnGkfQ7!N6I4<>F9kV)C`xe~P{Z=l;FfSgcWOJ?viABpqfM5l-p4W1YD$ zA+_1z#ssY=KPMDVO3H8<{lFZJt^9b8^CF?5sPmSqp&UNVNUeuGgX(`M`+&Rr`c7mT z;@Rha4@}hKv9)Vxk#V}xa(+U=SdrFj`OrRYPc|ff)Vm?ce??~F1=M=2lWT+Y_Eqnn z_UfeDX%*RlhG$w{X%PkIJ~ZU*rf4A9mrvETW*A@p_h5O#H(r_7JUpFxKBXrJ5iTI^ zk4FM|+w86XBz7-Q74v7gXa&1{>g~9v0o)& z^}f5;B?#7wk#rg;AK6-IvHDf^`>|i_A;@_E;Dc&28oJ@|musTx!Q+xOn(@C$w-_&4 z)A!r2Mf_&GUvSQf5CBQ5GBX?mQjPEH1PKIFQQuK^zHUl*gU zE83_0%82Gye+Cb5CX^0jFul2mEZ4p;uqJX{$}TF9A6s8c=I=nbis|euNe0W{>Jja} zF5k+{>bL!f$7y3#W}v$O4}j}BS-mcH;UE7~>D3)-PI^7EfapJuk7>xU2GpSMG>HqUf1U4LSJ?ha!Ug->W68?<`NYQ%bH%~G?H_cE zE@1q-3BCN()%gnU!4LcL2qJMu_p$LO@BW^WNLKvP-ubco`TwNo)%Z>HJws7x^?zJ~ z`w&6hc>eF^!6DFhT-}DlYqjskcm6B;`7f2l|C4XLEmGeWxpSsyMM&Nf!t_;Q&30$a zq79Fqi-ZW%w1O|_YHsiI#o#3gFS`G1M>6c}+4bqfY7tKa#!S&yT7sperJFzfH5Y4h zA^U3AMibQvqw@R1(;GR_QE5r)!j}&3u?H3UiK9!AXao3stkb*Q>n3P|MYX0He(I*g zmDhMUyDn@xPf$$`xx0|kd(|l#MR3wt87~nJo|ZRHUR*bvW8Pd*!Mz)Qk+nDLbvz}` zZ3tNJ?;y~mEF z9p}jUjyQ>5IF?*93pYGx;sx1tfO-I($}{dXjY*Zv`_}MmcenZU^A%I>bYY$Jj>gy` z$?&v@o_3=^Cwl<{dbI9?mY77Fs)-=dqE(a-^fR-XCW-5u3U3((D*}u2R4O}c%)E@psboHa58(J)k zOxS=;n)g!UTcka{jVnF<-AGH%xs42=Srz*9Z;YsjBo!8^q=wn4BM`*lp%35$R2-<<_-b?RP|NQ5))t6GbGi~c zc;wJC{;LJ?YX5hukZsN-RanX1Q#$W|(_U*f-*JVamLu9)m^oI34yhp|e1Djut=*EN zUsTS9wZ@eXV~fp1?Lxo5PQk0V4Y!pbPW6hiw^vM^$zcZj`m7cZX0s|e*UaR#ASou> zfe*uoHF}!Iy0*EnzA40b#4dZa9}O6BS60|GVlWt07;KYlUZMjkuF{>LY#bCD*_S_R zKDz4HxTGS`)(4NhtNpb~k%;c2#Sk!Xx1~|lV6^He;la40UrW7i$<>;fjA-OjXS*5E zu$0SkhDKzUcn2U^ayes|q*qcUBpAKq98~`x%(bOiMmRD}SEUmlYUCiSB zh{oJu8ElG`nnWQq0&nH`rx??7izFPcY<@EUbq@-189SL))0=pSxD7U-Yp*p#J zv!;v_+^QY8YTZD)0+JzHN#XH?_z>$Ui?KsRVKcH)F#C#>?H_xt`1FI$1O%tf|&)L6T#XE?T<`QTxx>Ha1D=F+8?y+W)j#;@!|se5J-}vgWc18H;YXplvANPN z_?q;tP8G+jcCWeaPbD6zS4TVBegeaCQ5wir?7uexC}6oz-?|@;vR!ngY`Smvk0>z-v$Z6E^uOALF4^kfp>;p?w*;|d(=hgD zA{e-zoN4*8`@>O4Wy;YHo7d<1ohTx)yhE4b+#Wp>iB@#OE~UIViYF>#5_{;gl)6w~_Jgo(p0hIW_Ny<0f0l@}P~mEVxf z>JhyYVnQ~X@?QD4sANes=5}{p-K9Xob4Fvp(K7~K(xsvf*O^HBs~OEjUo+cP6;|1| zzR9cpvrk#gj#^=k{h~~EapfpE`54{|?bNZVcWa5tfbqbQeMH#EJJ=^tu-^ZB4DFS1 zRf}$TyOj6Dbsgx&mN6HadWSB!c~TfTUaptCM_mfw4L4k85HYL3oo<6|&x7S0`GUt* zdxu({Bdb?VdBmPwjCI`aNYj-g?8swIpY_V=?Bmq5Bq-$f_}(B&&0y0jD*XGOq!4~N zewHa1AiI8llIN(NZqI$j7Q?LTovzO#paGxFcDfd*c>c~@s_<0y^r2>bXyt|Y=}fvE zsNohksMBM9KTNF;%HS5*k71H)CYfIHmJ_v$n^}592UWi)Gb*9(gW^CoG#X+Ur1gE0 zAfoUMm^7nbWM;i>Q8tmW#2Ob~58)g7rJx=@oKWHGFD+d174<}|+bmzbu)vIxPA7lL zW1bEw2OV>|tvhq2cTN-{uLk-)w22UVa+tb5g_}eB_1jWv;-Hz(ns8$MuC5{w11VNqmjOgj5*X}&-n7WOlQsT|j zLz3!NHHZtH<_i{4#fW@V@jq<2{nR=nJoOM>8lU2n=;)J(;84Y~M#a6gA6e}-zb=Xu z3rn8Q>?uh=PM9c_nVZg`HVw~3(F|S3vR<{f!Zy@QB(dnEHzn+EeSJouZA?rOjptdBT<_ zq8GztFm4dnd>O0P(AQmvr zsDtPj{kPF)k<2d|a9-4Fz4pS40XAa~VEMn@H!{7btx@8gZq4@r#K`s4-lfGK@rAfO z_;p%x%`J)iQ0H*Nk)o%6axDyDcTxwh?yB>OPx(K3xz4DjvMoHa9y*9+q=|F{#DEeV zAV^oiiJ$>ykR~8fLN5YRLvcVr1?dn7p@~wY28<9AKm-Yh6afjnh7xH40ZeG`63}th z8rPaP>%I3k>)dnBz1e%8y}$45PbD()2zt6 zw+wr@ab8i1+TOXTy1t@gbF$6iVK2Kkjuup?V^SX29pGK}?0c<9pzjuddD$d8cu}YJ z^~o5xyFTPerv^LLx@bDw&AtS~!@*G!xdLZWNSi!-M~=fKe)%v_8MGNfl;0nd^qv|K z4)JFVa^X-|G`LH5ZSl9v6Y(AM&D@w8>9KOEfY_-7jm4sqp#g@*Z}Qc!4?X$K+jgx- z4VJ#9b7$dkTwx2Ry^u%eH7zINS^VYX*ld!2GVJtl`lU4o?Kpfm`qyhGTL!zeGo4_9 z>qTOx+5#|52Ajh-K~gbjSQlmm`>ENZkO4kC3no#nh=#xxJPET;Gky#{)WU0EhDjvr z@*AQA?KQhY?9G5Y=yzMMR$1B$;B^+Ry(^X{QV7ZR%*(N8QOEfWy{X0zu910iYG9UO z1(9LwM&qmkEr(qhT9t+JwJTY@zm3(=dJGHi^OIPv}Ln+OmkUX*@4>=;$!F-`hZASj)0(M?FRTnkUg~H; zFf(3*e?z)7sFf#Y=%gMwC&~$gGjW<;H9K{+h+xFL82el@M@Y{tp|JQ3mv!c34$iRi z`UJRqX=3YOj4u1Zxcs_C-t&mtau{0f1XKVW6d>Vw(UgKhTKa^U1<&!rKdxinK;5e zrGqcY(D_JlbZGCPT2RustGE|wFKpWM(KS zMAFt5|Fqx}I%yfwhFr&zbUJ71isTVDB)ev5TzxkSGW3sVT~g&#^q4B2`J8^G+N4PE zx&;J0OEMjMHyI#9!_Xe-vdq8ka6hxf_A_*T;p&+){`f>v*QrrbRH;`*h4s-dKB#KU zn@D3b$yqCH7`i7_0Rja(o@34OlW20D56Oziu{i6)BG%m|*`kj$A)fK#(p>U(jPCuQ z^!(+Dz`%G+|Hp~>-+_G8MQD1Wm)t6f>chHwepIjLjZF_%>gvHT=R~VwiQ_;Gkz*N8o38v;tqA;ig{KiS1YKKtfG?uwk@p8gAR(`wzSWN>z~y3GVpR6yM5e67 zw)s~B^~f#;#k)J!B~kR+xwVAlYsC?bZthSg2Q{4!CDzALv?`0%>7m#>q*q!`F)7^I z3&N$Re)CeUPtN$fjH;|nNTx7;Kr3G=ImK?`txpnaO?Wt~um0=}@LSn6TgxdidF>S` zGTJlK>(J24R`O_Dm8&;&x^>d8UXxn5ygEimk4+{T34b1#Gj|ACgZdSC#(v5&Xs>ei=$F&7TZizoF#3%Gz`g0@^8`@4ci{XBXEEylY=M z9*Ri*_}RqkKo!A5g20-K*vUUKob>eo((cWFa6BD@ZMTBANfFp{*A4ga@7-Ll@eE~= z%uw5#hSbWvPht0xJ1SuAkUNHB`X|O=XiLXRe|<_5Lum;Nz|a?)p5!xfq060X=TwaD z0)6*8kR4s1K|H)@Z~o!B&sOjC_NGU0r=O_=1m^%pknuk{9(TonkpqWhFPQt4PVeS2 z?NsFmZ7x#)+}lABtHb`*BJl6PZWxVk<{h*gU3t&X>mta&@CSm7WaMO3DiO_dyxZPX zvRG9v%h$nsl>%_7zKkFX^d|2RcN&Q64?xlY96h=t9P@It=P$WBx#X3(O{=}aB=!mA z0MUA7yccsRW=wK+BDrtmQMqZPQc0n#d;C}uk!rcvV$N)Kx$iv{+2G~E$E|Fcb_M3| zF%q24A9X4)c{QN)VmRa5Y4lMg3$4W9o$CjZXAC>Fl`DOg4YJ>{&kan!O8j-(F#DJJ zAtkrBN_Of9Rig|*J^(1~Zgf-O%@bnFqZ*6Pt-D!VA~1uq#o#QnP3L=Lcx9?^ETz`N zS0f;#F$r0J$$B6mRrZ5GYPJE`C+vN6Ud*3pv_R8uUg`w}?qgH_oa8{?xaD(V%qR#@ z71_*g>n6cnvJ?8PXAVRK`xy|N4sR=L)Uen9~i zT}EzC>AJeT8vJ( z`=KhCsz7^Y3uVjt$`0x@(YM~jw40`i0lgjIicWy=C*BHfo9cQtpJ&j&dLcM_4d9#? z_|o9|k}m@4fK(p4TXGjwtYx>rz-xNoF*RDKb0>n9CP)b6Lfz7J#E%t34QdNI_|E4L zpEIPkH0i1$GcUZmhb>Y!B9R<0!40lU@5v?0_JA7NrwfW8T&d|ipleptEehZ(-AoLh zV3Vujtu6JJ_0a2&ceU%x&l9ED$H9sXntMGCE$HQJwYXuc%Uau`5x*@(9P+r@dcJu< zIA-u{RJwMQECWvmGIC{oYg!F-HR~wf)I!V~`!CXB$^c`80Ik#)op3W6|NUQ_{5y-xIr*OFt%QDRLOr_}#t26zx72v! z)0>t#kCi1urH7*09^^YK?%DU$9xlLS=j0Q8LsR5+{9GKs3~_M+2334E@20Ypwss|NKfYd zEFTX}&O7{w`{VAhzu9-ety)Cv=9c+?Hm=qWY1m}C|WKH=G(YwXbcT|A( za*uC?fxiFKS_UpJ_~<-$g#&|{$K;pjFM&WHazzC> z4G`$;76^2v_TpLK%^W>A2>5fxS>y3TP)QHtBJkzBr3^#{1VTlU;!G|8-$@)4^qfH; zie|#+Oq+ea83?4VpeQG!%|;-d^&;Q;<^m=MWk{VYGWYjSfF}k|BqA65wK62MU22it3lNvxjS>`h#2FAM|4a)# z01nr@zY|X)j#@}8eGkHdQyq`w!~-PqBZ0a3v}Va=QT_RGY}ZtRmocDAKVsb4VVkA`Ix&@AWUsHj}jnE_zc1+;ACzYT=A zXyJo{|3FeG`u_P+iv$lsPL63nY!>PaJG1&jGJUwg%kB8wknamanHf?mu_`9d$D>n{ z>&%k+M(Hkt>uxXVOOH`?dFf_Dy2yfU044o@UudTeJj6Na-gTaAD1uR3Xrr$u$Uehd zw!0doE48g(%0?&C*{6l{_W~K#-q*$mXZ1S6O@_rpke~UsV4ZJnn z*0U))*==(1ptzol+1tZ*dv`{@LpecVjlp?(g2CvLbhGDjxNhb6c0;+}YV0bq$QQkx zBP+_<@iKj{LKh)LCdh-G^{m-i>6&1j#4k_NA|!_pHXhxIn(Ll6`_t$ff<;pv3z%~P zCB{eh#lFW*8RN{_UO9NK*Kd2CzS`YhP4BLCLR5BE^>vEjWV4>tPF zO+_V)n1+9B{&4TbswIZV(&w~9E>YT5ln7zzbQol8${FxJh%vX;2nzOg7B_f=&50vV@a-v!z+tPf`^P;ClcMJ;1ypiS zG`-fobGE|SrX7h64qJRzCU*|cfV6lu*Gb=ofn%Q89rjP-@%S7uKIJdTEDsoex?`nW zw@*(h+bE<8=gbv((CFUmP@f=t{d^5tvE6}mtiP`>6m16dsXJxDW<)P0eOlT&6)0AuE z@#U2O?OW(wE~15pKH83zTX%D>yZ7Ah@81nN{*XrBm>`q#%Tk&zdA>449(vByeGp}y z+NrO0#9)d8F~Ed_+4GVfl!o zzxB&hwdR-Pjo_v`Rh^SxHZLfeKQ4jJxc>Y?FAQC63F}q3qxZKzGNyxJ#t?u--3vnO zP7L&;Wy8VT=`V^;$bAu~UGO?#{RLt4tqnU!I@DRCpVZ3yH$-RX zbnn7x@$P!H?)`766^jH9q$A3BrR5FyN9;1i4T%@-_Pwm9c9_PrvEIWD_8vW5k;Y{P z%E^&K*LCINWXY*X+=1+=DSmQ-*ckC_W^yC;7UEPC%fZ|deQ#%YTFiKP4HsFEqht_^h2s`|K6t@vrK9eG?iC%3+K8Zab&-ju@|AW(_3CI@WNjJZM5y>ZExp{~+cK z;KDnZ2`)TtVT6A0QV7_zEq!eCD%tXZt+mIxKb|%LrvpRM)j8DF(8aoq_O<%_fL9?^ zUhE~UW}mDsW(4v&iTU_~K!cqFyJvISlHD?@nuK5dJ(oDP^{h;hmth(llHEAoRYPL&lc6UtC3EDhZ zh114{V_)n>i%ao5$()0(jP>H$8eVUvR$x52+I9v`*{O9R`N01Ry_bOkSE=c7#QMqp zsPmfVo?BfV#-Qt;jGWr|LciN})S9+0d2HBKR9rr5e$ZmKu~Wj7sUL!}=sx7zbJ#mG zi?bcCR+}jAB6GE8Rr|})t2`A@_e4^yH`?`HqlIT%&NKT?Y|daRoPZGeUZxk zk*+65Ny_Z&ygfrXl9qj*YIe}4&NegJ9km#l(t5$Gz22a|dfMD8Gr?#DH%aLyAn4Pu zIa736ziJ-)u?2r}pWJO+&jBe&`NPnAGHqRI{T*|V@%+*9JJ}%D)ltqgp2pd%zg={* zdllDD)YL=z{X<^niQ~XUkK;IEv`Hg+)%V?$v9WJwMD(7$<_Cj1=b@uzj1z#|%CK{D zo7<$PspZW6>V4J_0o}>nopio=x7G1O_0PVql|~a|b4Q!@tjx!fivE((LQ&m;ay2I3 za{Hljx)Uqk+GR{*^L=T|&kuKhE40s4K<8)~;222xV8T4&h9g{!#@F#^CK#_9MTjs zC8=xVzK~n;JtH#a>({9UtIatp^jY`uwvq#vu{XpjJA&sT7(KQ>y4}UM zUE9_znZUy5nMF=b77UWzn0``fMlyPS&q<@~ISHHKLHr5XN^Zg+n?Nio8wr*bvo}RV zU2{FmNz@<&{GWi|93n8qxjx9X@0HdBzOE_9oC~EtWp$+S7$M#sE z$Gi>1nL-19wuxi$Z%NKWxGh%+9hFyq#}2B|z}3P3_;){TN!|M5*%(NaRXQHya{BJb zN4kDB-D_P@&wY^2(#WB|%qxD<`<0$o6GnNxVO0s??U8gMP`Bt8hHrZ6V&K%wOFL?H z41ZD#EXtsdq!ZigY}?z(8+~=sTRHAHIsA>ALRWK}E+)s|=y<=lu65n8R(!;Hx7O#x zAl|bmP;PIg!e_Yzdk*w$xIigtFtZ~!N`;*Rd%I42UsVGo-zS^sQuvSu%c2Ub&&z|Y zFWbe(?IWw*=3<$MvqRU7T&%83WLZre?=tV#mn}^5s>PUtGgza>%j~z~eW=CjdxTo) zX%oBCm4>f^-i8#OubEX8yH>Y5xh5^6u>L(45s2Ai0YQKy~@Jwp^s<7FJd%ug!d zLu<>@rRWx@b9i>Li*8p20B-it`(SXBEvwxyDF3cD$yR%^&81!uHUp$0XW|`fVq{JX zvleG_fZkQt$vs&_bBeui+R}U8l!vpuJ8ABVvj$=Ub(YiG^JP&D39}Lnb5YIBvXte#5GbQFQpU&Y& z2y?^i-s4f@OH!$e%+C?uVRVVMvx>S>Z1Ix*@#t2@i4e);wBQs<$&5t+Z@N zR%_~Rpm)w_%}&55KSi{lxb8pl2)fuR5I0nr(|UV^+LbB{^j1mR52sZ|r;$r_;Y;#P zPw7;zSb-qjtJbntTs55>ly#};s%tJm>b?7BH+XfCjvnodf>Sr@#qh<k*O+fe8>W~gtA*iZ0#uv;OA?s zrCwjsfW#kAKSD;&nK^aR!VMh+Crr?8DGN(E${}EoQWj5BW}`!z9Nn=?-gjk<3zqcL zYqsZC(!yj+Av}s4x{Kr$T9-%?2dHgg_|l*q!_hO)8W==K+~Z_qKPpt`x;z1&y>^GT zqh&NsfIHp&2Z<@Iz4$O|Qaf`#k zZy%c|3~S>PU+`c#${(de*@Gy!;%A_;!QdK;l&}|8G_oHFYOp1n&)asg-Q9}u@gd%? zG~|`xs2_@%gbDk?~c-e`w@POAH5PIE^S<~xkzl*tvGe!qdV2~D#5kZ5?*rm zR$KcxO1|s~0&yBKb+RAh6?*uROIRdZ!c&fO8ya}8#}ibvc_{F-puj{1iI-* z04oqmbK8q~Bp~BEbRk0&kIR^sIh$#buRH;`&6lGhj-TDN$zIa4&{qEOQp~td$7+CMjXTeRosEen zHTY}m|H3`8u)Tk^^+Z?qc8d@G!EGw|WvWw433WCXmoE>;7bsh(QAAXmh}?6W8h?h6 z^I_|k>m_-WF~r*4r%4oV6`nptUEV)Dhmu3e$l)>;AA}4HUL|$RkiM+!eerehfpq^X z>VhKPYd@qAEb+nM;NVkXrkl~VwJ_GTZDLpm)c^m{kd|ti$LHpZ?ZYT-eed*C?w#tn&d0y`tgVz4 ze4ctgHT)7E5Y24N@%)`QcT!(x4{M+bLtW@v%4xrj1w1DaK2%i6D zk7@={U%L)kxCSNmGW?Df-dOu@iOUQvfX+x8$s%P${wbR3UpgW&8za_OW={$7^CvXy^vPM7P|EH|w1G9p`*LD8=T?;*# z*lE+*za=u?;@6vhD3_Knj65*qpW0AJhazgm{6nd9<;Kw}pO0^%`iVGqE7VbSo6aUfd|INd> z(1#(f+=!^Rg^!AQ&n7KOreWw#WMQsCQPA)4%9AFp_|y9@e_M^y(BNZ5Q+#u_J`AER z+pjNj!R3zcQ?X$1;s+yHwT4tF3$aJuB0bq-&-(BX1nSJvH^l^O z7I6;05UopS4uHx6XN?veZy3bkv{lrFmU~!qq#n|J<8$uXxsI-n6Xs!Je0M|NfGt>U zrS__0&eW$rs8*~N8{xPIvsM{3=(^9$mn2?>7LbmfWv097&D~VE0ZD2stOe)rE#b|Dpll3$X+$c!kBfqnMKU4 zkCPij{Uj3`(q#pZf0BdZI>{+W_I;^vRk@BU?qSReG_A}FyNf&@N$IRA?in)JJztm= z6**Rf48K?MjgL-3aV>azH=W0AN4Z+yk`|b)Xq_7$Be?CLSh1@m2eppu9vcI0~X``cHmr~hDu39w5R($8!k%KQeyQ7^` zFY+hRY(`{nYmgR5NTY5GNa~u+&VcVh#!lImAIT$=y*%VWP)sa8j?kOj>ird~?tf4D-dI;Z+5Ft&njY=cC z1{X?ZU?fvnev-ff+<9r_Fh9(R+Y9@=o*n9Gaw3nv9<9^$nrERyB-Tr*nE_sJN|@X2 z=H#@-F#}1eXewwojEnO~S*!ldt-WXyO`_N@Lisp7`*1TeKbfOPt%dJelJC&8XVj2- zV9#gnCtbRBxG+Q7^Q1LB*0NPv2_NmD8ZjA?;+hVn!BurhOuv}C<8$>aNd1~N1KdUp zs&iugzD8IN<{unYSTKSn;neB6=DIBdlPi_D`c9~`1}QcrxW)C}+y=%S+b!7SrP#n| zjoj>!J@OKP#};ix4hS^FzIThM3`!Nhb=RuE&5UTwO+@-zlCSz2a8s3~)qvu<9njHJ zsu9G;PRx;_>$y7Lq2mzdKzzyCRbITRZnxF4eY|Cktlun792Sj|*Evu3xl${pJz2pi zOvEWQ^|qv9crOz?zzsQoc+L2@qx#Yr(9Jj2A>hquz6!F)kEzkR)9k#m#;-x3w--*Ztee`e5+uOBvt4Q5KM~!^opv*Vcjtz=To%#c}+qZg9XhK0)C@EI#%_Xx;VT%FR>?y9D^Y*=Q1bjDK-hWnG`XI z4{GF7f4M=t%CbtkENZWYtQGQp^qw=NHkF4n6{3=yd@suQ>X&4>Z5$mfB%>}H{4E{Y z@T{-JnYN;`s)|1;UGT0LEj)Di+RX3?q>0Vt zqMX(Jg0k2vl=JdZmK`oHb{X8l1{}WS`Bv-gy0O?d+r^;ocf&bvVL_P73)O1NaQmZZ zv9&Tq$~8vEQ9teCGPSy@nhaIdbJyhvu;rR!THe^5p0rwy`o}}7mWVSX%zp$Z>Q0>e zjOR0e3YmStBKGtSlYcrVD8^Mr;QmtcUOlO3zF z*Y`Oc&FgMOc;hBdlNoK4idz2-a9h-Te*zdO$ovqqn-vlcUM*I(KflsD7RsByBbRc4cx#Q9m}7=uR*}Somh_FldD3=1C+cHHnv3YfJL2 zDuweSG46$j5eEDx$PwFgsOkFDYzVm5uHIg?^xf?$d#K=3Y=2={L05ss=aH7|f{t^C z+7s-}#wn>QDv{ujd5=njl5Ei%uxFoqOI{_1mp^mAe>2`mnWZ`p$s z*&iH@xW&}KmUvGt?(OiXVe57(`lURrIZ ztjM;M*&1y7Ig>_!X}F%6q<=?wDSs5XvRlkMkV9YqriFeRWdD`JTP3N%N%QM=i@i?q zlr;=PH)UYr#nFGyX)LXq87W*b%w&K}HGGQ{1|i+oQummq)Tb}b|0k5d`74kGC!_rS>fpef)~#t9Sl__x zD_k)6(`A4?Rv)vH|7kLA!^qY70Gf&DKl!JS0U1LwnFIfLdEUZ*iUAe;CF@1R*S_bE zz%Jt2e~gzjjQq~||4BfAeC2h&4Pw4<9j$+g1CR!ly^PPy`4(#ZPYSfqKfCz91!(R5 z0Yv7o_^vEBr8GEb_=!FDwZzlXTL#F(pO5iZ^F5f~Y3pg8zJe{#FrN-@XgUWo?YhEV z9a1t7T;qRLB?4-m-zSJW%Bk(-J2*tain@KpsLe8YEsYt`4X= z2*ko2$1pG&s@YGd4SAWWWv343RfQ1Jyo3d0ii_`p@Bf}kR8je3U?&*-KyJRm)vc8*PX&sqI3sm)D`CyRb=uJ4x^ zwXCOPNcUK1N=ZE(Duho-gnGHvWB;|OT()Bh-*EUUKil~5sGVPgp6DZ~k#)YHH?Ar? zm)x%o2;`TokgK*bx!o;a*fV>s?$skSJey}W+^JWINqknG1%n(r4T_&%!stX6rd?OR z!6TMmaWyX&Ksk$5`(E(HE=XYql$U<2*&)hkol`8}2|F3vJVJw{+4kxkH_1MK1?z3H z$wH)me`k5s!j)L7Y+)aY*KF99&$M~Qf^bIzx3(p{1mkGxJws93m>ZE2nNI%t29DOA zE%ce=DknWQwOMuJndbs1$PZxz*h(jD>MkzBQ$DUx;$Z(AMgo4nkb$FF;3#hh3Ot!?l(4ht@x7Qea6t=*2J zU0k{GbJfOvD!$LeQ^L#HP(R<1fFky7M=XE+hTpo+z9iM*Uf7%2%S)N@$v03$!2w!x znT=f1p?xZYA1}B+N41XKxm~q*+)D>nnI0<0T0yne(;7?*uN#?7m{{w|ggGoUNw$QC zhj*MAaplETiGHXUOy9dxk*F%ndwSDVT!q6`cAHInvZVB+>0s6o(s#-7c`L^$?`%4h zEX~pFxGS=!?t338dShCXn`5knBsP1Y%gr`U+eFvXpysd?tz;zSwSTbjs3xU*qztVO4s#wD%ix4or3u!K?XrID|P5hjC|1}V)JK4lh(Q9;jfBu@K zYu>9^@YFouoO2fL>6{X!-jT5C8_6Im|GCvVnq}J<*Uve|qNQDvHYb7=z(k9L@uKXS zFsH8f$6I9E3@9#sf;RB|DrK=QSOm=EMTHYm>ug`6yKokT_3m~~D{axI@!HngVGTKo z25{H-P^P3;w>X#Uu4^6PWec9pT_m>P9m@bHAt~({D8$vJ8VpVnD(^ZFINiW=OB#91 z#r4n{_r&U|j1C{S@Xf4?B=|;Yb5xvfdcjgNxFt=#lQi^U_uk(7{t5k&rNGU3U$tI% zQ1>!^VBUb)Kp?H`u!TfSs!V)4mF zyRFH>y%O6ii<(ky{kl?!<)KEW{nrn#&E~x5?jF}D>f9I zXXHJUvFBP`TMx-9h~4$3yvvV#gHsps3Tz)urNh&k2eZ|LcYwkjFwntb+C7z>2`|&Db|& zEaNP8Dts#TC5*{JsgpC=+9My+%(|}8p|~1y?6Y9u=TZs)nkFk3FCCZv;5_JMmLiJ-%Hl_hz|`ru4y~rArz;+R#DEKUm#lo1EBL(I^Uqg} zVoPIi-8cEL`3!gZ#`V3HAAO;h%yDpDx9Bb8o3Gwe+r_Gj0G>i$`B#mgzP0DzRk)NR zo+Iul5obz%8VD5XeDu_ySwQN7E#lNyIxQ^2yDc{@#W!i$E}T|?Xr}y~W!3~?6Jtf2+DB{aSq_GDXmq*lcIlPB;ea|}z ztd`mG?3~AVjo&?NFCCk1v>j`hNse}v-Nj~N3LYWb($bfJ#G zdzR-wPZCkt74OF;>lP=mFEDSz&S>X48qBjBwp*wwTUvJ63?{|>G8J2G&(>@aySqci zw#M&{iQiEGs;jMxJRC@sNvG;j6V;VG4;o-t|7Jhy=Apds>A^xW?+e7W-xB6uunTpb z*Rw24)Ckb8GokV3FHw3i zYSiE0t+R#7?ido`bnBl$&9`<;s|Nl^t$~E}tT`-{?N@U4(KQCqA9!ATSxD=>AI^OD zLUKi}b7qxWX1TdeYa!Xc3ppD$_5R6}wtUB&0WZ4TYJFaN6;o*3t~y{hQyc|lH}#aH z;S29#(5*7kUU!o6i_Nt)`;#m8dPKJ;bb$av>%A3*>0C(bT*#}4`2uTg zu749YZ7MjycxcIYC<#G^-~x@?J(3?zR|Tx&qSEpwS`AoH7Nc{z-hwqN;l?ph!QZ}# z@clF{Z8D3;!p%HdkzKJK<{FwoVI)$oM3a0nt89J0N`nWDOX)BcDQnn)hAa*O1n&xp zB#A1)s>yxB{52NIMn(UwTA@(qp3mC=2(v=rAB}M)D1BanF&nURP7-n(6m>5DJn%zK z`Li-*?7V125Oa2QubrPU>Adec)@i#_%V&KEF@l|t5No?3gt1e3!6ml7`aFr&_xf8n zY%dc+iVeu%bpc8aF$ely{viTsd&g_% z@)Vtu^rNK@_DKn#kBd9|OKvU}`y9@0(r|mBD}-zsm@q^6==X)=-#kH(O5R}`{^TNkTbA@szOy%L`dPxNz+B9hRw5b0=NDP)hn!3|zQwqV zd{mrj2w`oNJ(c@pP?SAJE_NX*}b;Z8i4$z?{OU3zH6BmX= zJ`PXITtbQ6kw}hZwV40dA-Zt)s-KnK7uWBRBreWZ1rWot<=v`2Tw2=9W@r{+-^{G} zB1fsn+O%$|0;eW&T9xUjl`ZEPYte9n>nE=Y1POY4nM^0q(DEdeX1&xHW$vY6oYIL4 z>+TuxE?x5VFn(OLf2cLx=pKG(>)phkz3b{$c{|FNU`XN~*)~krhR-ivIAl23`ks^= z--_*-Bq#SY3;oN{5!wO%0yInG)ctdq1&!MHd*Q)bIQ3ianL$~7iKUUJ9T`k~{@%N1 zP*mP@kMOlg&p$?ztJJdLzGhYxv-)H|{>$f@-f`Kmf0*WhO*-{x6Vry?in6);79nn8 zqzt6~X0mF^=Y!BTx*FD4fqHFn82L*Rx1Q9%dE16GTS!s7SU0{eU{lkg*xFVQ-N9zc z0c*Z@Y4Nm6{MD^;m5+*e4eagTaWoN)2{IbEfy>@P$$PKxS{Br6u#Bj$@_gu;5a<@p zh=1{sU-6XE@HKF*Wz7X66%(;Qrm^BQqqY;0RF(U_&dUH^erVC`*E(3dI+0r;M!wbG z=iPUICuM3+=23qP<=&!NcM$Fqb6H((0q6dDv6WsNjAhC3jRT}pr#RRu3i>0 zN}>+o!dQ)79vC%)+uL{el+$u1qHAsA4j-NCzgAV5Xbesg1ielg8l}Tq$13()s8XW$ z;l34$mP=ylW~GSZQLK?1(#r6L9h()`;irr$R|Z5u(SHPIEp3fXIBQ~gG`!W9GB~+ zYHqWkBEdhp%X=7iNMLk#-Y!_ZoKA?h>K?-Q9gEbMVpehkaOOiwA|tgzUfOI_cpgwqKhaNRMRSFpCCE zq{P9Xq3~y89#&p}bepD_do;2fy$Vb*^?g(5T|3QKj&X$yU5fC!N=6aeu8E`*gSF1G zu<4wC8F8;1Ads|2o`LZS_h(|d%%w6f ziCIBSy((XuniV;O@zu)k>s@ip{qe+lxH7)57umAn@3ovCTOXqUSMpakq zBh4VyoNFT{Wx~~n`EW&-OV0j$4Ugq3kxJ>W%q+=ntG=*rcXWpP8o0Hhkuj>U@Z*5? zH(;4~5>rgG7iS6wX-wtH;yE<|=DS#pxjgka;Z zDe?h^nt@>+(z_Rz?~uM#g7HvQio7=EMhs1*eT(X_s??*l^A4fYioGJx=}!=U0i<0ZP_u1gBG6 z-h0$CP_SU^v{}{l=u6sSzd-6vNBLaYlZ1G6LY|e1Bo-6qCluZel%z)lUe)!q@d3MC ze6a}8nNzQX#)@{Yit6QIM$MYy`|O4&$}A%@h=i(QD*8;~&9^t=XY=rhh2Je@PXjG+z(9}Y zcU)jkfQ)Lt^?mg#zw|TFth_i=g*_W-@m5~<3naXX*#T*#NI_coVZY$a$g z$x^ck$e@i|=Eui@+p8lqtrymFCOaEdJ|a=;yfb|6_xW#Lp@+8`>->~XzuY5yA3L0V zU8VOPd76sWw3&vmNPYR0#;Ms#wtK?6SKwMnjyMgD0i9q{0zfA3`MKSae!-#uN!FM+ zjp9+4(0%6Zdx1bx#mLc1j_&}=Bxy5C9YflIE?J4o&9yWQ51z(}K%d~{(v00v<)lHm`0go=td4$q#YfaXa=1_fNz$#B*Q&6m-f|Ga+ zlzkSa+0P*O<2n%kWGeV3qYOJx2voer&O6Ouupl7~A(=Y+Fs7@+NOw)>uRM7uU?1DN zMS!X$vx=)QIlz~=-tBn(HpzyNxCFiYVU7_I#STYiWM4^h+9Dp*38so;C}bqGM{>kj z1$2pY7=XDmoH{$WY2ZIpfRsEp%3{E=jR2`^F0is^(fll>?*rT5>rZ~C@E>U;$-ARk z?`fOb4|+#IX)J+^evMO0@(d?7Ov~~NNPWA^f?fa{P-QK3@M^z^oQj<=fC?z8q1Sdo ziti0aJ24f}oB`$A>X|}D{lPNGLlBB+j)gYHP}S*4M-C@#Vng4Gw&jNh9^y`B9jN($ zna50SD+)JW5Wn=CIU62F2k+)q=Ne4S7Cj&OdlryDrS^;fqs`raqT~-y@=ln|Hs%i$ zl)xtZU!nZi;f2>2fAD-w@;*=keoY4Hfi~1~vg)`nf7)u|bs<8?!z`N_jvLo_fTR-! zN`7ekf&wEM#6QonlPKk-b>=+*snZ%}qHs_eDFGFv%;5ow>!86Kh~>-|6Xb+{B$`G@ zu0csSsZ}|$$i#uPm1tW8qht5C$4o8*$CLYw`=P)m18AgO$-pn(Pnz6LM|{L@GM~!e znx%09@0MuP&wKHWEO#22IyH2-+>D<2`F@g{u4S??T7}y8Echcdc29g@vy45~CW1-a zY4+mC?nPjA;Npb~5r^TpAkVl<*h2B>kbConcE(G#_SYN|d<>HhR{~0#$AuJ-RHBz^7(`{t1gGU)`8cK-C7pmW8l4Vf*j4FGMxVDKcSXnZ zkIr9dB1&cvO99>gk+@Mvs?mm$$rY@!=7=5k&U)B&83y4Qai4CL=#jVvQiuDY8*}Nz zAC^V1axNsk=NxZ0&cl?G6iS_W6h+!`o}L8L#%OyMa{U7alKkX-gmY5v0hC><3^m<4 z#{haj?u_tv!PV_HVHjfVW(BZ?QgbNNwuojUgBsXt`a70AD{E_OuSxA=&FOAqjNi~( zNX?1tpT#iIGdzzVEs?0XV!Kx=E_YVZBA4p*7y1O7zUFY3ha1Cy7I85FwIf6+T-62w z6^=w3ghpGKo{?S`v6j9A^iip#bBm@7B2Q(J+>t%06vNS@$ z0Z{gFTL7yxhu1BR(_Gaau}Y!T*Sk zdGdEI$Y`GGyV7n6i7DZVtS*CTRR&zCQI6q+Si|k*@C0qyD_HgqGymM}S3>Qy7ey zt}$R2@bdHw2D=0Ur%0g8hLh?GJ&8z+sbL=3_mSiyx!(hwfTp-t)0rdLu-Ncby*gK0 zEakiG$3G%Oj;Skxe$NEZdB9KT; z)3Ri}VT_)%yGi===~JNaW$nWwIf6C6SfH;_0%g~0;_rH>rq-J(UOq9(GYu3r(f|hi zGOM<7=M6Z=*B5SXk3E}n@3tg|659CLvaJ=fQCzxc$o0OJ1s%IE=WjcUz`7X9dn|}i zL7SwJL14xtcqc@2_IM%a&ozo!T{jlE3XGsfA-&lvUl+lADjSf zb%v#ikMP~zjBUA>h6E5wTMlERCtVadn#s4@l~e4^M(p5`@PyS@ig~bXlZB4 zn`i$(dKJDBPHyFUww(rU^ZBx#v#dqlSlk$P>YYQ1Lgda^Hd}UEgd2lWWZ2uyrJHum zhW`LzvJM;r8plwgjSp_MaFRWFhKz=+l#Ey6Dfku>AaaSNF_^&XRqx2!nc-z?O%YA% z1mULAsK~BIwepYcWF9Gpf$end46ee*x%$et4;SWgR^7$}h2-TsK`vKl;ZCb(9{r&l z(2d;U2M{LZYIZ--MakCtyff5+>LZ`mUyOC?yV0~qg8LTtW+Ke1T(%v@1N~c*{|P8S zD~_AP=S{a?oiJLij#kJ5t(1;4nq|x*SVZoyE$^YM>rK-Y{0Sx6<_GGeZ>5Jc5?r(Q zl8x{i3w}5Gj-WpN|@8C?YT+e??Ht7J4~Crsw~YkAUfr zbY1!RmnB>>u7Q1-ZVsAL8#MO1#$ONVd5J4HBK&Lx!DIoJD8a~cadUV1q~}ep+WOK` zVJvhecAJG;&IQW{#8@m33*&*yaE0LLn==xem>0z1P|e;yf?fh8@QNCaJI|g5=*oAA z2@HeP8V&EErc>`|1^oEv2!}`duet*#b0MS37+c{s%kV3tw38N;tbEQ=crLsG$<3`k zrbpH7Z1?*F)<^B^j60v{RgNjaeRiJg@4ddCRhy^1{jc5F2lbb#-rC-p>@)5E#3wd2 zyHvZQa5?${x^^rPR#kQ)Dl$vA5=5QijuUhp;Uwu=f4fO)U&lAZV*JU9vKTSg`7|dv@3wNJ z%Cm*--nz}*KhioE4%V39q_gpzr!yEjfzGrB8%}=$67l}#O(ib=t3m2zH5^1k85t`| z`XvyvILQ(q?HdN(gYX&De%w&R68iXmF;WaWJlEJLW$-;GbPPIk&Cn9-@QmgqVyK1r zcC%TpFJitNtk;p4m+slgKh_-$rx~e9ska%#eLA<5$N1&OfGW#!_elZ|wjIUswK{D8 zsFD9`+51=pE4M068_&`?L;OePeFdSYGkVRh!lF0Jw6RUr+<38fHV36e*(2-{uJo>P z6Nq%kIBWKZ>Ja;w-T1*kCaQIHWK~l&Vn+e(qo@0a-|AjwK?M6M&VZ;jgfrOUsqD9p2p$nm$h19V{f?X3Sl z_ZU;wlFTIO%BWfiG+_a8pyoNApIM9jZc?Y-+K_^hKlaiPH4iBJYT50bot^F^;j!Xk zWE`)~3l|r~>L(}HZ~TrjZg~M&*#3!$r}y0+o7u(KXmJOU|E4EfI2drZlY@ii(y1|m zt}nyhnp;&)O_k>5wYkq zM2P1ik?tUQVIkotNU%a>ZS)LGW=$6KWA+KFPiYt~td!vv{eo|gsdf;@Pzw=v*_n^5 zse2m6sCV&GlhE04n!Dp~6jLp6z=^rw&k`Z-8Bs^l8X{$M{l~7q7pQlGz3iJKX?^dOc1?esExv*%4Il}*C8QFsU4OAkQM67LQGfk~u3b|ERT;CSWs3f+ z+M?s3{G^q8edg}&ZVmbLAHx4~te-zWBWOvog8z%{L<9uR%H7=*q zyMcg*QdTDqk8<3hC!uHJtz4Y8Ry@!4F5&j?W(ZGFJ~9%wj2-}5SU{N^g~-ARUsfuO zr#4B^p6uF>ts}Kq3S>3HwR|4F8aUL2FB61WomyLGP#+z25e6A4*#3aU63p4(b6b+j zG#8AEi^T|tDr)Iz!%rTv1%u7=deHg?_5>3ZlV4VdJ$fy78Q!UyhN!6g1F?4TE@=o0 z_HCNPskQAN$P4wCX{lw9wH?**jV8_5Y_z80NP0n z$M57>8t;$3@!A72ZW>^DkF5@FbKXHchW}VM*y#&>$Sr)AKQSe~>|N8Y8NCQL-={VB zKj5c&grxG%y#|A%5kfzJAHT4odV)MOmu*%SXb{;?E;84{udJ@3GSq5JfDHe7BUc@E zawf@RF-Kr+WMz-i{U0=7%L0CuLLL@AOPOND@%A9CYy}pMj5#9;>L~N#Z=13# z5gb(f4-yAUVDqoAHLoZf_P5d_4CpH1L;NXTIJ}{0VeEf`{sb94Y$6>H<9j?E4Hv~I zpl>V4J7$R0a49MfRr}1-X{P-rU4miZ%h5O!=P;OQ`0e%#J>gJv?|*moCwov+`;uzP z^m)%-?13RNT6?XAF5|x%Tmq%>y?aIED$I9;P~j$1*Xa}4@daqQ9a3`kXt$e-q{@E<7OR7Sp1`;WK(n`Q0)HKmYChYABNhgW3&Pbu)1otS}zo6!S0{j6O}?~!?d zkg+`==+a-IOG1@^{;IG4eyiJ>;cBgq1ll4AW1s(et7NPz^`f)G7a6TWur_4jfPuNK zz4(6w%K&lohqmMiGSYizTAS$Ys2wP@s$&uP~{3vPRm!YKpl#@Sr+Nr0ias}ie z7mQpsa`D((HF7!0MMbOu0FM^ee6hSBSwxmX2dZ^A0v)F>S%G4c%L{5 zb)!_^~FuVKd6RVUw0@lHn%IHzwksjs@31a7hFt(1e*rE}PV?nv74Nh&2F!@=&$J z3S&+3bExo!jY>Abr%@){c=-k}7ejDi80NF5RHg}@s!9FEnmnIC33Z`b#2Ns=AXGUK zw%C|t<8Ig_KZ>%+#)O-ZCfv9?H-INdGlscT!b}r<{FHjC#@(tZ_`w=MtN{QFLRAzi zj5YR#jh}4nJsTHpynF*BnG3^SA;I%B;e8sLY3x%qMck?p#2Ns=AXG)MY{@an#@?{; zl8w7<6WqB8^9_(LNHgvxjmk86Z`BBOiH1%b^Zx@yP&C#0oQC260000j4G!O#g^1VZn<3uu7Qdj}!( z-U8D z<~TTP9~EU@YJD)-N(qZL8u3{<6&W?-V`hm}o7F;oV77ad&AwqSZ4}F{k)*63uslC* z3)0;bx+@86rEZvj1zEHpfCAL5Z2=?1s)l#M7vD&Jiv(HTy-yftrN>BO-6L%+_f1NG zwY>SDX62%HC)KOot8V9T&8vCt?7@i7cI}Fz)tUF%^!7_D;$mv-HYDl&AvbVvK8oW4 za4|o9@PYW4%NembG3Igz=y-@BLFrX$+`FW_fu*p1q!T+Le`t6MOYqH6Pg{q60DLck z2O|PurmgQI(=02Az_3yWYg-)szcGFM?6eo;$MQex`EOCw zgyz%c1?>6I)#^JK-TKuSP^_T;TK41Tn*iLFNie6;Nn!Zeo`-GmY`O2bNcFZplf$I= zc|!hJApyq;*wJ5hQ-P2ZRp0qjaOPkaOt6!Bbb7Gk zvGTcRj+oHvHpW!ePZT@R`-Oe9FD|~%pB7SuWHip7brytm8vbJZ#t4|JvwHgWZCh~r zn8ejO-pUdZFMj&m`#6J7)T2?tbEAj~x>?sN<{H!aVI)r*#7o2!Ms(gJHh7k?!z&I>wLj7_f< zeN81o#go@uV}I5WxzcoAn^)w_w{T+qqF|1vxuyih!yA|1Pk7d2lsxf_@Vuq2(?cTi z*RM4m{dDSKJW=6Vaa|MsJX4Vw zs|QoQ8WDT_9a*N$8xF`6=mq*`NYEIZUPpDi>6|7WKRyQG?7bKJs@Pe4;Up7;fJ@&P zdN(`Dq+)w{u_&xQ4vvA$7{!DyyBCnLf08jD<=S9_9-F#m0lC;(=uLsZrqy)ZmgU_0 z3Iw;e8>dC#oMn!IUJ*b4+6(q^dbz^=}^EOxl#!-C#n56jaCkVxumPFmNv2pD|EXqH4b>s?}v9T4+6%_z69_FK(+w5%cq}cNsWPH_FTln6P$ny;7 zuw~F8q&q9GF$3^IH`?0UrrRG6&joN99BNy*;u_^L@CrE#_D#Jxgn_C`O)?SN6vy{^FJE9B6$cpXL&8$ zm5tMDp*_b~R6bFe4Vz6RicK9s)Xi~vcWmPcMo?baQAHl2{&+N3q+ixf)_ z1}>in;B9q`pFW+YH$Cj16`)rO z;q9@4_SE75zv^-^E}*VpAFR=BWZ?0kWh;aRV*B=rU%)1t>*>*$>obsN!$!La$g-Br ztRcn*+~a-~(glMo*|kuhmwG@m^+=MB67Uw$dLP`__l7i%!r66^GT9&%m$qfY_jw?5 zCC)oTLm^^m3@qHB#5+g(v2!O2nWf>xX^l4PBh@MmzUb0Y+v}^dbF1O=JG`*@J~1cs z&(==nKILh&``GMNV7xC}JQV(VkAuE03a;qexYF#m9y*o!&BRxrat*hQ`FmKOsOW1| zG6>XnotNgS@6dPs^+l?S%##7VTK$aE#9lfg&{{jv>ZQkTaD8IFo6?K1&hh1bj;@bg zdSbnD-{oRsc^#MSQi?O+zmX#&Uvju~B}U;*QEsAnrenHPt8T+&PZ$KHwzLl7Y%j+x z4?bR_(G39`@b={JXj4O;%h`SoKv=7&y$&xW#IGJ%xMP>@UPV+X{~3fl4D!DjPPY2< z3sF$74-^kbxt+dWu=fQ*#2!zMt}$hGxSkq*`!%r!qF-6$peb_O**M`LK*IApqam57 zfX(reGCZPw$Od>l{8O22j=GRpF1YBWu9Ui*pCU=d3VEiC#RUpH$(0OQ3&`j8rmb0l zjy(w^ExbxoZ9Ib~pkkrj(V6bxitJ$jS~Rw&)X9?Z>*SA^k~8nf%Vt<;xPb8%Tw7l+THTAI zQYuFyZ*dt3cwfZr+WT)9=n&yE+(vz-{+b{bJG4o#)~T0HX}cm-X)?7{U|7Q&7&WUD z5|>{Lj|g>Ls95D((>Z<$Y@2HB*Fdx|@YjiQp#qTll~M)JzP0QSqGk)uFP-DY;lKAM z^V5sEoy_eh9m!YdP{iy!BLy_$mcu`jHw02<+7$*ohAHYQVjO*iJpj>ZH4tUIdz#HF zH|7=j)&CeKU5T_9pX`u`#qfyTbnmZe=dab8P6xr~LU0T<{UJL_<3ierJ3NCXsontdHx7ea8=hK%hv5k6jZrtN~+ zDm{sK`$&oZviHNDvI9Rk3+z2x<0fp+?yAL%*_g0#xwZ~z@hC;b1W}|s#t^%>vNYI6 zQ1ukW>vvux-L5(~F8*9pYN_qo>;O9J-KC_QykAY$9jRlp%jZ7HqZ;mmT#8b?{>p@4{v>aoC9rKP{sg zNLjbUQfR&@LBl%T3oD*nFEyPTNkuDiz1itvT76Jta#ZnNH*fkkdy;*%P4e8vDChW) zM{T?EC%R}@IXLbYM|EfM@+%N6#CkT0yXm~tq{$WNWtB0T>+%d_#e6WnnPsgn zC~vIH3^M2sf4x~db&|j`ORJqVBWu@ks@8*Y0?1=i)KPBPlz!b=Lw{B%)?(VWSF5SG zVUNcGMFhYX>(%rkyS#O*mW26&S86_&?|j#blH{&W8dV>Sn*RF!n(r{J`Czk;vd5}3 z?P`8^k3VC$2x^oxn1_;j<67Pb{)p!F}K6o_~AUHeUsXj3{ z&WRF`v>bk$+K}|rqppzV3j z*hy@f*QzI+(p22Tw#5Hfnnfxy>HZSUa;o>zWBtz|A-^@+eKnTF;^Hd&xujN1f4{xv z4UJEoS&`r!J;`}0M>8$A$jQzYoN${JUYYvIWN|vIhzf{ovNGI+WDM~fT<-N6TWU!8 z8qF@tgpQctk=yAaVu+f|9x1W#&e8Jjur={jyfa5{HaFX*C3Ml;cC+_1B$Uf=Lznlh?fFLxJ16}73-%^X^_S%uC;FMS(z@$(Y68)fpf=fsA>JKLg9 zBkV)3lD>spXgVT4IH;M}m)O8RW}cG#$DA*O$?eV0TZ26Cj<5>o(X}#7lE~XhAe$ z?_+5hD=P!)%)AZv9Nye~`kCYE%y0U*zloV`PI&JuTCgC?Y4TE{_PTSgbU@X_u}w_k zqBDe?2u#-i6{uM*u#mY(J$%^l@cFPqec4>FNk`2MK1~EY&2?)Eht=Dgz#`S*%SGL- zV7y|w7l*5G)g*4`LO|Ve8uUs+Q{}VoQbK(*`gWHfkL+J!9&Xxiy%OgXkVG)hBC+U& zA0Oy&$BibPnKTRcPm3PmC|yD~dM|kJ1_lK2J?N-m)Fa#YBE5!#1wJ{vqiwyO{69tn6Dpb&=>(xs#j? z!AOqVxIxCz?4;(9Ou(L#^#j_@58e(TR&G){tN0x?A`B>lH)ENhxBzAwxrRs7vh_f^ z6ob1`iLi}9)mK|bQSF3%IlfePB@qf4*d2ct1LPN)flpd)nNPDsIFgk9%NpNl0r@l? zVVX3~OT-o%&%(Uq0{15fd~T2YL5{~5a8o4i{8J9@#H zySD1v^*Dd-0!FjMd)&ct1D_#F?A-UUz9Ik<|?|ovepJpweD$!*snc=~zApUsdo5TY*stcG)QjzV9 zCCwP+A^pGIVlt+bSDw!1+qX{u1-dACHnA%%01me+*rvRuHWcHXb zl7G7}-!X#PeG&|PJeXqtsd?o2ms3h3!+yVid)}(2)w9?PhL;A7c>4^YBNPhigk_un zO;Zi_JldHcuQvq5nfQv4<-5E36%x!-c6a%6FDOvDLT;5K);`mom;!gC&+Co%x;roWA^ATQA0Zo`KE?3e)9>riXHqd8yl5^8eERUjN(1%zdw#y6P5C zg&HfHBHHoI+i1V@X2amVir{;XvB4EuWp0;3rSQcY5$C%M{o!n}eqZOeYS*WhsWD^C zuw!yH*ADmW_GH>Y%u&A6DvAu(bXJiyMhXF$w`)UQc)b-;8Iekd1ZKnGB0QU1ro2h@ z;#zzP9YUN~Lwjutrs-20ooaz(?Yfpu?MA&ld+|+d-wQy+uIN}S892Zh?dHfl)H@w z+lwJr>_Kxv9L-hV`mkWQN={aF72c=OTN}|s4=zQ}= z%5A^5P&JjUrqMXd)8Lsa%bEGYe0v+<-y;2g`)w40`P;$Jz-2Q`Mi_DiGz$vy><{Fp zK`#i^#@z(Hp@2OU!X89k1drGinzQfha@tGcdd;1C!PSldr2{xc;+`01%>IPI zjLXX5_u0#fg@nb$9q3>=#!fmD7Y}NDP6uTEBWveHI4;r{?p$7kx66%vC4PxW!T2AK zE)*PeYB?5DGgIo#}p=%&E{_3uYU zRVTJ2)_Df_~5-~46 zo@pM~WszJ=X)Pv!Hoe+5;GKbmy?wyu1vL^8*vP9)yI zjh?Ok3(XkU!aKF>1tiRu5he3ay-KD-e)uqAL3XvcIOrwex3wm6_3o&-JS#Ke;-pq- zGQ!b>W|4;LacP?KdGoPFcXiSOF41VFAgUmmQtyigBOgA{?neXfnQ+HAZsvuW>}TAk zVhs9sJ;cZ#Uu-z&Er;qYh&!;Lau{o#)gCKN4+vO1J8p@|5${pksv2Rjd&R%qx=vI` zI8nVO%l|p+n`M#+XvpAdOSVFD6GDz@5dJE+o?NK!GTz=7@}?ZIjxNv+3raNiYk456 zm!rDA;ELv1(@WT3XZ;fTDP|y{q*+03Z=}>ed`}a;SS(#pd4(-fc;>{CQrI9XfI*)2 zwiA_W8VX*WPU>8nYralc5)2Ua=#w>OIsSH9j*OOUTv}pt?W1CAeqhW zlK4eXIw(Qa*A3$Xw@wwl8`m$+Nq&KAe8HwM-ricYC5|Lh!R6wsl2+h0pQYEzvEOp; z0l8qBco83Oz16TN1NJ4kJueqa_ zaQG-Oi~U1;#)>-Ffr%Uwom+ikgZ6-@oaRnzg>m>u{!POSa(J6&+Tde-_Ef#R$}T~o z*2UBFbJc%-U`4G*H=iTS21rSrgxPsEM+`5&rf=K8@8!B8rxL@(4Kk(fT zVk^u3c74ZI=N7i*o6nXT;04g{#`&E8SUkR{E}eYNlLZ3Y7BqGzVtjfsjwWHDz#r6@ zQf|yPSGMRpPQ17qtxxP52AdP+0^}V%sb5Jx;xI$Fw)Niq?poqBzoWqXt?xgDdu^>X z@CY8ry79eR7%Jv&GNZ3^VMXoA<*OHy+cU7a1y-ve9*sD`HLk{Ms(!X_QaZlhsIki# zoongH_-fAF34TXZRjc%)MTYPdKCKz;-7H~1*byF1KdW{p%*oU2YL;d=Jtst!-H?WD z&*d>nvYN2UQ7ds?{2+KTqV)blT~PiR-t&=I5`HH1G^GHC%gAJOslxI^3L>qH$)}F3PCQP4byiu|sX3D^sFU*$NacQRBOgv!o1l5|pY|%YQ5ZoR?t`$BW z$?;2Wg-b*uy!u7u%a?k$WiY@EmSR}5#{(L)KaZguurc-bGTFG|$y|=UX z?t3`jHhUId=!+O#xZEZX>^(0;WrgEj>(Jvm?3A-0BjR*4?oRuix|6kIM_tq7o7>l9 zui=S6ND1i|%p;-*>e!ANbTLeY-m`lqgS9S}C!NL0$va7d>L4OEncyUPCmz4RKn*zR zrFL%{96v5TGH;ujI7c~I^gd^~^bEw7q?C`?u0`LtMP3@zQcx}vtS&-M-YU#Mh)L$} z4owh+SE=Y3!DETYOA044^G6KkqECodOQL1|*_}xjdc5?<&uo)=zt@Wgpi6gU7agdD zXwHc-BWjlMAA>?Ix}EnsuDFx@@`a9liiV2&e74FQEE={RI>VYWL?TS(10Y_(|7?k( zbNrIUQSR`3BwJ-gd}dP#alE0ckAD=_65+UWcl3rj1_5ehSOI-6j@%3HkIZq~-;<}{ zyt*3CtnY)oMBV#u3h|W%PSYu`i|{eiI*Y(3Ru#uQ=EQYU|0qv~tPwLnKLp|%|D!1) zvqVwj>e2U%QjDDdO zJH3rwZBe3AJAU*1_GNc71OC~QPZZC*xA!{waGQ;b-|yB4z{}lpEs7aRYh9>;Z*C<2 z$yM?J2FDJsra?kzQtO<%d|FH;UGd{feT4=6uHi|26BT~hrO)gmFX0pR8LqTGE@!2U zujcdm(IZ{xE@)4Zv%B~z^%%dYPz5!j;^U3?xzos&j4V?Z7XstYVQu^&<8kA-D0dIYt986c;bk zrJKMsSxg|gl^YHjv8vlvDZ|>K(Vg2qY)k#b*!DPUW0R{QwscbZJdWUK>v_J_G+c$| zFMf$Kd&ACDnDj_a*^_Qwf%1}?)dWB^g+ZC`{^~-vrMkj{*ka;$CYKvC>0GTBUyo|{ zn@WA#FBS$mF}HQRzk$bs(Gw=4ewLftyyZwQveT5kS?LP!XwU?FLi~+;p0Y(_+oypNEVg;-nTn<6$?SEwuz9rnw!{JhiS74_*`y+GT>v*H&qh3DzGMz%o< z>5=1imVSrBZFhqX@A-PB&$*${SA#3HuLUV^yX?T+a|y-95Py55@l`qS1F zGBS56f=oqCIjvlgNbxm>@tx8NGt6O%#aC2Drs;sfY+omaU2<1*9f&Sy9-%u$`+!WoteLQP(D&kHb8E+%bOyz;7|Q z!&M+8m;@Ie8y$d_r+xJl2GQrwTP)2hU21DAm2wnxW$1!F`u}aC^)lYx)X(>kcg9?r zN4x+x+S*j%w(#zn$k zrQKIa2$wNoA)~Pu(iDVX;IWGZK6S^#VM46K^a6FDGXj%&EJpRNDgAEi{t~a-Hpry} zLe-2v<&*1JqINS?v3^!m+!A9#VZaZxbC0dA5!W5Vb^7Al{jvz?gCY z7P~i;5|ilXt2{fAbSphE6E9~uNcDWmG_U0dxv&TA)Tn~}i2fe>M@_LqWqo>=Y1m3s#J~&x7 zfPZGZt2KGiEZiz?u&N};S2X>grqj;HC+5h+^5qcvVsZHm68U9Y4X$Y7(9~NvWkvOz zO}*7!R|vAX@Lt~1zE0Rzp%$#^rOBS2`0jvr$c`S|<=XS+;Q&WB7cJ(+j0ieR^?8*A zL|l`S-(tGGbpsG+fX&WY?4WZpS)-A4`p_D}Yc&~T^{MGM&7_k!f4gk17UI^^xT*$d z%r$xF#;)prD-eZ+slaMretOrxxHGWjr=HW#b4+5d_~((5nIZT&oF+c!}Le@wz2x%YE=aB#Zj$!0{jX4vaL zlfwXk{2<7-zL5cpx+gZUrCm6^UW*gOFFoe%-8D$nTs9z1=Df}MdZS6)EKQ3XYd~vV zM205OYjI8`d_bVDSxUcg9481gLE^r3c{Eb>7-M7{2J6>|S4EhCWO;UmW_bjU0{O^(Eq)sUDk4yhRsG^i`<6jpiRAnh2Iw zO<|XWB()$p#AfgD<}Hz+xjlg+PGqD&m?o;bY<~tPx-q6y*ql7MRoEDo_z_|o<|@Ue zf0;xhewcMGeijr=+k9O(CSE$vXtG~V6;2v${fd_l=s3^@j{enmp<3TuvXyNsAJC#U zze2BH=hV&}(hO*f?}Di`?3#If;Ufm%_DfElcYk=RqyMaILOb<%iM-qdF*`Ros!z)z z>)viSHFgG*h~uo_0O>d&?D_^--N1JaVT`E6w<-OKo-C;Hrn)!coV{T0@Q~~M=5Sbc zrr~~3?i-~|c1>ov&Se|fKdq!&^N-jUkO>u7Ya8?6*&N0d0&Una#jGdc@g?e;A3J(rRrVoGy5>k=u!#(IQlG)|G) zx3IxF8M%jkG-m!=AWM;3{R*$B26Dt$rF!I7Ry*On7^pby`ez)|2q+cX-i+zPw$i7ZcS%3#6C|^lvR-_l6n*He*oJN B+X4Up literal 0 HcmV?d00001 diff --git a/images/pipelines-unlink.png b/images/pipelines-unlink.png new file mode 100644 index 0000000000000000000000000000000000000000..e2bb707647f8a98e0346600af9a5f4670f9ab6fd GIT binary patch literal 25432 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 literal 0 HcmV?d00001 diff --git a/images/pipelines-view-yaml.png b/images/pipelines-view-yaml.png new file mode 100644 index 0000000000000000000000000000000000000000..57c76d1eaf930700053ba4ce6a72b7357140edd7 GIT binary patch literal 9808 zcmc(Fc|4Tw->8D{LX$&5&{D^%98?@Rm0Hre+P zV`pZJu?z-heCag5-*cYVIp_6yp4an-nYnNGbzPt9v%cS->wb3IK%0Y&pN)==jzd@H znlT;S!MD`k%`6A0pZu}4bZqH+pO1ZbK?q{(` zI`v-B$zlSWuh8W#iiJoX@JbDNYBR^s8QTxJuPD_&pl~tj_TAX6gZa_L(h+s9T?8z? zaK-W|oWB{=-`+Z{=HoDx;xmmI@j=%E)<|=pYL6$;s1<&q-m!0 z4C`Tk;rO8&i1GI)HMDeW7E=M5#&$WRDxWU%@T)8$tXELnvHasWgD|+*S=||krmkMSc9z`ReQ<9o_Tu23Am#J_hyQHd4%2RO)R-ZMivBt@EAqMW zJ@1|mBsk7DdZN1H7$JeiA(T9hylix3DgdQ=DhSbJoV3}Vt$!q04`aOjlCVnkV zNEq?VGC*;6YVGe+KI4S(b$Z2M5FCBI!N)8Iq5uSY2^zA@9@$qJ$D_x0IzF`_TZrY) z6X9a^JXeO06?{7H|4!UDO_tQ=E7b?pn>Q*s^Me8#LwL&R>nB)9k(Ut3pYY_g~hZgqUbKMnYyFRvC_o6~mSIzKmPu%mo4-eGJcG z;(-_OQkc2Wn9m0Xd7q#T{`94M>I`wv;o%sj^eAIk`+7sMYA>gyjmI~Sg6e8}2-19P zS5a{X82`i5{OPFaG6G~LG~mZ`0RmdH>GwgmsIPXR_9{X5oUX`aJ!f(c!otBRxU6+w zJeikIt108ae|Uf!ZvL`oekv1}or-(4^i?kEE{8835;rAt?gpQpIcJ3YH=HeOX{jM` z(#BBTA4IWhyD~Jsc=uEy)s1TM5*sl)+2Ji~hB6-8Yg@r5QckB1QxK#64x3pGagTR4 zn^P;9Sxx0lP>3(fDq%7=NEY_nz)&pD?hhN5S&mH3Rw>CSLb5UmK}0Cf?@QOfxcR<4 zEq#zj{+!lklEr~w(#+D-SgQHf_jW5z84t>bMJcD9shyt1hk;`3C?hjGc~yL&hx^iz zA~?FrWum*fblMO;%vZK{tN>Rb`wUKan!GybZ6dcE-F%~SV@fiiRdLaJeP`?Kw9|)! zeBSh)El?;u_^Lhr3(;fqgJy%*)ONUB@T8*iG)}O7uDRo_r5WqI<7Go&!^6N|-c#q+ zt4OcITO3rxuG*NccW=a&*pC#qwM1bky`oS6quOp*?`gK$1>T5_jC1?|o)0!ugKCet z_B~Z@I5X!(;TSqB0QH#dOdKfIuJEALIZ-G-aEKReY1L)Rm}2@Nch9(!XLAz`icf=G z^w|x{-+p@61n_iBwvS?3pRsw4LuG2?Xc*`|>=;mPQA_}Y(#L!=^t}GHkM>fB zWsa!M_6djIFD>=UF{-+tp!WbCJh50DX?M?W=k;R#;>=j&0DW@X=eOEhCRT@A1%kR= zB*r?lq?tGeN_L9UTu7ksX`EcQKt=fQOsYgFs~yxREP!L@MIw*SjPLEF1g$DMs) ziS2+#3zv6YB^AzRTLZ;b9A$Qg!i@+s(#+Ax@rX99<(q;VaP#qHb9#7b0oH5ltH1UK z^Gk5_Lf$nY&>WlK=+SYqCP0LqX>TzXFw7zme#6M4m6+{N-aSKJdN$|+7l?C}a=?Y#%&QV}I-|fJCG=YQ#;Sorahyq6PXN z96s!*u=aYZ^og($v(;gNOCP*Zd5obs+m45Y4+|iFC@+6JKir0)%MH%MX>+0lAig_N z6&$TiNzL|h2@Q|8a^LqUuRC0+*!s1-N+;s7pXd5;w*F z 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 literal 0 HcmV?d00001 From 12585b9883c3dc5e7d773d34445bbd6267245780 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Sun, 22 Dec 2019 20:37:10 +0000 Subject: [PATCH 133/168] updates --- azure-devops-project/README.md | 14 ++++++++++---- multi-stage-deployments/README.md | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/azure-devops-project/README.md b/azure-devops-project/README.md index 0eaaa89..f04de49 100644 --- a/azure-devops-project/README.md +++ b/azure-devops-project/README.md @@ -1,8 +1,10 @@ # Continuous Integration with Azure DevOps -In this lab, we setup our DevOps Project in Azure to create our CI/CD pipeline. This will provide us with a standard code base to work with. We will also generate a YAML file from the existing pipeline, so we can work with Pipeline as Code in future labs. +In this lab, we setup our DevOps Project in Azure to create our CI/CD pipeline. This will provide us with a standard code base to work with. We will also generate a YAML file from the existing pipeline, so we can work with Pipeline as Code in future labs. We will use the existing Build steps as a template and expand the coded pipeline with a Deploy stage. -Based on [this](https://docs.microsoft.com/en-us/azure/devops-project/azure-devops-project-aspnet-core) tutorial. +Based on the following tutorials: +- [Azure Devops Project ASP.NET Core](https://docs.microsoft.com/en-us/azure/devops-project/azure-devops-project-aspnet-core) +- [Adding Continuous Delivery to the YAML definition](https://www.azuredevopslabs.com/labs/azuredevops/yaml/#task-4-adding-continuous-delivery-to-the-yaml-definition) ## Prerequisites @@ -26,7 +28,6 @@ Based on [this](https://docs.microsoft.com/en-us/azure/devops-project/azure-devo - `git clone ` ### Set up the Pipeline as Code -In the following steps, it is important to unlink any parameters so they 1. In the root folder of your repository, create a new file called `azure-pipelines.yaml` @@ -48,7 +49,8 @@ In the following steps, it is important to unlink any parameters so they 1. Save all changes and commit + push them to your repository -## Set up a pipeline in Azure Devops using the YAML file +### Set up a pipeline in Azure Devops using the YAML file + 1. Go to Azure DevOps Pipelines and click 'New Pipeline' 1. Create the new pipeline with the following settings: @@ -63,5 +65,9 @@ In the following steps, it is important to unlink any parameters so they 1. Click Run to finalize the setup and wait for the build to complete +### Add a Deploy stage to the pipeline + +1. Follow the [steps from this guide](https://www.azuredevopslabs.com/labs/azuredevops/yaml/#task-4-adding-continuous-delivery-to-the-yaml-definition) to add a deployment stage to the pipeline + ## Next steps Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file diff --git a/multi-stage-deployments/README.md b/multi-stage-deployments/README.md index 3a1536a..c84e246 100644 --- a/multi-stage-deployments/README.md +++ b/multi-stage-deployments/README.md @@ -8,7 +8,7 @@ Based on the following tutorials: ## Prerequisites -- Complete lab [Create a CI/CD pipeline for .NET with the Azure DevOps Project](../azure-devops-project/README.md). +- Complete lab [Continuous Integration with Azure DevOps](../azure-devops-project/README.md). ## Tasks From 1523991e3d58a93cdaa2b8752a76d814fc7886d6 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Sun, 22 Dec 2019 20:56:06 +0000 Subject: [PATCH 134/168] add authorize issue --- azure-devops-project/README.md | 3 +++ images/pipelines-authorize.png | Bin 0 -> 45150 bytes 2 files changed, 3 insertions(+) create mode 100644 images/pipelines-authorize.png diff --git a/azure-devops-project/README.md b/azure-devops-project/README.md index f04de49..4fa5f3f 100644 --- a/azure-devops-project/README.md +++ b/azure-devops-project/README.md @@ -69,5 +69,8 @@ Based on the following tutorials: 1. Follow the [steps from this guide](https://www.azuredevopslabs.com/labs/azuredevops/yaml/#task-4-adding-continuous-delivery-to-the-yaml-definition) to add a deployment stage to the pipeline +1. Finally save and run the pipeline. If you encounter an authorization issue on your first next run, click the Authorize button and then try again: + ![](../images/pipelines-authorize.png) + ## Next steps Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file diff --git a/images/pipelines-authorize.png b/images/pipelines-authorize.png new file mode 100644 index 0000000000000000000000000000000000000000..b91783f98436c808603df3f109f82dd16302119b GIT binary patch literal 45150 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 Date: Sun, 22 Dec 2019 23:06:29 +0000 Subject: [PATCH 135/168] remove deploy from lab 1 --- azure-devops-project/README.md | 7 ------- 1 file changed, 7 deletions(-) diff --git a/azure-devops-project/README.md b/azure-devops-project/README.md index 4fa5f3f..69fb69a 100644 --- a/azure-devops-project/README.md +++ b/azure-devops-project/README.md @@ -65,12 +65,5 @@ Based on the following tutorials: 1. Click Run to finalize the setup and wait for the build to complete -### Add a Deploy stage to the pipeline - -1. Follow the [steps from this guide](https://www.azuredevopslabs.com/labs/azuredevops/yaml/#task-4-adding-continuous-delivery-to-the-yaml-definition) to add a deployment stage to the pipeline - -1. Finally save and run the pipeline. If you encounter an authorization issue on your first next run, click the Authorize button and then try again: - ![](../images/pipelines-authorize.png) - ## Next steps Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file From e35d761ee8dd7956b01282b6614bb094ad844881 Mon Sep 17 00:00:00 2001 From: andregeuze Date: Sun, 22 Dec 2019 23:12:17 +0000 Subject: [PATCH 136/168] first draft on new CD lab --- multi-stage-deployments/README.md | 81 ++++++++++++++++++++++++++----- 1 file changed, 70 insertions(+), 11 deletions(-) diff --git a/multi-stage-deployments/README.md b/multi-stage-deployments/README.md index c84e246..b88266d 100644 --- a/multi-stage-deployments/README.md +++ b/multi-stage-deployments/README.md @@ -1,10 +1,12 @@ -# Avanade DevOps HOL - Add QA environment and define your multi-stage continuous deployment process with approvals and gates +# Avanade DevOps HOL - Add Staging environment and define your multi-stage continuous deployment process with approvals and gates -In this lab, we introduce a QA environment and setup our multi-stage continuous deployment process by adding approvals and gates. +In this lab, we introduce a Staging environment and setup our multi-stage continuous deployment process by adding approvals and gates. -Based on the following tutorials: +Based on the following tutorials and VERY useful pages: - [Set up staging environments in Azure App Service](https://docs.microsoft.com/en-us/azure/app-service/deploy-staging-slots) -- [Define your multi-stage continuous deployment (CD) process](https://docs.microsoft.com/en-us/azure/devops/pipelines/release/define-multistage-release-process) +- [Deployment Jobs](https://docs.microsoft.com/en-us/azure/devops/pipelines/process/deployment-jobs?view=azure-devops) +- [Approvals and checks](https://docs.microsoft.com/en-us/azure/devops/pipelines/process/approvals?view=azure-devops&tabs=check-pass) +- [Pipeline Variables](https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devops&tabs=yaml#pipeline-variables) ## Prerequisites @@ -12,19 +14,76 @@ Based on the following tutorials: ## Tasks -Let's define the QA environment: +### Add the Staging environment in the Azure App Service -1. Add a QA Deployment Slot to your App Service in Azure +1. Read the guide on [setting up staging environments in Azure App Service](https://docs.microsoft.com/en-us/azure/app-service/deploy-staging-slots) -1. Add a QA environment to your Release Definiton in VSTS +1. Add a Staging Deployment Slot to your App Service in Azure -1. Configure the deployment step for the QA slot in the same App Service +### Add a Deployment stage to the pipeline -1. Add pre deployment approval to control promotion from QA to Production +1. Follow the [steps from this guide](https://www.azuredevopslabs.com/labs/azuredevops/yaml/#task-4-adding-continuous-delivery-to-the-yaml-definition) to set up your pipeline YAML file for multiple stages -1. Run a new Release +1. Add the following stage to the bottom of your pipeline: + ``` + - stage: DeployStaging + displayName: Deploy to Staging + jobs: + - deployment: DeployStaging + displayName: Deploy to Staging + environment: Staging + strategy: + runOnce: + deploy: + steps: + - task: AzureRmWebAppDeployment@4 + inputs: + ConnectionType: 'AzureRM' + azureSubscription: 'geuze-adp2020 - Azure' + appType: 'webAppLinux' + WebAppName: 'geuze-adp2020' + deployToSlotOrASE: true + ResourceGroupName: 'geuze-adp2020-rg' + SlotName: 'staging' + packageForLinux: '$(Pipeline.Workspace)/drop/*.zip' + ``` -1. Review the new QA website is live on \-qa.azurewebsites.net +1. Make sure to configure the `AzureRmWebAppDeployment` task to use your own subscription, app name and resource group name + +1. Finally save and run the pipeline. If you encounter an authorization issue on your first next run, click the Authorize button and then try again: + ![](../images/pipelines-authorize.png) + +### Add a second Deployment stage for Production + +1. Use the guide on [Deployment Jobs](https://docs.microsoft.com/en-us/azure/devops/pipelines/process/deployment-jobs?view=azure-devops) and proceed with the following steps + +1. Edit your `azure-pipelines.yaml` file with the following changes: + + - Replace the top part of the file until `steps`: + ``` + pool: + name: Hosted Ubuntu 1604 + + stages: + - stage: Build + jobs: + - job: Build + steps: + ``` + + - Now + +### Add the approval check to the Production Environment + +1. Follow the steps from [Approvals and checks](https://docs.microsoft.com/en-us/azure/devops/pipelines/process/approvals?view=azure-devops&tabs=check-pass) to add a check to the Production environment + +1. Once saved, run the pipeline again and watch the progress + +1. If Staging is deployed succesfully, make sure that the web app is running by visiting the website at \-staging.azurewebsites.net + +1. Go to the pipeline run and click the Review button. Now click Approve to satisfy the check. This will allow the pipeline to continue with the Production Stage + +1. Now check the Production web app at \.azurewebsites.net and verify that it is running ## Next steps Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file From 064a35bc3c03ee452f31f8557da7da559d1464af Mon Sep 17 00:00:00 2001 From: andregeuze Date: Sun, 22 Dec 2019 23:20:43 +0000 Subject: [PATCH 137/168] deployments lab update --- multi-stage-deployments/README.md | 43 +++++++++++++++++++------------ 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/multi-stage-deployments/README.md b/multi-stage-deployments/README.md index b88266d..3cb4366 100644 --- a/multi-stage-deployments/README.md +++ b/multi-stage-deployments/README.md @@ -22,7 +22,7 @@ Based on the following tutorials and VERY useful pages: ### Add a Deployment stage to the pipeline -1. Follow the [steps from this guide](https://www.azuredevopslabs.com/labs/azuredevops/yaml/#task-4-adding-continuous-delivery-to-the-yaml-definition) to set up your pipeline YAML file for multiple stages +1. Follow the [steps from this guide](https://www.azuredevopslabs.com/labs/azuredevops/yaml/#task-4-adding-continuous-delivery-to-the-yaml-definition) to convert your pipeline to use stages. Create your first stage `Build` and then continue with the next step below 1. Add the following stage to the bottom of your pipeline: ``` @@ -55,23 +55,34 @@ Based on the following tutorials and VERY useful pages: ### Add a second Deployment stage for Production -1. Use the guide on [Deployment Jobs](https://docs.microsoft.com/en-us/azure/devops/pipelines/process/deployment-jobs?view=azure-devops) and proceed with the following steps - -1. Edit your `azure-pipelines.yaml` file with the following changes: +1. Add another stage to the bottom of your pipeline, but this time name it Production: + ``` + - stage: DeployProduction + displayName: Deploy to Production + dependsOn: DeployStaging + jobs: + - deployment: DeployProduction + displayName: Deploy to Production + environment: Production + strategy: + runOnce: + deploy: + steps: + - task: AzureRmWebAppDeployment@4 + inputs: + ConnectionType: 'AzureRM' + azureSubscription: 'geuze-adp2020 - Azure' + appType: 'webAppLinux' + WebAppName: 'geuze-adp2020' + deployToSlotOrASE: true + ResourceGroupName: 'geuze-adp2020-rg' + SlotName: 'production' + packageForLinux: '$(Pipeline.Workspace)/drop/*.zip' + ``` - - Replace the top part of the file until `steps`: - ``` - pool: - name: Hosted Ubuntu 1604 - - stages: - - stage: Build - jobs: - - job: Build - steps: - ``` +1. Make sure to configure the `AzureRmWebAppDeployment` task to use your own subscription, app name and resource group name for Production - - Now +1. Save and run the pipeline again. Verify the pipeline runs through all the stages and ends with a successful Production deployment ### Add the approval check to the Production Environment From 43355c9992168d8ed6897388905c176e0b35429c Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Sun, 5 Jan 2020 12:49:47 +0100 Subject: [PATCH 138/168] Initial version of new labs: Secure DevOps Kit and Terraform --- secure-devops-kit/README.md | 42 +++++++++++++++++++++++++++++++++++++ terraform/README.md | 0 2 files changed, 42 insertions(+) create mode 100644 secure-devops-kit/README.md create mode 100644 terraform/README.md diff --git a/secure-devops-kit/README.md b/secure-devops-kit/README.md new file mode 100644 index 0000000..6674051 --- /dev/null +++ b/secure-devops-kit/README.md @@ -0,0 +1,42 @@ +# Secure DevOps Kit for Azure + +This lab contains instructions to explore the possibilities of the Micorosoft Secure DevOps kit. This kit contains several tools to scan and monitor security in Azure in the following categories: +- Subscription Security +- Secure Development +- Security in CICD +- Continuous Assurance +- Alerting & Monitoring +- Cloud Risk Governance + +This instructions are based on the following documentation +- [Getting started with the Secure DevOps Kit for Azure!](https://azsk.azurewebsites.net/00b-Getting-Started/Readme.html) + +## Prerequisites +- PowerShell installed on local machine + +## Preparations +1. Install Azure CLI on your local machine + 1. Open PowerShell prompt + 1. Execute the command: `Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .\AzureCLI.msi; Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet' ` this will install the Azure CLI on your local machine + +1. Make sure you have the right PowerShell version + - The Secure DevOps Kit requires PowerShell version 5.0 or higher + - You can easily check the current installed PowerShell version by executing the following command in Powershell: `$PSVersionTable` + - If your PowerShell version is not 5.0 or higher, please make sure that your PowerShell will be updated to 5.0 or higher + +1. Install Secure DevOps Kit on your local machine + 1. Open PowerShell prompt and execute the command: `Install-Module AzSK -Scope CurrentUser` + 1. When the installation is finished you can easily check if the Secure DevOps Kit is correctly installed by executing the command: `azsk`. If the Secure DevOps Kit is correctly installed it will show all available commands. + + +## Run the Subscription Security Report (Subscription Security) +The Subscription Security Report will scan your Azure subscription on security issues. + +1. Open a PowerShell prompt +1. The PowerShell prompt must be connected to your Azure environment before you can run the report. To connect the prompt with Azure execute the command: `Add-AzureAccount`. +1. For running the Subscription Security Report you must known your subscription id. By executing the command: `Get-AzureSubscription` you can view your subscription details. +1. Now run the Subscription Security Report with the command: `Get-AzSKSubscriptionSecurityStatus -SubscriptionId ` +1. After the scan is completed a new file explorer will open with the scan results. Open the .csv file and examine the scan results. + +## Run Azure Services Security Report (Subscription Security / Secure Development) + diff --git a/terraform/README.md b/terraform/README.md new file mode 100644 index 0000000..e69de29 From 80403496900c8fb9413a9e77dbc1b4e65c095d16 Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Sun, 5 Jan 2020 13:04:05 +0100 Subject: [PATCH 139/168] Added Log Analytics workspace for Secure DevOps Kit --- secure-devops-kit/README.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/secure-devops-kit/README.md b/secure-devops-kit/README.md index 6674051..5579671 100644 --- a/secure-devops-kit/README.md +++ b/secure-devops-kit/README.md @@ -13,11 +13,12 @@ This instructions are based on the following documentation ## Prerequisites - PowerShell installed on local machine +- Active Azure subscription ## Preparations 1. Install Azure CLI on your local machine 1. Open PowerShell prompt - 1. Execute the command: `Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .\AzureCLI.msi; Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet' ` this will install the Azure CLI on your local machine + 1. Execute the command: `Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .\AzureCLI.msi; Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet'` this will install the Azure CLI on your local machine 1. Make sure you have the right PowerShell version - The Secure DevOps Kit requires PowerShell version 5.0 or higher @@ -39,4 +40,19 @@ The Subscription Security Report will scan your Azure subscription on security i 1. After the scan is completed a new file explorer will open with the scan results. Open the .csv file and examine the scan results. ## Run Azure Services Security Report (Subscription Security / Secure Development) +The Azure Services Security Report will scan your Azure resources on security issues. +1. Open a PowerShell prompt +1. The PowerShell prompt must be connected to your Azure environment before you can run the report. To connect the prompt with Azure execute the command: `Add-AzureAccount`. +1. For running the Azure Services Security Report you must known your subscription id. By executing the command: `Get-AzureSubscription` you can view your subscription details. +1. Now run the Subscription Security Report with the command: `Get-AzSKAzureServicesSecurityStatus -SubscriptionId ` +1. After the scan is completed a new file explorer will open with the scan results. Open the .csv file and examine the scan results. + +## Setup a Log Analytics workspace (Alerting & Monitoring) +A Log Analytics workspace is an Azure resource which can be used to easily anlyze all the Secure DevOps Kit events. + +1. Using the [Azure Portal](https://portal.azure.com), create a new Log Analytics workspace. +1. Open a PowerShell prompt and make sure that the prompt is connected with Azure +1. Connect your local machine to the Log Analytics workspace by execute the command: `Set-AzSKMonitoringSettings -WorkspaceID -SharedKey `. The workspaceID and SharedKey can be found in Azure at your Log Analytics workspace --> Advanced settings. +1. Now generate a new event by execute the command: `Get-AzSKAzureServicesSecurityStatus -SubscriptionId ` +1. Go back to the [Azure Portal](https://portal.azure.com) and your Log Analytics workspace. There go to Search and execute the search query: `search * | where type == "AzSK_CL"`. This will show your recently generated event and all the other events as well. From 4f0cbc5b35ab7eecdcbd6c7b6b809aadba151f37 Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Sun, 5 Jan 2020 21:25:53 +0100 Subject: [PATCH 140/168] Added exercises for Log Analytics Workspace, AzSK Monitoring Solution, Continuous Assurance and Cloud Risk Governance --- ...cure-devopskit-workspace-summary-azure.png | Bin 0 -> 33912 bytes secure-devops-kit/README.md | 60 +++++++++++++++++- 2 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 images/secure-devopskit-workspace-summary-azure.png diff --git a/images/secure-devopskit-workspace-summary-azure.png b/images/secure-devopskit-workspace-summary-azure.png new file mode 100644 index 0000000000000000000000000000000000000000..1d1b358a346691346226ae3375c7921c0c1de27e GIT binary patch literal 33912 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 l$o_{Y_ -SharedKey `. The workspaceID and SharedKey can be found in Azure at your Log Analytics workspace --> Advanced settings. +1. Connect your local machine to the Log Analytics workspace by execute the command: `Set-AzSKMonitoringSettings -WorkspaceID -SharedKey `. The workspaceID and SharedKey can be found in Azure at your Log Analytics workspace -> Advanced settings -> Connected Sources -> Windows Servers. 1. Now generate a new event by execute the command: `Get-AzSKAzureServicesSecurityStatus -SubscriptionId ` 1. Go back to the [Azure Portal](https://portal.azure.com) and your Log Analytics workspace. There go to Search and execute the search query: `search * | where type == "AzSK_CL"`. This will show your recently generated event and all the other events as well. + +## Deploy the AzSK Monitoring Solution (Alerting & Monitoring) +The AzSK Monitoring Solution is deployed to a Log Analytics workspace that is used by the dev ops team for monitoring and generating a dashboard for security monitoring and alerting based on AzSK control evaluation events. + +1. Get the details of your Log Analytics workspace + 1. Switch to the Log Analytics subscription by using the PowerShell command `Set-AzContext -SubscriptionId ` + 1. Get info about the Log Analytics workspace by using the PowerShell command `Get-AzOperationalInsightsWorkspace` + +1. Obtain the workspaceId and sharedKey for the Log Analytics workspace you'd like to use for monitoring. Go to the Log Analytics workspace and navigate to "Advanced Settings -> Connected Sources -> Windows Servers". + +1. In the PowerShell script here below replace the variables between '<>'. After replacing the variables execute the PowerShell script to deploy the AzSK Monitoring Solution + ```PowerShell + $lawsSubId ='' #subscription hosting the Log Analytics workspace + $lawsId ='' + $lawsRGName ='' #RG where the Log Analytics workspace is hosted (See 1-a) + $azSkViewName = '' #This will identify the tile for AzSK view in Log Analytics workspace. E.g., MyApp-View-1 + + #This command will deploy the AzSK view in the Log Analytics workspace. Happy monitoring! + Install-AzSKMonitoringSolution -LAWSSubscriptionId $lawsSubId -LAWSResourceGroup -$lawsRGName -WorkspaceId $lawsId -ViewName $azSkViewName + ``` +1. In the [Azure Portal](https://portal.azure.com) go to your Log Analytics workspace to view the logs. Inside the Log Analytics workspace go to the overview page. In the Get startwed with Log Analytics block you can click on the View Solutions link (located below 2. Configure monitoring solutions). A new blade will something like here below. When you click on the graph it will open the Az SK Security View. +![alt text](../images/secure-devopskit-workspace-summary-azure.png "") + +1. The next step should be analyzing the logs and create alerts based on the results of the logs. But that is out of scope for this lab. + +## Setup and configure Continuous Assurance (Continuous Assurance) +1. To setup the Continuous Assurance you need to run the PowerShell command + + ```PowerShell + Install-AzSKContinuousAssurance -SubscriptionId -ResourceGroupNames ‘rgName1, rgName2,…etc.’ -LAWSId -LAWSSharedKey + + # You can also use “*” for the variable ResourceGroupNames to specify all Resource Groups + ``` + +1. Verify if Continuous Assurance has been correctly setup + 1. In the [Azure Portal](https://portal.azure.com) select your subscription and search for Automation Account. You should see an Automation Account with the name `AzSKContinuousAssurance`. Click this Automation Account to go to the resouce blade. + + 1. Inside the blade click on Runbooks and it should contain the runbook `Continuous_Assurance_Runbook` + + 1. Inside the blade click on Schedules and it should contain the schedule `CA_Scan_Schedule` + + 1. Inside the blade click on Run As Accounts and it should contain an account for the `AzSK_CA` + +1. Verify that all required modules are downloaded successfully (this can take a couple hours before it is completed) + 1. Inside the blade click on the Modules tile. The module `AzSK` should be listed there. Status column value for all modules should be `Available` + +1. Once the Continuous setupd and modules download are completed successfully, the runbooks will automatically execute periodically (once a day) and scan the subscription and the specified resource groups for the application(s) for security issues. The outcomes of these scans will get stored in a storage account created by the installation (format : azsk e.g. azsk20170505181008) and follows a similar structure as followed by standalone SVT execution (CSV file, LOG file, etc.). + +## Setup and configure Control Telemetry (Cloud Risk Governance) +Soon Control Telemetry will be renamed towards Org Telemetry. + +1. Create an Application Insights account in the [Azure Portal](https://portal.azure.com) + +1. When the Application Insights account has been created execute the next PowerShell command to configure the Org Telemetry setup on your local machine `Set-AzSKLocalAIOrgTelemetrySettings -LocalAIOrgTelemetryKey '' -EnableLocalAIOrgTelemetry $true`. Instrumentation key can be found on the overview page of the Application Insights account in the [Azure Portal](https://portal.azure.com). + +1. Check the data in Application Insights account in the [Azure Portal](https://portal.azure.com). It can take around 4 to 5 minutes before the data will be shown in Azure. From bf9583100709a4ca05d5ae77228b5d385b185513 Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Sun, 5 Jan 2020 21:28:15 +0100 Subject: [PATCH 141/168] Minor tweaks to secure-devops-kit lab --- secure-devops-kit/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/secure-devops-kit/README.md b/secure-devops-kit/README.md index 84af177..e0dce8e 100644 --- a/secure-devops-kit/README.md +++ b/secure-devops-kit/README.md @@ -76,7 +76,8 @@ The AzSK Monitoring Solution is deployed to a Log Analytics workspace that is us #This command will deploy the AzSK view in the Log Analytics workspace. Happy monitoring! Install-AzSKMonitoringSolution -LAWSSubscriptionId $lawsSubId -LAWSResourceGroup -$lawsRGName -WorkspaceId $lawsId -ViewName $azSkViewName ``` -1. In the [Azure Portal](https://portal.azure.com) go to your Log Analytics workspace to view the logs. Inside the Log Analytics workspace go to the overview page. In the Get startwed with Log Analytics block you can click on the View Solutions link (located below 2. Configure monitoring solutions). A new blade will something like here below. When you click on the graph it will open the Az SK Security View. +1. In the [Azure Portal](https://portal.azure.com) go to your Log Analytics workspace to view the logs. Inside the Log Analytics workspace go to the overview page. In the Get started with Log Analytics block you can click on the View Solutions link (located below 2. Configure monitoring solutions). A new blade will something like here below. When you click on the graph it will open the Az SK Security View. + ![alt text](../images/secure-devopskit-workspace-summary-azure.png "") 1. The next step should be analyzing the logs and create alerts based on the results of the logs. But that is out of scope for this lab. From 128065a824f00b81fa3b5e29044611b8e8aa40a6 Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Sun, 5 Jan 2020 21:29:38 +0100 Subject: [PATCH 142/168] Trying to outline the image inside secure-devops-kit --- secure-devops-kit/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/secure-devops-kit/README.md b/secure-devops-kit/README.md index e0dce8e..2884d4d 100644 --- a/secure-devops-kit/README.md +++ b/secure-devops-kit/README.md @@ -78,7 +78,7 @@ The AzSK Monitoring Solution is deployed to a Log Analytics workspace that is us ``` 1. In the [Azure Portal](https://portal.azure.com) go to your Log Analytics workspace to view the logs. Inside the Log Analytics workspace go to the overview page. In the Get started with Log Analytics block you can click on the View Solutions link (located below 2. Configure monitoring solutions). A new blade will something like here below. When you click on the graph it will open the Az SK Security View. -![alt text](../images/secure-devopskit-workspace-summary-azure.png "") + ![alt text](../images/secure-devopskit-workspace-summary-azure.png "") 1. The next step should be analyzing the logs and create alerts based on the results of the logs. But that is out of scope for this lab. From 7d7d47f59197d4f4148158a2eec9b84b7571fd50 Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Sun, 5 Jan 2020 22:29:51 +0100 Subject: [PATCH 143/168] Initial version of the Terraform lab + potential stretch goal for secure-devops-kit lab --- images/terraform-powershell.JPG | Bin 0 -> 38783 bytes secure-devops-kit/README.md | 5 +- terraform/README.md | 154 ++++++++++++++++++++++++++++++++ 3 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 images/terraform-powershell.JPG diff --git a/images/terraform-powershell.JPG b/images/terraform-powershell.JPG new file mode 100644 index 0000000000000000000000000000000000000000..5632f1f72bdfed9406c0dfd40a03ee8c39d86bc4 GIT binary patch literal 38783 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 literal 0 HcmV?d00001 diff --git a/secure-devops-kit/README.md b/secure-devops-kit/README.md index 2884d4d..8a9d5aa 100644 --- a/secure-devops-kit/README.md +++ b/secure-devops-kit/README.md @@ -12,7 +12,7 @@ This instructions are based on the following documentation - [Getting started with the Secure DevOps Kit for Azure!](https://azsk.azurewebsites.net/00b-Getting-Started/Readme.html) ## Prerequisites -- PowerShell installed on local machine +- PowerShell 5.0 or higher installed on local machine - Active Azure subscription ## Preparations @@ -113,3 +113,6 @@ Soon Control Telemetry will be renamed towards Org Telemetry. 1. When the Application Insights account has been created execute the next PowerShell command to configure the Org Telemetry setup on your local machine `Set-AzSKLocalAIOrgTelemetrySettings -LocalAIOrgTelemetryKey '' -EnableLocalAIOrgTelemetry $true`. Instrumentation key can be found on the overview page of the Application Insights account in the [Azure Portal](https://portal.azure.com). 1. Check the data in Application Insights account in the [Azure Portal](https://portal.azure.com). It can take around 4 to 5 minutes before the data will be shown in Azure. + +## Stretch goals?? +1. Create an Azure pipeline with AzSK tasks to scan your Azure subscription and his resources. diff --git a/terraform/README.md b/terraform/README.md index e69de29..528e85c 100644 --- a/terraform/README.md +++ b/terraform/README.md @@ -0,0 +1,154 @@ +# Terraform + +This lab contains instructions to learn the basics of Terraform. + +This instructions are based on the following documentation +- [Getting started - Azure](https://learn.hashicorp.com/terraform?track=azure#azure) + +## Prerequisites +- PowerShell installed on local machine + +## Install Terraform +1. [Click here](https://www.terraform.io/downloads.html) to go to the download page of Terraform. Download here the Terraform package for your local machine. + +1. After the download is finished unzip the downloaded package in a directory of your choosing (Documents, Desktop, etc...). Don't unzip the package the program files, because this will give access rights issues. + +1. Modify Environment Variables to include the path of the Terraform directory. + 1. On your local machine go to `Control Panel -> System -> Advanced system settings -> Environment Variables` + 1. Select Variable `Path` and click on Edit + 1. Click on New and provide as input value the location path where the Terraform has been unzipped + +1. Verifying the installation + 1. Open a new PowerShell prompt and execute the command `terraform` + 1. This will trigger the help text of Terraform. When you see the help text Terraform has been correctly installed on your machine. + +1. Close the PowerShell prompt, you will need a new one to continue this lab. + +## Create configuration +1. In the File Explorer navigate to the installation directory of Terraform. Here you will create a new text file named `main.txt` + +1. Open `main.txt` and put the following text in the file": + ```PowerShell + # Configure the Azure provider + provider "azurerm" { + version = "~>1.32.0" + } + + # Create a new resource group + resource "azurerm_resource_group" "rg" { + name = "myTFResourceGroup" + location = "westeurope" + } + ``` + +1. Save and close the file `main.txt` + +1. Change the file extension from `.txt` to `.tf` + +## Build Infrastructure +1. Navigate with the File Explorer to the installation directory of Terraform. +1. In the File Explorer location path type `PowerShell` and press enter. + + ![alt text](../images/terraform-powershell.jpg "") + +1. A new PowerShell prompt will open with the Terraform directory as his current location path + +1. Execute the PowerShell command `Add-AzureAccount` to login in your Azure account inside the PowerShell prompt + +1. Initialize the Terraform configuration directory by executing the command `terraform init` + +1. Create an Terraform execution plan with the command `terraform plan` this will show all the changes Terraform will do when you apply the configuration. + +1. Now execute the Terraform configuration and actualy create the new Resource Group in the [Azure Portal](https://portal.azure.com) execute the command `terraform apply` + +1. Go to the [Azure Portal](https://portal.azure.com) and there you will see a new empty Resource Group with the name `myTFResourceGroup` + +## Change Infrastructure +1. Open the file `main.tf` (for example with Notepad, VS Code or Notepad++) + +1. Add tags for the Resource Group to the current configuration. The configuration should look like this: + ```PowerShell + resource "azurerm_resource_group" "rg" { + name = "myTFResourceGroup" + location = "westeurope" + + tags = { + environment = "TF sandbox" + } + } + ``` + +1. Save and close the file `main.tf` + +1. Open the PowerShell prompt again and login to Azure with the command `Add-AzureAccount`. This is not needed when you still use the PowerShell prompt of the exercise `Build Infrastructure` + +1. Create a Terraform plan and save it with the command `terraform plan -out=newplan` + +1. The PowerShell prompt will show the changes that Terraform will make when you will execute this plan + - ~ indicates that the object will be updated + - \+ indicates that the object will be created + - \- indicates that the object will be removed + +1. To execute the just created plan use the command `terraform apply "newplan"` + +1. To view the new values associated with the resource group execute the command `terraform show` + +## Destroy Infrastructure +1. You can easily destroy your whole created Infrastructure with the command `terraform destroy`. Execute this command to remove the created resource group + +1. In the [Azure Portal](https://portal.azure.com) you will see that the resource group `myTFResourceGroup` won't exists anymore + +## Dependencies +!! Todo: Explain dependencies + +## Variables +1. !! Todo: Explain terraform variables + +1. Create a terraform template + - The template must contain the variables `resource-prefix` and `location` + - The template must contain configuration for a Resource Group + - The configuration for a Resource Group can be found in the previous exercises + - The template must contain configuration for a Virtual Network + - Example of a Virtual Network configuration: + ```PowerShell + resource "azurerm_virtual_network" "vnet" { + name = "PrefixTFVnet" + address_space = ["10.0.0.0/16"] + location = "westeurope" + resource_group_name = "" + } + ``` + - The template must contain configuration for a Subnet + - Example of a Subnet configuration: + ```Powershell + resource "azurerm_subnet" "subnet" { + name = "PrefixTFSubnet" + resource_group_name = "" + virtual_network_name = "" + address_prefix = "10.0.1.0/24" + } + ``` + +1. Use an external variables.tf file which will contain the two variables `resource-prefix` and `location` + +1. Use an external terraform.tfvars file which will contain the two variables `resource-prefix` and `location` + +1. Use an output variable to display the resource group name + +## Modules +1. !! Todo: explain modules + +1. Modify the template `main.tf` so it will use modules to create a `Network` and a `Virtual Machine` + +## Stretch goals +1. Create a custom template (no modules) which will deploy a Virtual Machine. The template must contain the following parts: + - Resource Group + - Virtual Network + - Subnet + - Public IP + - Network Security Group and rule + - Network interface + - Virtual Machine + +1. Use a provisioner in your custom template for deploying a Virtual Machine + - !! Todo: explain provisioners From b23f21a480b8e3c075002a60f9f91eec48526d39 Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Sun, 5 Jan 2020 22:33:46 +0100 Subject: [PATCH 144/168] changed image from jpg to png --- images/terraform-powershell.JPG | Bin 38783 -> 0 bytes images/terraform-powershell.png | Bin 0 -> 128283 bytes terraform/README.md | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 images/terraform-powershell.JPG create mode 100644 images/terraform-powershell.png diff --git a/images/terraform-powershell.JPG b/images/terraform-powershell.JPG deleted file mode 100644 index 5632f1f72bdfed9406c0dfd40a03ee8c39d86bc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38783 zcmeEv1ymhNx^CmHL4&)yJA~i?f;$A)y>W*SAP`(O0fKvg5Foe*2<{HS9fAf4Zf|F1 z?wL7f&YO4V-M8La_r3I9MOSxMSJnS@$yfjXck}S|VFkcelvR)gU|?VXFX#_=SjB;t z@v^l70A*!>82|ue03JpJfQ7~$K@Sw)*aGm-I1DsyoSyM>56}Yu_Vg|(fCN2<4m}o! z27q)I`Um-E?AP`SfnNyxLf{tyzYzF^!2gd3D4Lp^J5qX>f+;O5T_}|;EnT1}AjHA_ zg;n4|*~7;;_}}7fkodpE;kY>g00Q}Y{O=3{Ir}GyzZk|(6n<^L5cq|_F9d!e@C$+e ze-Ys3&9?&=#y0-u<0T<|A8M^-& z`>6#%qqA{ya}ws@0K2lAS~!|nvYR`CIJ``qIJnq3IRH@!FDFxTdrLP;GfQh*uo%Pl zrd9?@TMID;9X@4FWhZG%8(VoF7fTHv6-{#=dvhTR1_^NtR8cQsFOU<+(#@383*-QH z74{ON{!8w{(D={O9Ms~XE*4h8>Q80=mI8VtM*X+CczSxWd-AY5x>$2?2?+^taB_2S zbF)EHu(^7J-AujMz^*iZ%iyV{tGSDEF zY-XlB7HnKx7N%^b7Cc;R7Cbx_0(@M8+*Vv>)PF19!u+?=o!ng<{!+GuIftc#CCC!& z<_blFi-Vfuua*8kRVEao-wORx_@OdF(+EquSem+7K7|JHpAVajlZ%a$PxC(-06RA) zmng>{(us2X1mhnn`hT|O|0%S@MJ>#Q&41S2(dDnjYgjt}*Pgb6t@uBa?7zwiz4X@z zv=C?uL_t9j<@m?){~3_KoPjn#=zYI6SLmIT{};Ajh5TC}|AOlmT>lmV|5oB(t?L(D z{}uxOR^nf+>%SRXf2X{bU?|V^gc90^c|aOKLO?)7fJZ_^Ktx7DLPo_wgK`X1d@O8q z93uS3#6RnICum^BxDp+ zG-!evYycJp4h|L`4gmokYS)DEhh7KZaS(8+xTFvtshJ{CJL7Q&#^)f@JgI2MS06i~ z#LUabFCZu+Ed5kQR!&|)QA1NpTSr$<-`v8|%G$=(&ehG` z!_&*#C-`+p=$o+c2uQ-)#H8eRDXF=6`33I_i;6!~R#n&3*3~yOe(C7!>h9_7>mQ$( zoSL5bIy<+zw!X2swf${p_xR-W$JzPC<<<31xnKaezl!ynWPgwg2PzjVJUkpc(oeZy zU_GG$4hJ5AiVG1}N)5@>`4KgDATr*Q_?(J%6dE4&BYZQLF;oIt-c`EepQ8Omvj3c5 zLH}El{U+Go<(dP~;b5Q-4-N;A0Io5W^@-A1dN{-|5wZ4ka602l%4LD586IDH%P{Lq zuiKKG$^h9eIF^OBPOz&<_fX46sNmwlv5xsZkjfO~K-;Pw$>n^hue} zd@s5JJgm-y%I>!<;kgj7R=H&@YI|NZEvw|5Gy#AW5O;4@*-UxidI?4=eF8GwY`i;) z)sI+Wd8fGoZyBg1r~FmOvmG)^o+^b0oHv88z;-|64TLrAg|M2<6+wS0qXBh zo10?@EQh(_aN>3Lzk}RK1j~NhyaSiMHyRs)4;od4vJhDqxB{+mAG%U?)QRGtE(5;!+LL@NWb~tp zcFDEp+N(h+WtO_5xK4<=fe^1UT#$**_?ejevVCL7P-b$D+{@z*M=))w!eb{Dzh)pu z2QIcz;L#~~tNK7%=a}z4NfCw9j~0Akj1nAtvtBFr3jJu4J{%- zJ|W{>o3<9MxZTBsGSfVNK3N7jY?j#Qx(|2AwCbxj;d3G2Um8?v9)#&%`y5^5m8V^G z)XcG#_ReDJM_S}f%J}d?Wn~!u2RQOk7}xaB;jNvM1K{j2%Sba>nSHWP@|*Wle6r1v zMq?W-kgx5JUA_9~zViLdc0%|gN|1SiXkq6+5!pcckOieDtH?2PQ ztT?%AiBJYLlWH7aPLjin;)c&JPsShJMVRZ-=(GG)PllFn=XFD~!K#NP+ZqPtTOoBv zvnv&@_>ml%?$hQY=RR4L^Z*EYXwg@!k0mnL z{-Fu!jb6TysrMdV*7=lJnl2|?(9abf2}1oUin{>#9_#;OgOi+@4tM11SbXxSO;?F3 z4k0QgCsr!vDjVfn(P}2iYYsQ)u5P zJI=ZTHXeZ1u?OH-GvN2fT0=~x%eT!&K4q;NZry?*4*+|XN^EXL;##HlTM&CWz#U2+-z55UnghBuvxDu%I#55Oy>KeW)GO}jW$wyA2%>zCcugRC)(6{@ z-8Jts`w|5{ugAN)jI&_+x*K6wjb1HUBvh;xm}%lL}jz@V1D0j0G-zNe> zyp>et#2Hy=&?s79^oS_$(c zkhqffD(tE!JsII3YDvBL64DZ@cX17)y9f~<88^p)XVv|L6v%DF+vzB$PDiwJk2S)? z<>W>)QcFiEo*;C*=Xt`sx_ZiOMa6I4YsnpWz1M8ax zjLhuJ?pi+t`~@G@_viN~2bs^GEa@#s9%V!(-rZDjjtC)v6}sF4{+{b^5~*C*E#Dqe z%&a=@O(sP|{z(m(VAx#rL(@E#7=`_w%g=!eM0I8!A&Ah}I5(giH0O(YlI#`zmfb%9 zB)lN3dzxV?D#w=2Mbe_uKU+ic0C2Cd7^HB^?8YK997Xungw$NQ~m71Vb4RA#+dZ4B-> zw=e3WtpgExr#?}@T;?J@hhM>LLmeyn{2vWo?fmuqe%8fK>zCp~MY`PFKdZ6y|KvRI z=fE(+>N9ivNwu<3Z2qj=SHE)qh0L!ugZkgDH^~4>GWg+Z61WE6IP-mTedmK~k@MrI zAAsi0A8LD&ByQSTF)f8k_{}`_kKJa#__|U~^`4@pvaT})cB3#d_>UH3;b3^})?-uN zAVLR$?Aivs$r!luC1CrQd`b+!(;~UE>QPD+JVWWKkJn4wfTxlYpkX>IoPP{ z!vqyHx!2)tX|f_7_%~pJu@`&y7lA$cCGoAvRrCHpXx{s~Mmn$RZAt z|G+&RIKybr0Pp@oJcALg^`l4t&VV<`fMxcs4)({&r*t}X&$~$TUhrnGGy4P@*tJh` zWA}GZ#;i3w0O+`%@mx@l4wC(1udg8Gshow((Z1yI`ecB^a=>WKhk)e)lY23(gL1I=61DAO@*rHoq*dKs8b)+sm~uBkUHMh2X2)>a zwBr$!lF{5)-Q0(iYTVyL`M~k6M6F}%H~lGz@0;Zh0QpCQ5t3!Sy^B%)SU6i@|GS!~ zi=ZD@?OVG2pWY0#KOZlW5cf&d7>*35g4`<>-(9k#vWfY*)xXql6?c%keHbSv!5_=UnJ8+e?djHg9USRnL zn_bq$$;<-~t9DlfrEO29iywdhwt&kst5~AXd21Z|%ji<3AG*+)oL!yVv9oC8zxl-# ztvz`!08b!^iRdj@mE+Z+JPm$d;hSavk`+mNr`@?w@@xmal;Yi^(DtvY&oEO2^D-s+ zTPaR46*#IN0IU<%2jCwcgxv2Q(v*hAaap3hr7L@ixAg~AYfndeS4T&WkZfBk-Oqj& z#R%c;qz5z+E!p-G^GTjOSLAZ>zRtFFFAtV9OUVy|%NEvaeNyq(rml3>H@COm>~AFg zlvVoo&+QM8&g8~;JpjzN0fUB+d+W=9`1n6yLGe4Jv|I38d!YH>oAz;R1-!W;{{7`Y z0%<=cCmN9WQeunrSLXlFzJ9^-r`_%sEWcp+HMU%y{eDdSHRS$nR{jOc|6>z0ez^?k z@x9jN1Mtp8=_gf@(#@nfTKwDsEB{R-#lUa z*iFC&|6Mz{UXFBAg$GLE$7BHfNAum%IOvumG%hj9N-}^H$f0&u6=D86HrJJ}<_|SV z97FwfPokJzqAkhxpx*3PQoW*+)oPN+{blv;=-imdBZ{39ZUbS>TIGv|U&IHz*gBud zQ=NB9J5Rdq8N7WCV|Wp&mGvd2h+BDc3F)r6&j`bG{?f%jaEXP@SG_Kz0HTIl(1gIg zIggObKx{sl`dN24y|@ml+H8LSc=$Joiwk@M+8zLE!RnHcYT{2N^@kJ!)QzaU_uWv- zR!*`eRB;03?N+h-_TR6G-BoWcptpA0XJG{uylJJqID_(W#dqP8OIT25&ci;_c0ROD zrein-XGr{=x}iGEXlRqZmqu~~^QmPA6IB?kUm;}-UIjg4hrj;rpsb_{u*T2omcZL3G_%Wj=7J%NK+{8-kQ{u?l%s7JxSd(39X(RLnlT})_@3gdzG#KzATB~R|LXwz|m9Q zi?6_tZz4BQIM{Ja5$dk2FDBeSJfavQ!i5v8X}ieoKrFvxCPj>q_+0!N789A~qsM2Y zhB|u&4I7B`8cB<`ElsagjAe!-k|RerHtBK5t`kf4zXaXJDY9jw=IrF;1UDU08F?$h zw>*?ipKvsx`Dt|G8AL>buA)Z1d|t09Ybb{0-KNC16DE0=if!ahaNADrp&wVip-rRz z0--8N^>y^r_`5zz+A7fqOv!C@p6`1q|FUG;lM+9r;|G9)(w+8x;QPcxL%EDafVoM) z=m2!-)?{+eBX`bsafjYmcz5%2S;yNzb2|V{Pr03Z(%Nx5JLzAR*JipH$f zyg{)4m2;fnIsOb(UGHq(ssHw|M?LucRnI($>O0w1s<8T#5h7Xybe>7@Uc@ZasU>w9 z!)!#ML7PxOEhvUIEL23vzwM^&N>#);^UUz0j?(o$Xv}c4H7ch`{_(uR{*T!f^ z$m>l$B7Fsx{^lH?mD8p0pY&7eeOHMa(A;sxdmTe@W_<^B!y1it2@m+t1rq=0&SVwC zrhKq8v>Iy~IdXDTpvn0HnKFqcMoyHsY@dF=%>9QBSBcj!3&Rxa0Vq@HhDDFzDfiR< zdC85C1ee%%q@3!q&Iw)Od)?EIUFW2WW$0Q4k6Ftf4WPbzn-1&BFf^J@zaBVIz(;V7 zIKHsM_;FFyK$-t=X;N>|Sk(z4>O9Y!{(8QN?j6iUQx>=$F{3qdpFVat39ZE5s>Zjz zj6Mn>iMM+VpbI2<0}tzKm6)bO+#+L!h4&%qidF zhiMnm8dgT}ypfP=Syub*MbId%LDjhSrhwY zfv_2Zs>RA?rz^YgPw5T_pWyuRghaP%462T6vx*D|tAf0@Pqk@lL**?zSqt6_R^pMe zP^5(N-*GSKV_LYmY0HJ4p`3~F+aA^(61sMO_=X>^EsL6uxdN~lCukEvJ<4AFu@jhA zU=dMtewBzXoOB8J7w*E>Z{zW`R3BgICU zb+u@sfRJLy4NbYdeB}vKz#QAI&PG^=l0lGr|i;qDb$#4c>vzq%6_z) z&?4wjlX2#MJh?v>IrM$Gh*eOeMko5VPgoeyrz%!a^Ut1$t08)ZtS9y&c@mf9J)bW7QI1kuSgb!czw`lp?yg{o zd;hB@W;~&l5P%Q`Q2}@z%Git9TcMW1x!n3_fu5PUsf^e9#-UkrGgcclrJI9E$4}$r zX*}3RuhNsAF@=$~&gh)T`)n@Fp9t4C>1~a@! z)jp9S;BV`DcA*_;DAZ4~`LTI!TsaTfd?y>v>pmoOivb)~Lv#qiz-90a~W3@)ohCWS3ufgCy7`0yny6lN%w4rzQj7Wp#>&CM8_H z86Ab4;V3ll%90CRo1Rx52b&BY5}Yx1cY8IcO!lw|8{{jU#z zwYU1SfU1L~CAL9vOHcz_k4c-cEdnVSJk6*-4k!Qa@!zKcOR3d&)D6~<^Fv=(ml-8nDpe*+Ruj+uoEVf| z^iDT1$?h*jQh~dwTdqpVB5;%Kjh!dkQBbx@A zYJ*)C=2&R94}f`1P23PGe=S5W#EL=`jK?nzm-W_#Ybkhj##c8tS#Qz;fJ05xq+Bu})&96+)y4f#@rd)Fv6cx}RhHAH9cR zNVE2!E(QS)fF&Q%WN z1@v@00QIedlWzkhT^4)cPDUP=gf8R={2)Q zx{^*eW}H>Yu}&~XJ?(J&s24-de@023jVqFVsHV&xVlgu!BvTd1!rGh#eLZ`?DuB2k}rw?tD%#)!Ss zHdUq|q9M*eGVToxNo^7F9W#cx)Wq4>H6vLjw6?CCRFsV%n{Xl#+UUd?n&2RAK|bH% zNWs%b65mn1gow#l1n30(hw!|$;s*@;#Kzf5!45;+d2H!3)CW}dwOH`WUDONg46L&o z)zLk0a1l+GD~qu0)Jp!M_~Bq|6iaWZN1tqi9T_~^-J+ho|F($sNLmOBBikx`pX`IA z9o6&Eu@_#z1nN(!)sxV9=IKbcUO#s0&#p8eJl@uHZ^6^2Ph7OB+0dO`+9uo$$0k-<{Lk|Ee z2+GOw!oZ7RQF%JNj$X9|9 zp%JKvF!le@G1LRFuOI8Hu2D!!qRHSrhk*tJw2bEl$`z|-Jg?fOn!H0g(Ws*k_wBQ$ zmhTwRPn)MdLvHr*%nuBgi;>w?RwXR*rs*dvHJMa%85cI+0G zZVPOS7IXNrUk9HFxC`~3O_wdtn4Ab1N8GoDv<{x_%38{>ZZJdL5?5f1Z5qqN%7)68 zaSYp`RQi#TZMGZ;>=)_vdE!-Co{;%w;o$5|UTjNK)-go{pP1#X-h1g%!HMC7V#FHm zwhMyqh*KT1l!$ZzSul&UiIw~~U#8~*^i9s#?}DDY@XRe42i4DoKg|at`(z%n$`&|PA7Dq;wJ9HHumGkmH{DyL7x z&!6=hnX?Mu6Tz=f#9z&@<@b@MhGsYtBc4p#zi(2z$kVpESxS3XOuQErlbGj;{`|6X z&MVu5Ux_7{Dq7N(bL_>VaZjFY~lG@+9Uyq;BGqos;{t&5&`C zdC!J00tkMhQZ`xtHce5P+|$MgCdw0cqGarOsn5uD-joV~j+FOT3$lk?K_2D4gt^4* zz%!INtMZ!67rAg@0EJ!P!Bf}rUbM0hFtKMUs-M!R*W3qRB|5;AU*4I7&DZ|_q zV^FUr1wC*^JO!Wcg_oVTBe;fTi(pA}I3n7f3Btf!PiGj|^l4bcyvA{q7E0^j{%H{s zbaFqU@>;3LNXniVl(QX2ov@Rz9Fh6yR~g)l}z5n4*nz$4-r)BR#ki% zU$RU1k}(slY452_s_uQ;MA2L3toS4eRsl-5j16oBz=NPQ%)u@9aAAo=${D8tWsAr& zdet?0-e-L&gLbU5x3V|P0#ro&YT+vb+~mrmOC1{8WPSIMaQ2nvWC@2ry;NRmJd0Sj zbdIB9F&9p5sf|QJ$fA)hsO5gVE>aWC(ew4)w;K@%_bZkc5N@Qp=QcY|!qcgIDb%*u z@+*}&rVX#U<;jlYuO{|hMd~!Bo-Ca&-Q39Di}CNu)||Y$5p8V}H^zf&Cz_iD3!iE` zxPw#(UMg!%39vc{O??%siL_+;Y61%W7sej3`Q!cei;={-o0Xh2Tn<&o;LL z$Zsz-vPh>1hHY<9^j9rE)q8(Rn-VGrU{2*ZBG(0)smmL0HTz+b*DzPUok|ei(|nx^ zvF2GD!7Y5l2cJGW;7Y5ne6}0tF_wcJ*7qcsSqV&JhGIzS&X?tWOt7a^J!zmj+MHJ6 z#b#X_G`CqMdR8Bw8^!IA{$LGua73hG>^J8)AR6iyf< zd|>Po8HziLFNPDp*-t9)K!b6`0b#Y5_#2ee-)R^bwv2DXpDw!~!3cs>BY)`aR_ z-R+}o$|A< z`t#QZ_f{czYVxoVjM=ay%Zq6wDB!0Y5^tL#U4*4>jcK!qbK=Txm`7PZ0Mcb0(B<7EK@veN8&h?N*=d$<$Ttla zy7o)MCHR|S09JyUZ8OSFuMxtu`Xq`G@I~#b3}+`;-DDqRw=}$pZo`x$vu*U_ncc%e zTS$44`1t7)Obv9wKJ%=W7_MLw`{(@4QfZjSI!BBwosa=^y6Uuj5Rhwod(FV!Za&KVK{*Tb#0>pF@C64n7TYX zPVh1>OrDI>^>SA%#t!x#S5JT?+j+7pSx#;0Ipb@H_}C2XYxNBtQ2+i*%(?xKTlSGe z^a=fow07IQ34_n#vl2fEU`YpNNj;e|B#-I*uk~!bv0VXaJp+~!!8HYlTWDc3#T-+dAd0^WL1yP1b3E7 zmiE4kXeOu{xU$|qbA)AC>E9pbUnhmBqH99Geva6JA9PRI6mf5pKe2kkc1Ts1IKGj* zOeuZxe&ikOdc7e0dX1yn_{txv!}Gi4*Si)f@C*PeCw?}jPdeKvCqa3ywQcGg)1n|% zqPtYUE??-P&oXjPx%ecLY4o7Ha7KIFfMtfuCf1G48?WP2yklSYR=eX{>&zNjW7cEL zl!A6^*L;~GJAH6G#`&j{C1k}zbkuHGPS3l^*FkDNehbIncI;dC0#0tD9EMLKHYnEM zah9aO(;UgI2HsdH_a6v!`-f$PABif;ne`;ZxR!}C^mBYH{Q)(D7#Vw??|3qWGsNZN z$`25mFcXqQI8SDd~Hq)$S&Rgr_(D(kUUFH0Uqv;1; z0nf3{aoKqy_>-eGez-xBS1;r#e0lC4k(3IkH%;;)gKMIxM>_yl)E@)I}{KfC`0M>2LP2V>KBD#>bBg=a{<+yI~bb zqnx82fN$v^b_IXfLa69F*QH!3ZhGtXqnUbagNo!2A6HjI-(m0EjW zlWt@$e=H~XG%%PqPSl((8Ey+s3`75ZZoKsy19V0RM7!s`bXOK%vy51}p3@`ArS0#$ z2SyQ%3s=u4MJ@B~hHJkgX4$*r=ph=4etwSN)$`OzMb7w&Z)nczk=}%x7%B$)VgK-r z(rB6610XKCqRjACEqQZOTDEh;6A7^eHG*IJ9=g6wBO4JJYep*3Tat2jnLfs!)_LwV zoagM*j*ur6D{Q%NP#-)Dka}!&C#8HZ;V4G zvv0_a;3#M<-;;u_v;I1b{+vqx-B7{$k?)bW%Un9a_5sP;g$`eacaIqCKJ1eKMBf&@ zH>MZyVA8w`9LMvjsy)7_;x(1gdt(x4xt?;-9%1qvs5F0i%QiKf!cux$fgd~E5Z75) zF$>8neBL@Z9fAilBKO`-O%BA$@1dq@&mtJLBpT$jD@_pBjqDKT8am9?#l0*)1!89l zj2J#g2Ha2CjoB)zctrM*+fJ6*Rf!H#cc5BU5e(`Rw0ZY>8}UAilV|tulbC{>zX6d+Lh1iRVmF^4V39 zp_phYvufd-f;S79x@*-h`~02DWjx)j}=2J7MBw`j_P7hGc{PIDr1EWA)Tw1-=1;Hl2Y`6!RCVv`w=I4K$)i&ZE2dU4iC9%zTRP^C-gK6v<)H{gVhr4z~{Ov-^SJ_C6nw3gb z=H%YWZ3@L~>AoJ@7B~D51z!w#se>*g>f%}@<3^l9m`N~Je#lYSSfP`2KMP_f6=Cvv z3jx|mR8-Z1+qMJ4zWY(-nHbF*i3$*05PS-wN$Nkh*XDwYi!yUx%Km{7$L+5S8k1d~ zIa`n@-#e7$y?-=rUBMqDQsOl|uWipIkp{jR8Mr2>Q3(2;a7u(9U48%vL!0psba)gv)bisf ze;$!=Fq)M1H757U5%7%}#L|(f9d=xsV!y%b5kFgeN>+hx8NosOgMHylXk)qn5BVp- z_)`k4&6tgP{^vaTZ#I%KsJ>c*;V%}mMT!0_`F>)>%-1hQks`f1Gy<^nca|+CejI^C z2UFP8PJn0bYP&cJJ4RE#W#}rteUWEX?zylX!qolo{ifT2<<~FMH5uR$ zs7}04PsVP}XeeWFM%-f4@U2bg3OuO)%?cQ%j&$8-7(cnopyc4Ozaj_vLKw;ZftAJS znqHDEgpzn8@Hs!Nb|;9Ek|Hfftm{17yl9tS=R&RTyacx!g*sEd7bCjgPdPw;x3z}#pW3ZLC7%4_vI01J zvpvO%SGMGu><2~iU+lwa!aHpUVE1{boJEYT0!e+vA z$&62>Vpv2n*!@*ixRxEgA-q_XS|@GcDY_JIdy#}h(aZAI@61(hbW&D}X!(Wpck6ul z*l}^kF-qRu+w%9MJ2mt!aH4?>F0ndlM;ANrqe4lVyxEKy8dJsvO}_WwR^gy#3dY*3 z_@Em#94#e!pN~|}eZK+4eX74(k3Pcqs)9waM-m@AV*J)8z~BLByRY*JFyXkQV?*ln zOiilses7m*;la}Z!dReZDHl~hFZgnJMQ9&P+HxaTrLf{cLg+utF@5 zg)=RI_H|GHWis8I-HfqH%Hyk#*0JUise7a<-%#_gb4b_09-Fm4t_ce0%X8+IN38jx zs_2cEEZl9rlH$D4a&Yd}QXmo}V=kR}?Pf4Q%tl}1{Ae+4>ZFV=IyXH%IXW>|R)IkT zd3fvocsMcot-k+TkJ!VeI2_b!No=mZjT6_I zDDA|SYVG(+gZEw5w#a=FJX}_y*AUw(y>`((-r^JjfiV6x&eG_PSfjj?yz5)I;@CpP zTGu6`F1jDr;7(0z?gd_mWgRzGO6^Md;*}Sz^N@%}*Wy%~uCiBM%vfV?bNokVFhZ*Q zC285}8{!eToUS_w`I_-=)}dab99Sh!)(_ckfC#n(s=^Ngk;qf8txbj(IZ*;G-9#ME zK72wd-W3^}f{8Yz>sZt?ysKPMC{l1GE!j%aM5`~>boh`shXj{?ni@^MeM7$pwweU9 zY2R;&q=07U%t~kjg<`k6C2u}2RvDaM%OsZWEw-cRnRx1$mDF$677H3?ssMd^Pa9?O zYpv!V$vsjWkH_eYhYTt>B))J`BIk)PLev^t@|XKEeLy#Ota!XWOyV~PE6G3^6(=P4 zUGK9(^O04WXu=ZTeo}?pBf5=>!}vCsH2dhU478a}7;a-Sq@4NBb9){$YRM3xB1s}h zk*C>`62#@}#ta6-9!k*T6@4FpKN}MNsASHftyJI4P}E(ys81qD(U)P3LAzVA?QDiZ zEHonB?K;F>^CDT*u42R&e`w$XV(7W<6t>^syjIXQ5Vc;6Uo>Z#C*_SM^X|J6Nnri$ z)$_tuQb4dvar#ruqz(cPD`RhTLYsqi>?Lxx#0um`?w`3VW#QT}7250@@31{yorX_Y zpnTGUQ0eo+;vT>B`G76@1-2?P7_yLn(|4sn#6TwOEJ=FyCT!$fCRdN>OmApi*E?th z!3;me@H3`MjzYIjX1-aW3C@x-TT4xC3dv%>wT^7#JSpfAqXhrByhy#^$g{vO#9U7N{z z1RWsWBR&%4Z4%`p_b};m-?Q9iLaaFzY^}a57;-y!X1q-=U(Nas6Wrw>{c%Wm(Fo0p zdg5TPWP8X-E0T&5(j<=-=RNE-%1Wf!1^(EvAM9(?JWSMs_U6pkskhiu>CEkGx zxE;}|`S0c%oo5P!L2xQ5u+`jDdbDpvHTpF8eVnSPGA6`p-;KX}@3U__qit~@A*War&B7o3ix}oZoy3~StyVMv8A3k}JJdpG}MiYD1 z5Esuie!B8Kk3@*yRPuA%gE@EH{KNM%=uVcz81!v`sJN5QHs9wtf=nH|C!_Z}REQ{< z)J3lofns=fG2yLu_v91#b@GpeUMn;)*Kso@I1e~>ygX$PT1?-#PW6}UO6&BPdC5Gn zT03Q`n_F)~j-Mfw5(Vlr+y)NdCKC=+r^*jCx|V0x)|7k=(rnbW(4BEO7|_0bf0ff( z2D3w36RJn)`K+c190?y?Xlt?|UsT51BvQ=a8%7}Qj2vXtxf+Kn*)tU@W`p^L#hG=~ zex|_Wx%@#nTb@CJ+Yr3Gx@d`9E2{ymwe4o5{H}=pAUWBD%<>$%hDeg^iwo{b5k?rj zxY}t-#*H8sm_2cBGne!oKN~l=RMkvEA!ov!>Tl%I)`-cD39b21R%n)*ne1xG zg0B=d=pgq(#)vLXJww%b=RSi2`eh~~lMdfI#q};#vhzG| zSDdQ&T2-eLMymDpjz=R5rzM4}==4t>fcc9&vDaM3*E&+GBM2R<^J6Z_5W`+7n{YQ& zT^_iE7>U=IKzUx*`jI=MBHnt*iMRx9%`Vpb6})(en=cX8Rx-)B*rYVjP%WOx|aXI zYPzp5s5aW%nJ%v_|HX&qXCLuiaq|QRW(Iw>v}rBdo-rbA4fC`2bTQSy=ulTVz>gPCZHUgb@Z7 ziC|ulpsv#QQE9Im$YnOh91=B)+`q2dQiYk-FJ`6jP9@y5N}Mnl8~EHa865MJirRX* z7C-Hgk9PBoeqtm{QsJ2rRgtW&PxcC)jpUVd!i9obLa3KX_eJB6Mzz+lN2+zxtaH0V z(?6a)0Q8Ifd!InVx5WsR!XcvC&Ez;^r8R|9FKXNyZOLD}-_k&pU&o;SVlbdXnO<3B z-q5hIEz)+6RC81oZ@SHtpcym-Do8$1A9(zOomxjQTDOS7uFMIgfI?zV?)usXW8NUZ zWL&tBF*oop#$uh;CVqb0g)rj)CQrOrV(O1tz5{~abFha^`WJ}DRN#Ye3g_qNUI~Fn z^rmXQyZMcYymCZq4!xpt`Tl@lTG~N6N`gMjde++(F zHmI7!6zW}o2x`925qCw2hkbS&xVar-Cgxw<=zp+h$318A1?b>~{#OAfOkqTZ95QEx zg7hw^(}{^|z&ESR!h41>tZUDJI}{t(y+wn9NskdxduQgV9vmmKDd+mY$-o8|Ukjhf znl7(oC9GqP4xc=kVs1H*D*%}~L|0(4i87OkIzV;0V&zW$ZME-N5+oZ97B!57 zt4D0=lJ-pfQNr(Mh!XQsHoU^-OztGLm|dgLVTEUZl4uj3LxG$Fd}x<4_%z}8@#EoU zK=rbal2>lXrd7897c%A)F|m0FF)|gRR({X;0&^Cjy)-h<`P0%qxyfwZZByO% z`SXBeqLHJiJNqZo2{$_XgiAEA107=vx?$fL9Jz1Y_FelA+A`ncxsh*JqGIA5Y6@c$*Cy)t`?5M~Qh`ma&RJIOpCvdn;L~@AY9zFLH4i zxs#Rsu@D@=Tw8RCJ3|sxjBe1ucZ2IidevFS>q{uoG&Ah%r3X}}W!o{x7tD@{U!n(} z6!je{0GJzr>NBzSsi36->#}(ztT1=@p!=o$C6--I+}wSF2ocv1Q2ZfPb}#6I6A_cZ zVX}7XQc%Go|d3>>r`S-0^;JS?z@2UncH(|ACrOW z`{o~F{Bv7q^SXx)+c9e>nxZb9tBI38C}WU|?K@2;YDy&Fp{{Y&X~q+*IYGK-H0NTn zYr2O)*;18EG-(4pDM7EhGJ7avEhnPhDAn)`PV{ZOzcPOGNNA3`3yWFRs4#xKxS$lO zHaw|%H1@Sh22cH;T+siF0ySXx*8g|e*Q#>*GgOt}btJ<*k){2oq6^WN3Ec`cxIlZtp($lZ0 znJ2zC_>E0h?4|2r)!Lut>r#hy>bXW9*ozBx~h+5GlW&U5u69|hDZIf+3Ddj(2}aYN4}x{fpBxATm{j^9WEzWr?R2d zSJ2X&8@$rpZeZI1GUNQpfCRsCR`>weLfjP8z4|& zaFFv-!ycM%l{e}5Kmc1!WrzKvF01o#ep;k0?TsP;>;Om!l0KIE1UZ=|6ZQhH+z>Z- zZ|f38kae!D`h^@=74OXbY&)2(na zMAhHlr|a`*Z$(9|y-T|e@yXXDHHgoNbLQ*+QQdh5HPvWqKT-tgC@5W!ARPrE2#A8b z)JT=ydkdlWZlp+uAVGQy0@9>}-V{Wt^cGqOO-krh%KOE4zH{fCd(Zvm-1+{w=dV4p zXZFmV*|XPP`&qx|S-Pvj?D^5W6#uzl`Togioqyi}HJZFVUnRxe{?cFpdPtK zK5)rK(ilm)=m~t$4D`#%2iA+$YmCOu!=IW-%rhs7J6rk^M@lg4ngk#C2Yo~CE4)9c znM<>aC#9MJB1ZK)r0SLh3b>z{duT0eoiGJ`mGd|$KcJ!cW+xiG5{nTjA;R1V4bUa> zM!&CCgivKxE2K{OXptA$TbWy%zjamk;d6ImnyCsxd0}AhYBKvYz5DVzhsHqjT?v9V z>`htXU?(b7uJVYZ_5pPDeNjD1xxPWXj~?tAM|&pyUjo%Nm*kJBObpvJ@l-KpOAs=12ud$XB_dpqlNE$_Uk-SVOc%^p6`lcKj&i zxu-yuOs{fDtTSh0j!CP%RlA$?YVC-TvhCMf+CV=$_qPtlcj7uz0B?s+#yuPUvHj-x z*!*tU&S^HCVk1H1KNWkntXDnx zO!*}4`D+0%K{r^TM~+~I!JOLv$c1?G#6L3930DsEL5!k#)^2iZl+h80)4n~sV{-i2 zy--0c;M~bovssc-Gj&S;vtP$vL`R8(zA?GVg^_f+9iYJMlh*;uT8 z2X|si3PlIoy}SK;B=g^>zDC~lNTrvQ%Kn8a?aC_G|OkgjA9gngBRJ(d}ilB(s-S8uVm%VKUI7rsZkH_P`p%yK$}9Z6SK5LDg3{8q z*RbJl4ieV z+J}##`I9EEIUW4fGNk8Q>+*tDOy%v@1SQw|Z5{q_(v_vvL;D1cy2}`^hC9riHLKLL zL{F~c_WMPHtz~Ox6RQIwRHGM6DKfNk1XwR=WA{~l8B;d#CyfSkZrr=3AM?uSae*3M zi)`5=#P6s)zF|pkHP_P|xl4ds@fbAPe-T|U%sITHvm7A(^4uIQ6URySxMyoMZ1qDm z4}dTeL!k7@p~&|BUI<|UK300aE|MyWtzyhXEGAVKA^04t4$R}YoX~zKh-BF%k7b!C z+JBhd)VHD8D|%`pYvBSBsQQ+aatM^?WmDvIV`Mm{7o4Uvu!D4H20Bek!pBZSs5We0V#W^EWLXo>|au@ z`GusKe_qPe`A|azM7j<>ePibTO8=g+tBNu+yMOo?-!Hz`^{xru zqEYQv>Z*m75`ui%2Xx%T@k-Dy`bP{HkIACO@d_O3TfMI(C=MdfrxTSFO}ESd2wL9C zaeiOH+{{#~CtY+Fp)N^3VS}3SA$r{booF)?t_ypXHJ22DVe_RY{vPEbC^&dDGTVy8 zS~!Q&Tl1)q*D0}w12L3sN1YzUc$lbkHm$-%U^n}gEy{WT@l#V@WF@fh!`rFG?VwVX z|7yeg%bHgfLc3Y*pkYv}2SUKGD=!b{OL&>KZHE?2H%Uy7ZdA$Re`jZXa7$<0Fb1x+ z#+3Ye%)2!})gj==%lBHH*~`hg))Q;ZMx?ccv8qA0GLh7k($kQs|8ZaUrn?$~WlF>2x;4 zX>&9p>Hwar;Lr_MF`kNNzBxMZ4pRjuO^&e#ZRz4sQHfQ7pX&Yuq=qkZG>VmDDNR*H zCcBj?1f9MOc0{eUXlaS@4ED^mtjcUH#D${s8!xiF!2vRR3o{G-b@S~W1qaSSYZFROM=wIu03+VTr}t4DS8Egv0E#{^G5kP0kq*ffsx3s%LD$OPY*yU8kPOK;e&&DNwy+XtM#1ev%RTs0ihyH``##ttC6% z!g5r+8+bq8%wPuHnqj19StuA6*M+DgOM-pc7y119P0A0dn~DT=Kg%xTDhBZW5K#*c zJIRf`(iuZkVS~oY@8ke7Viqd^RVKx9Nn!QgWO5NRAzqTqlDs8|OZb4RVkvQT54Kd{ z?d@Hze2C&Hzysf>r|-U)5&8N#F%39$_CS=%>dr^4ld=`E53FIU0VgVKN1KwrV1td$&)KCkoKH^-kKtf0(X15;)YD8duTf@^38m^u>*MGkrx{29-*!(vPbrlLSZ+2^oL)Z|JvM^$U_hFKL{;D$iK=vk+ihqK<3sZ(J*_Tkj2`w?sA#gG)~gkTtbz&rrX`RT1bB6$V$Z<(Q8S9cVLf_L!x5LH#kOd(SueRHHiEzR2J-#4h;Kl8`p) zp~&sTl~hs^qRixE6BHdHy5qP#ZTgq1z6$Y6*VDohi`1| zd1(ISW}jqS%jA!|C28FqsXH#^=-IX`Kh}v%D^<2v9MIT@>@XP>gsn?!BGs_(&89xy zdAzx4s$@NV>g$YHIiHkKx$dOjeVn@Il)p>P9kA5RC-RJmr1KKmz&5(1USKxtduQq| zwPrVukDK0G7XH0lt7Run2Y8Fp_a+IVXd3!IFs1HPl2eNELWn!#7|)>y^@20`mKPRf zJScvOj$TLo@;T>tuKO()Vcp2@$DL%QpM2HLP~&An*zx?PaTl+n76evMEbQ(Vr)-X< z7mu@Y_~MOO>YilkAvM)@POqCn;H;;I?O2<$0L7qtuk3|{+NL~24~*y3IHxOtvHCdU ztWQruMO*>B-09=_(J%jDdhpL2;J?p(uO8XSL#(<~2%xO90t3J*m-q$Z%i>CGOXgYo-TI(YB_BVyAC7%`;L@UGiMi^iJq zn3L#;^@40TKUDahe49~#Ybruh)qb^n0Q9P=m`^7qc>uUBu@uSf^-(t0)L_0-u<)uG zs2N7EHr&$z2UjOO2p3R)=FOJUDi5$Wuup&lF!y?M)zv$&p=s}qhWB!N*sXOdF%SX{ zvr*ngkDln(w;l?wbOMb)SGZLw4_wW0skX*V)`Uo8bpv9P7iZp>GUirWP0JxOW3FA* zFaC1osAD-*E*DJEzJJP+D7TiOpG^_w@FZ*9=f_PY02G5+FNbO>CVDld<=a>N-0P#0 z0j8b4n8~H-7VaPm&7|&Hfd`eU{gZj>Z>_ED%1kZ$(oni^!28f}&aZFutM%)HYD{Qf zNX!(pF)>rF=$ld0atS(yvvW{JsG;8QUM*#ted84$Na$#hriw%X@%v3jHd12yg zOI4ao{7c4yz&d@q%oR40HlN~L3ZtwWC|<#pi3(lYXkN{h;#eyIjR><3Dg2*l+|~Sg zkU`8^w+p+N%D~>x>mkufhX$owcp1PA6`}4<<*$p!0;8ZyCeIhH$s;59-#{SrEd=%{ z=_29rd*AaUSOFV)yJgR3rDL;ghpLVJrf0M8s;ZE5+ldEG50CT(Dau|Cx27-So|}C@ zY}NPwcvkW%yY(=^xn64u zOZ1;?#S@FYOS6qT6->(-VYBn96o(23?uHa-Mo_@BUk|3B^)l6{gc z$%t@l5cRemwTp|JgLnO%s)x)vi_XtS9)!@y48}hecYnF_0IJ?ixnyEF)|qabTD|n6!OFvpU77VgO)uS>j1`Ya`>9+K#@Q)j2VFh?uzORWEv_z_ULvP13^2o|#57Xs zUNLS50zA7TdvhcYb}+MzJ>Y=PYBq#-8P$`{z-0_>{47&44ZUI75(+w0ixNm>C0`7Jr>`)aA5YNM!X zpiluPS)+`n+H3)=sOdBJ$Mrp1J}%yDypQ)3-U+|Q;8-RP@(b8(fY*Nl4jzZwNEiGGu6^PG|a411Wix zIku&_AsLcMJToKMHQJ(*@f^##yq4%i(x9m?sDq~}+gHyD@+!C1t=jV&8d2?c<(IQa z)EhsKvDY=#HX$~7yhz>$CeTnY%$5L2FoC%{5}fuAC4xE6gIUIo&9=*~>i=k(xU8%V z8sf5Yc_igGlomJ5@Let)uO@6=zoIkpR&wm z@qKR$rM!vvVwF6Y-gelo#0^oOA%Y;f<4!wJ!Lqo_*b+h$;U+%T_ey)UkSb3PC+LiewU?lAu*#Uq2=^ZP_}i<_Nbqh#S%=>smcV|T|fda z0xVqx7pdkPAL986e|q}W`f|6B`*F`?*-A<`>ix}9rQu@RC9G`%*i@@o#6i6NXY>AS zb#_c#06s9%M8%7AN7S;e$!k8Yxt|TWuXHdlOaqX=C|zfPO+y>LP`Hlz)SJAZ^@da) z|H_)D|32q?Eu|{9LvxV1C(|-|8Ng8HBfb&>3Ama z2^sJICLtKVRZ(iWAMz)FLH&d^c<6PIv2poFME%bNIhhb|Q0)8L?B3jL+2dZHJsUTU z^fvQ$ez{sfWaF85gu>lgssZ`SLEz|^u$G75H+14;UzK2?G)*?awm*iI zUPpV^j7z@QDjbseU30~HeEGk>KKtsx@G}(zN&qyV8sNMgNw+Y%4*J z_%FL@j3}$qZ_r)Jr%7H>L}_*>B|stcTVDgVF?ve5=9k0}O1l-b0Q6s7mVQxpU8IruyY zOtDK;1tRTJX4KP?Wyi$AWHISH#U)x^W}@>mg?t(XY=(|K5wl;>(uJ*=ppyXIzLoi} z-Fmi9=xrQWqXuH->cF?v-2FbCnvxAyEXNs6`kL}bRam7@9@uj!rp17xI9)Nq68u>$ zR8JXribb#6D_i59-yAl24LKLwDMTp5ttz|hurV5n=_vT7^+^F@4n>kvNF*3blh0gK z8ZYc}AkDZbVH4xv{qA$inbmrdSU-o3j;DBFTvNV7b7>xE;^=d;TRd4;9*jG;$;=xsV)IJ*cfUZ5VHRcoob zE6?8AeBrd9eZc8=@zyVT^GhNuHx6mV^7?3(%pUy;KZM2`1e|^w1UNq*rWtC1g#`@W z-&Rv!v(FFZ#qT0)-^&y(5I7SIbQ|7iJw<0_x7$u^HBC4xsY!J-$y8n-d-bem8lo6c}5HK2n)|d gTD_RpjL+gX!gsnO@&No>@Nc__^6zEY`+v^-AEQfqlK=n! diff --git a/images/terraform-powershell.png b/images/terraform-powershell.png new file mode 100644 index 0000000000000000000000000000000000000000..70a5a4d617017a9d5940851f76884cc370f5d913 GIT binary patch literal 128283 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 lx$aX&tXH({@QCewOv4bl^>}U!u?s$MbS@ zmtL;Uy`HC1kM>@!-_MJ6IHksDrmu(8+ie_ zNV&*`nG@{@Yxpx8l)mN*R1)z%M1(yw!>?&&a^wrP&1z*DsV^17DQGfgviI(kOR#Nq z^g?;fU>*20L8Z9YcZf1{`>P~ru!KyLq(JPh#AvSAmiiamv7XQ0-9oP4eeI6;`vU=^ z&ykh)je?*hE7agP&KG7Yna(*JKeil9L*ukG|L0B8hBL*>S!iVS<(Ib9Xv+?zT<^!0 zm=FCBP+pj0W6>9@M?E{_;K|k_OavtsiB_0zH`EeMiDw$!^48=$eF= zyndKUn%jqkwz5${mS%v3VD({b_c=*w`9jzG_7(*Y~aV zH7Xq%&QMKYPQ;{#bkQ#|@^293{>sRtT2URD*mg`Hz_%Gr*EZa-&h*?3t!z4pL9MZo zGAr^W;sR98(7T_c@CkomU9iS;J8^;=aYk0d#XGj)yn$|lE)V=m^|uqgCtHOzY6y>T ziXW-){htXoZvEeV9$4N-H3ShVCWPh??Ju)6kCona)Y@AWF`NFvuZXi+_)Pt%ptgIr zr~6$SIJL9MBxdclUoBZbvZ>>GY{)F0cQ*xkHdmDu2x^P;K5a%i^_cK>ygYW#<>QW4 zEs89_Eh<~67<7Y-HXRN5ZC$=v069SIH^l8HTvY>d{+);o>SPOget1IeyB6o0!(70p z5;=uBA6?&5!9}+}0NuNy!?Ts_Cvr@?#jt{Bne+6GCwvOeS4oH7>jh)D2bFrAA-)6u z^O*fWZ<)Grwr_So8PVXWpLZ@}q=nyw|J3pRmI@Znss|dV`5s@O+4$?ts+oeWcmLeo z_L7BY+QW5GW&~W#2@{%FnELfRk<|~Jm>|tp#snsQe1=!)QxlohFLmv|#ce<1Re9juti1lC-WQWIQ@Lrz>K|MZ|Dg3t{jHIyr~ok{YPXp`LgE0WghNDJPydj|Bq|w4-%~yJ?U5q^;bt#%P}d~} zyl`%?QNQyt{G{vWNX8UnQI^ZXW5I8j?p6o$U+`-@x)`bI%kn+}@tt2#w~?-_s_WR~ zu7sM1UMJyqOi8DR)0n|i&6%_R02&g9!(ZNIYcVDz3c-rkT zNJT83g)0|$shcT0gSleL#X9Z(Nwi+GW&YKjOL=*wb1)g$#mw5Z%7R& z8C@LKQ3+Fl|K8{39;+$;ya9B=bBXs2i1nso>$nFz6?HL#P+AF3r~hy39W-p>EC zhx!T^0jfi>hnEtzE^8ZH_c|j2->0q#KXQtPP06!y_s&4O**O*kFEyz>i(vR-QntUu zJ(QO2Y8M-GF7_>q*x*7hSpHoE=(^y{M9FfKQMr5L}`TfWGvh_pbZY1BWX8PSm|j zXCeMpR-*`QT-3pB2*nG_jsI}BR3R!aEG5vf`@ZWpN46UPXSMJ5FCoWiLy3HPd@r7& zXs?Q({t;jb`@p2UB-@Z|t#EKXQ^$sZTX;)POts_lddo&1itI>cnTD}tvL2h7m7#4f zFR1+j;9{e)cv;d0ElscFK8<0M+5fs?XAv zyD&C^UOc9us7NaP5K1JP7WH4j)Vj{|ndVsBNJPSqn9Z@qA-%gk$xfQ2%f?OwfUGJiv>cN>|x+ z;g!Enx6(wY693Q#<|yb%K#2^v5S@#Be9@HfP>)yANs*cA|;Wc2vtO@3mCs0IhJR zN;d6Xhi!TecKs78PKwp4Gc0>`KjHU257UF$w=)(58cQVwq${+18N9a9{1)mm$6<(Y2o7b`WQ@7vU9^K6H-}rm$ zV$`Rs&R*O@6|JHvS0)Y@#vxnW?C)+z z5Echp1N931=v)8I=Yi+0*GKR_1#;Nk!vZTCnO6r-G2is(FzQ(&<&IKlsZ2wa zmI8Jgt4B9lRJu3-Tzmf_&~F>?jPN2;`vhB~snEybpbKf#&o*>g#%=hHdci%ijL~)y z5U;?CMd5YoeID)aO@fb91w3lF6}mec6bg{%3;?l2cjg+YUQ553pzX2AIi0tkXg$3% ziDBmuT)!W8C;oX1Tv_d9oWMcS$Y#QnskWw@)UwDlJIP+3gBxClj`_|=Rg&u>H*77> zyTjHxfycCl!H<6-&z4 zC^mpR=xl487BSn~;4ZK{{Sl}*aiGiW^?zPK8s%>~z4t%uu@HK+x@k*F=WDX~P^nkD z)16k)JCAm6|1DOgSZMEuAF1bl=aB30KJL8n-WE&aaisCHFAw!XR-a6aKSs3w1Hdw; zUCCSmdupE!EH!EX*l?TmxEaCxg#!YDszA+gZGCJbsQ%u6=#n>jBGq*|PvqTh8Kmlst_S+^ zfOPGdl-4w#-B!x4h}Hf|YJR=Y=PAW=VT?|ABkwtbmvBhekvWR-Y1}84Mz?aeZm*}h^<5-UMHS~>|=l5%LXnKE@r3T->7jo0dTaWa{bZF}jy^)nnV6BeViexOnM`|w^? za*^|R4dbNw*!;z1lu9A3w!>|Xc-4PHtUSyhaBEAVU4yKAB_}a~vDg!nh*a!*8vVmF z?vxqos*Qa+3X|MX1SAj120_N7Yo(B!(Ou@~>4tLNoR|TI1~rkYh2;O0dbhvE0%mHF zk1qtbMAr`1If#!*Ex<|rK^DS~O9RdH=fqZX@i%a&Q`yrq?s3t^#thSdHO}>!`cV(y z9zG=P5r|EuNTjZieSzzPPPYRg3qG@N;-*|C|0M+X<@&mYaq4LqKa3c>0OY^!;F7}4 z=y(5g4Tlycv`(BeqBAd2YB!EG-aNZSpkG$lXNB@?*x|npZae4K@E2FuOHw&TsYvch&t<4z~=?c;5Ync z?TOQ+zw(Q}Ws0HJVoQm?%qQqW;n==h+0pdAN`@xzKyp_CfZR5 z(b%lNsJ>{Ax|wq;V<{G#w*9F+=0~DGlOhQWIeWS7!lZayl=N7wBrQ`=WUMM>&G9K+ zSW$hC+ciz|v+Tj3jK}7jy8^ee(ZEVopmHL|?tbCQo7szq_tGxam^-unJpB2e|lUI0fWV@wSRaBqz7K)S6|z#C!p;(F6^nLPB%VuGdX)D z>#0D6Z(Al(4=$K^h?}Pn6vom%u7KKb;ld3cpino|*TUkx{n2@o!;lvZ#VOf32h6&4 zuNxI4hrV2IL#5Ub*V~OB7p;%gm)o53Lc3ZX^KZUF)w3Jo9TXvRzp4|9CvV|SvuccQ zw_8|}suHp}kA*#unQG9_P;|40Wa{a;cpS!qw9)JxU$W>td^BZ zLUEiby~viO<6GZG5d|`xr#XK59{IhCQ6xNTE{0YGYfi3bQS@I~7ceq%ddoQ_6{7|A zmEW|oKZ_(uK9T^JN@mQ7M=e*|-E+JPOH{PA9N`Y>LRIuF=p2dPm8J0lFE01vj5wE% znhTsfOxFkp3I`a>e>NP-G~af6*JSyvXp8U;V3>GL-zgO-fonVm(;sg)9C<3+w^5H8 z9?3^5*{|wiquILt))QZR>(cr)CVM>Nj?O?cXEnR$!P#13b@s;=d!?E(lVyI<%7+}( z`j^UO5rvePNIYb(@J;$?ZGVcXmdU4i1I4f8zE@Ls7aHR|9qt=}*El3{f#o)(}*jC9XG%Wuk(SO@18^lkV!V2k@5o&7SjmMhIy(=u|N)3^;L(O(Bvk=A5#BNRXl zuO$kZKgF`$KEWk2DRO6vKfw)W^%u$A*FDo6??X2Xf*vVak;Ee3PcAoiBd@|&B^u@; zdynKEi{+%n7@e?pC^}6!(HBXBb-#*1lQuj|_OLLtIfI@Zg*lW;U1V3M*^(*8IZyfh zKbgy<@Hq`VE#Z}4M^Aiaw9KdC83=&Y+t*7H(;Y7whA@YKYH)(r2@8j763>M>RPg8C zlF_RF1zI^B#2FA>R#L5~CKi`!VQ!qufrVB&H*71hv&%W?ix2e}6rSKaQ9 zp+KVfM9=m`(xjkrM`h?F2tVhd=_2>RVVDHwTymP9 zXmC9#3W0bb%HNCK182Nhn>XKHdNS-7HN1gEwjcqlnG-f>g&N2s=kpaimHj4}t(KGj zne6P0_#`~s%U4*>sKB(*Tnl;n>##Fk{(k%-_a$IC86&Z@bBv`aLT9hgP24g;+ZPKx zXu`9yn4nV;)*M|8=UqQ2U?>MQVBt70h+(YfKDDjTuC8fHMt9mgGm zot0oyk^YJ=HdNCh0l}^$u=@CzMRG~fX0++CYt4+(?VUkkghA3(3!p8R6n?m+sW=7W zL0)MV7Xm{qAhJ4cs2baHwqBVm2Ifu0@)S!$w%FMu;Jo3t*kR?hb5yJnM&qr}rF>K+ z`OAn;dWZPIxmAgXV~xh_L04+8&acfvnvKOV9Q0bnMBT-m~%#>DRWUy^WKT_jc?HJaCB7A`|q zam{p9WebP(2eogmW3I2WAOC=(P}_Q=4AOQ&7(uB@(Lyjn>in$xa*G+d=)ufTD~G?GG^wk}DB3NwOwmrHMx#?4yLIj%ATW%3D!Tzs(Ug0-)EhVS}1d3 zo@F&n+Mah7r7Wl}nL0IJH|m^iCwC&ZxV(ELuV?M_ncu5f8DIHli8M*Lb~$Q5{-E~? zx5WezEN2@&)=VU*28@AFsUOOIneYib4%<(fad{F_)Z_wmstO$R%4qH=_uwHKH7fn z_1)D;e?0D>n6DGV-ul}9&`{NlCeQbVKJ!kLMPI-gm@0I+#4(jUoZdcfQQ*Zz2zw6l>A9#aw z6pB|yF79(q^)O-7KO9;!c4oYM8guG*+qNqb#>au($kbFhb>@MOjUp&VIm5%Lz<lJ{;?F{0;`rBmBv>w4nMR< z54Vz!mU83=OI?}1ezy0FWKWZ3dXsli;v4KZKxC1UO2E`49SPIch*oW+aiW>d%q$Fr z{hZTL5GFf)-9(b*1>Vu904ImLmX{W?z0$PMRnaC6bauQ_R`VtWq4C+=2K*30GzbZrd9QoWQdZ6ODClwbz-yLamUf?+^aK(SSmyMJ>=nlijP}3`KXP%{8;15Vk zD<5wp7h=xVb?nF6UAKW%!%pG5skQ}7MWKZ%bvzBd%2WC>-C{c&Cb5TivE+r;E{i(^ ziD-6*8lI~6l8>k(iCjxI=VX$(Y{A9kq$#Onnv0}Tu-{p$u zi2(=b$~+4W`$!O$X!dh;+j1&0@d~4+K7U-@6Iz&E(|#vsCg-Wk;jEfPu^wLYac4uL^0Ez~S7Sk;n$xEc{Ktj|>6HARz%0%z zX%c-+uwsqI2*S@z$mTwfdN(}s|5Tn62!(Kl|R&OtXF83IF~V|NOyy#qh&!djqmwWi~;9&6iTwG6Q9ng(ai!MgbtI zDei~sgpAj1Y1zzkwo&59ob@M@1M!RiVf|y3;NC+XGa-pM(B;!u`wnWB-@XX%WvFnU zAJS=zI0QX2>mu?G!mj>I57aXtr&Y!-jEvEE3Yl*MgPvw*V5y7)@^rLJ@jMJ(ZKb~` z9Z}O@^4alhNj_6tD>k{<8y0PLuHu_3kSMOpcW_}@B_Gn`l@pywUn~DOR{=v&Eo2x# zdRVH|(4yF#G$bokEN{h{=mZpon z>1v0fpChJj5YR=Bq(aFvnKgLCrtY-hCb7tD@1iN{!9f($J##XlWXZVSG9n%fN?4jKkKn8^f+FrhJ}Gex2aI<-}AtJ_z&9_^bp#TyE9 zSgf0ntu6_k>?@VFl+kSoSXMmob9DVLTVdiqZniZ;y z@*Mlc+s35aer_3oO2&4~2nQUDM)k{1a2OC|9dDFPY^VwVF61JJKvYp`lXi*g@yYT3 zjjWwqQ~%+1Lu?2C%Qpp1$FdOMjK-YQfp%FA6YBvnbEb5aOc`qRyK137P#{b?7;qV7 z_im22Kb6O00NCf6D)Lu&1Vf`mn*&pJ7+1SRcla;aPK$b*xzOuOagFnkt!9aQ+LP*+ zTAbAJv{Zy$I!WtMf3kYw@A(|slO=z62{A7#GgMQBr=c$2N#ELMkb9!z0lZoB56jIxR{SjE&(v zKXcw)l>w&Cb`SEr+m&v-h<3HxO=y$nhn}r3FeLfwZxa|8qS5QfPjJzk2 zD?r5q(`0@vg?#S9?gQ=qoIGMa9_hG99eIUe4#ixgUgSl$JZ)|}xdDb}A{4ro-92@z zW~+vyd$9P(U)1>XugRV6NmtxR%vr{rO$b-F&WjnTQN`{T{Zx4VIM?lsnptg>g{5_F>uBeVeRB)Z8z1dD_wNx&GW-8ZkhgKq<(Yj&r zpzvE_kX_v+X~A!B-P`H5qISf6sb6tksfl7CRKLqtxp27JOMkDT&$yHw49u$Y!j$V^ zwF(Ye*|TXTQuK8xges8n2pSDwfw~BwHEfHmpA1B@l_6SDns`+RbycVcW)k2UZ9T6< z*aWqvtT}`}x5@{Bz<>#e;2RWSMjtBZxTL^TU&SQX{PT2&lKxajtkSZoWkW?k=@m@B zIpkN{uJ5F1Zh$zzye|pgXbQP9)rmZZaR(ddg}Lf>k|GRq6L)qKQtYh98+0i!XlRUK;D=m1?aa6X)@F*Pt6bss*p+>Fd^q3U#vcPSQ0xu(Is%gxQ&H$OXF zXC4YLewZs;o-Y$P>8Pl-#E(z`&1uCM6iC*YtG1{vV!*nyfQE9-vXP}3Y^9l3avMH$ z9?c8RSX`KKc$L$5D^Wq?oKiRcA#AhRkq3iRNDtC69Ki^S>p2^EhzE>&LZ6;6lT3GAiX z!qA#8Rj_uhx&X)O=b2?P7&E|n#?4dU(#-7{Hk>i?$X9tIq7oZ?QFYOP(^0v~_<_id zzYDGZZR85RO%)S=2TMJ6Qzo)R+3|i^dgY(yYwK_VMKB8qwR5IzI4JEzfQ0wOOihCS zF;ifTR8Ln=Rb#7pSf)9$!hXwoMfS~{>ewbzy^>)uuEAQ4Qe@Ip(u#Z+79dRdu6`+3 zqe#=wvS?U(i_}0~9&UuD4%;45z;nGN!{B6hz@+0H+uVwvJ`;0JU zx{`rBrg-H+&b$Sn?YS!gu zDKUshSq*ckyT^9Dp(f7FZ+}b=>&kB|8ozSNZ;}zb*k3e>&bLt6R7uG&vC)U4wK|^e zKzG#Oy7ly6xpn?64xKBWhkKT=j;_MEt{){3ciKKTLlFY*@?Z z4_;l3e+1O%Q{(GRIzxH1)3HA|j;p2IeTZYFsUpnf> z=$;TI{kJALoxjGNvoH{29TOcRne%0jjSHKI`loGE?w8Y`3(vl5Cuu@qbd16~|&Uc4<6zWB4HMJ$~(2T~CM zBXf%A=0$|2g3hcc5j!wpZI73^KQ%f>RW7I->oH%j>XUU+S2y=Y-t%M$5Hr2Vpr+>Bq+U{SBAS zg_^TYW}LJL8y7oFlB$Mu`M?`*m2|SLp;sXHIe>Yz1qiyPe$pBTX&QhFEp(hU)xVO%BXRFdzv}J1sBtc6h0qsMc=aErGp(C`7;Bb(r1G!BfY)W(yi?(6S+(_QoX8u+JKNgbA zt<(6VlSAj}1RS8}9{9LAKP+;cNV)4$W?}{}?=A_PN(P}zviQyJ^P()u7F4B2QW}e! zlP;F^@cp%4jC!`3mGVC}HH<|3voa=L>pBoVEP@Qy2P z)}YIN6Y4V#$rr%YiM`>5GY>c-_(+w;s}sRpzCAVc>oVKCpvH`4^5C^e;q$QFrhZok zmdX;M{xvkp5w^Ke9HSjIfUjgMMFUqV~Do&S>UdQ@ZF0rKkj;2gwncfG&R1DA-waxhcv+Omt;3m0h) zN7ND3)Go?R9 zQ&wm6GT~PC3ov`!{Q1&Fq75AyJiK-4;gTFcHE4|Bd2 z`xG&LziB(J#XM&ZCz^~4!$ZNS_T z_zVFMsUj6iCAeO@RYI#8E-~$=_#UISqo}EVnO{SDYyd#OVP(fWXEMytJ@BjC7%*_V z*)FK!S9L|g2ynEJgNWLer`*6ksKQcNNd{SFu`$2$kNKQZr?GcHPOLB?jM) z*e(*jr+oiVVyYxwv0Oknmt*^3M>_RqgHm>yxIp%xX>OP;O^j@uXu?gR6P|zb9V&}K z2RVVy-s9bZ|FcH9R#T5p7;UENkzraq?idPZ%C485F_&~3=XN-*HCG2eY5#s6ZL#`c zv8pw03z2iVYH5nWza`y6;NN<3KAMe)-;~BAn`*sF3>>qx41H+$ZnSh#?@=BO%I_CT z6K46z4EHoeiA`hLFKhrR+9a?G35ECwg-S%?Z?#{J_m--aoo&UmugRLI-#sKq0{T5@ zep$s&)*BDR!$xvt*fUQl3{$W`mkiK#zd^FeqX9Nvwy541f#ImuO1=A!%9goW4b*>* zqdTcfu{LR7a^YIm*Fkt~#3)&5OaMdF8u^aEbIP{Xc##tYQUHMiL7>bYp%Zm!Tq8*j^;a_>r{w_tD`AO}=n5+Q`s> zaL*U|_6qYV6*{Fky!Z-R=-RsP1AnSiZJ?_EZvZ@YM*<>On(xg&^YEcZsDmrquuMuh zKau4AK6bGYD8^Dk(GJ%Fw+xe!DH2LjW6>yEnK~g58gyaxPZJ8AZQa5NuYMtJp0M3k z&xJ;1yX|}&gD4XF_BTzdUetc>2WEHKG5*-aNe&l|gWI9PFO0*-s9!oByfW@f6iB94 zgxS71rWg8eT68^-5rf~~tXlE+5$)2y?&08eqvJ-<3S3P(t-6eSZiXo=kiQkE05C2D)?rW;IlSJ9D3k<=tRt%bL zt}ZLMwYaUZAha4Ol1%RYilbKSX7$B^JB6~w0V;OuN&IUothsI65CX8Vg99N!#_Q+y zOFjERwPb^E58cxSV2w||m}ch_V88oD53R%k{;vTj&d4ma?s_;wPTchhXxcsVWm?y|ph;f9M7Kl}Q6m>%xt0m5Jr<5 zYfy=%&cs-*2=Q!EWB#aekT!9<-=WFxL^32crnhS@J`=&OWP0H{bY%wqJ!ew|Hz8*2 zbnIS$Un(R`)~HR27x-|qd^PKvDaz(6C0jUu8apERT|g=Flo;VMz68*5?~?&lo43JU zI9+#36F*BBZR>0qzqFnJ1(ZGhDYyYfMPWeN{mACmy$RNz3TJBE=HMEw@BcM?Oc*gc zYS^pPoPhEl*W+NHbNXFDvW=57nFnhPI2=2ND;30_lG^EPT!bab9(Df`-Q8-qt}p95xt?m$c- zDPcCZD*ofSyVWHNC|uMS2*6@5!byZv7XEj3gMUo4YZ*F@yt9n{f@j#aE(#&rF@HN& zs7?~C^3OmEnV5=blITM8;`{GO*mL_8onA!Ykn+=6I*u@U#)vl61kR$)6HbB4)QR6l zp+YzazR!2-O0}J1R zn0QCdg67*{DQ3wK-u)%X6ueZkX#Nx4BRC1Ec+R>R&ea*)w@u2sHKBMU)Q6jULg98r z+-`t>9X=hGt%`CL%Za<0WB+I3yT>_*GxUCwBJSMFwa+=9r@!k~5hY(1ZOIv}2|%NH zn2NrljyH%n+Qj%~9fTTxv(`-3QowuUa%kydBUN;TVe?^5ncxrabJ23KnzWP!lAJ79 zT}hg_Msq%@(7Mq%SVi9 zucbPF*sX+;joU9-&4SWf+v~5?aw_Ee6GZ%S!t#C8xD9xwbz0Q6Bv+7w1>dCvqR)PS znJvVcY}>c6Yd-Aope4)|@BaqLN7K+zN3_g?UOSP?a<253P!vf8js#7XNWymQ+;_^X z++w*Ic-OGPSW3%R8(4fbDbltA5G_%%p-yfHh>MPzLLKER-0-0KZtpltd_gJ#d}&j& z%NxJDy0I@)5;I6JR^8YD7cy2tER|OAhspjblbJ$Y=5p@9=!E{*fB01wHP;cWRF49W{9q?IB8|b+$1G!IqYY*z;n@5x!SKG z7p02%$#VL!CJS`FOL?5&b8zwA!>{oj&-SP-T)0gXKvJFG-Jh;conq^AFN;|bzOeY_fa3fd5UR0lfQF_S`sI{YoY!B zJ<&_cEY;0(Ohan*I%<9SZ*jDrHE*y5IDvQKqn0-5UBJs}{nMoZux@=_{4t7)B8xg( z%EV=UGl|`W0uI>eLygC~{tIeCQu17=0NvmLh#^wF0}QGQ5jS|x#iSUl_C>)kfr_Ve z$ofNIKnpKd@LvaEY99ML;+f+5Sn0t@>jtI5eKJBqHZ+xfV|G<0w}+a}Nal0=m_f$! zvLRE>8m-o))tH=lDaU~<-$4$*eieY6>B1-Hje%S95EQFLV}nsh zM;}{sHy>t~CaMu>xO0I!rr^}x{NFUAla5HxP+Up{M&F`VQD1QqhStKimRH=s)VY;|{{b>NqxgA}WnDlGs6P*qxU zueO6@r3<}%Ba_~iFIQ3~4W}*AhC@D#4*}56feF~m31fG)vs{Sm3{Gun`eQh@sf zNr_9OOg7rNjGY_nCQFvWM{!ktR^wr37_oNHq;z~d`RDa&87ia zvDb@Y34XCIVT`P+qa&OvV85YzQ@;xvC1|aBD{wk@qcDI!!j7S&-Z(jtx`Qz<0H9B50wwXh)9A7#R3QMl9QThBbBVQ zU2!X<_A_JTUNZQU{?-xf^00U zyax@HDTQ~tn6}1p*sb72wOFwn@zzx9ADySZogrT^c$_b6|{q&qWn^!%VUy zXJ87ly8ipy+&ts|zG3jmjc%dqLO{-xyzdwKpWK%9t!&4{s=i*?>Rq3S3a3ZU5~ma` zPBo}zBD9z}CDNmH> z2p4xs{F^$H=^cAbHCJ;0{&(yx zoIO|9Tjm}UBbe~(AW8pfGQz2~;hHqj(k&6TotR*AoCa<58q)y2#z=8MhtvtBu>)uZ$vAf(6^au*U5QmmT-tVsichi zo`)5gCqE+e`6wStAI12jiO7H@>&QwM{fckvkC-_bL;3{<>>4#Lob#9ym4w|<+_PP| zgfd*(7qA2cbAD1+wV$c4k&zg_I*@kZ!_Gs`ulufQ<7zt1sI3h5GsmsR!ljGcr#OQAFn^mmDbK_784PTR z@}cPG3`8^k29YpI2TRr%J@c_>w%U(vZZ{r_pV;tPltb*H!5=<54iw%Z=0o1atSxL#9LlsrhGCO8h{qL+&XnwW;h#lMO+)zGb{ysHY@p z#81+1%zcc0hl$r=SMF1ml4nuJ^1qw9UeHM$R*ijLGO9My4W2o^Jg+HC@o0*+@%@zc z^6uMbowGe}g4e!4)L;;ZEyg%EN(|%c+l}Y-+v?kwwoi#tl+x#XUzhqOe~tgFZTLRH zj^1SL<$`O+@tl%!wx48_|L`~}Rr$r1Soy$C^-!+96@`YwibHdSVLo<3h1X{9`~R20 z=MsZ)8bzraMe~5b9*6VjmH*Y%c}Byvw{1L8Lv%wJEet~RHU!a)-UU&jMK3}0dh|L< z5WV+KbfPmvi86XOMDM-lo%7*2Ip>|V=F@zbz1Dy4d*9`{f0ywNb*pjGgKLlS-M;^L zhMR=-M?#Z8Nm<-zCoe2PbWQ(!|)m2|nP2YoT1UO|}>#tRhQdd{`jot##{3x>MvUMPvQqqnE zNaLHdCb3qHm@q*PJ!lnWZ{GLhWoDw7;#T%sPm7IUh>d=AQeWjmE<<@^i>&-5-FL+? z*UgH)hglsM&1B&9yh~aMwFN8DQuehA9r(9aw)QY>1YWMtRQWCGFhJT)H$;KsQN+IE7jRO6qUIxD)@KXna@p=l-a{vz0%F!z4)0;-8R7u@ zTO0-kk-^4sT zDeF;RlAzsn1~x{>HOD;#;TOGDWW>!;K9{*xt ze`Kp{KUF_m37*0i4G6zLpTvHrS)^1(^DMBT8OR;C3B|Ng0WY2J)5(T>ZLb?%YeAQOu$ezG{{k<8VNdV@yrFL3qNe zFFzuz(!CKsuFsVCO~(<0_vb|&{momMHjB)K0(ryc^~s6O0X0a0rleJAKq5YSKeF9`BKoj~f82(YF0VYmZp`m;R~|^+mR*GyVT{aTX_i(V zCTtskqT;DVjA_xS+ zdGpEpYg}vXGNnS2&+XJPF0kh%@E{ z`VNN!*ta_NjQV{m>4g^V`Z~pNEzQFdTcg?5&8ht*l6QMx_*>WNo|z_fn|!XHdkHOmT|o_7IXLbBElda`Eg3 zN0&W1KW9wUnAKSbvw!XHN*CUJ?a4|$@={@3Kl?9{-`_tI9HID34t*K6W8lr~v8wVy z{VBNj+5$yM3)R1GyXuZuW;#W6KjJ zMivG|`^AAKK9gaM{MD%IQ4hwiwvD(%H)z35UnH7>{e6{8D?#x?h+QNt zsz~&~ik{e!o@v$4eL}8jx3r9TlbDyw8?jE)L!s6xB@PG{_Lwb(%79r$nEMK6(@-}7Ie zi)Ts)3b~6Dhh(>$81Kz1LZk%k8p;ZYxaZ30q>JYAIitBU8{`y_ewYh{*u(1e0k({h zuX}99{6w;3xb0WMrvTQq&%Ra?p_f@|?o^J8`HHR3Peg6C5S{>Yre*8L+J9=~P3j`u zV_ex(C(To+sp9?SwgQ|*Q^qf*`2deX|1Ns|KDFn|4}xl-9DeXSiRPT0J}hiqAL`<8 z`_O>+g}BQ0U}OtHyPIE{5P9p3=f*BN_ERy7G3)XjFGAI?wJQ8zarq8W>cZo-g!PbX z`PEbRILFJ2t2Adt+r_Y)akaD8c7baOy@g*&mQ`JYAJdN~k$B?}M)VQ{AtRo8*-UI< z^4DTE_~;Y#Dqju2sGxSZ4%KfN*ng^9k41>R1*mJ*QhfmS1t2v2GheDI7o*mt)&F`& z^&DbK$n&6`%O9r*T$?ZDW8#h%hCSKPZmI2oG6mbmcMA~8G%guas`2jO(yPl&mhtt* zWAPBN7?+t6WfL_NIAPuBFF%_G^t=Ny^ah<&xueoM+W>zZ9PyawC#iMdfx`IIDTy3_ z71Y$!kQ$xd)m5WUQdj@KcAQG=%d@h;>QEF6*Q^U9%NW=`SaeSaNW#{p0|UnsHb`?9 zzj`XEC&*_52^CtCm-Wm9fXs;*Qh7lYe}6B9bf=Q7#;PFN47MbV%Wf4~W#^<^@StGg zRAp~0ES(#-NRxLgB%l@sXFhCJaTfmDjO1ia`=CXIRryY=zIr5})^ufN#$x}GFz8Ps z<3yNRm>vFQE23NREx4y>K0fRh#Bu{pbp5&iT;XJQyH04;ua}saS5Ju^ftA2ww(*T; z#ng_MLYA>m#$X`>jNEPF;ubb>{uV1Xb#5H4MvkSS#Fh#DDQz|LEI(>_G|>xd>-c;f zntCbBJ4xIp;W*gV>&6%_UZTl;r{dZTs`K5L{wJNW#igD>FX)zl+-+OeFb*pCT)+D< zc4e+)eJz8USsNU4Z+Wp!t=5vhJkzag?^&~)G*w*gfM_UimlZabv96~npukeaQl?!i zu*1^f&!xx|VI^esavP4qz+4b~1s$^>}_L|d=@&mgI4Qqzs z^CKh;|0=XRPG4R$bqbsS!Egj0tBJ+J8 zBDAtjxw6husQd42bSJ6crTtoi7!nN>2jpBm9cLS?pmRRcS+K0+D(unLdgk*hl)KeV zXZQPe^Yd>T{k?L>O`(*nalfjslu|Amv0@Ib&fIaUPeged!X0fJelHO)O|@FJXjLn1`ix3LpD2@U zE4FY?;tK`vO+1V9L3HE{CGXC!%{qp8KpmrSgn2jusAO<=x>D$fm-rHBWfKZEaF`x2 z$K!#I*Kze*d<&0PN+xOGi9yg(e$~HBPZ5RFHr0&^U@k2v9}C&pMB%=&C0?b==E7(3 zymMVR_@`-!q}CffN?MG^W_tjJ|FX^Ps+E&a?G>5TH$)&}1D4`|! z-^FEqJZ#4Qp&fWRl0&{m_#%H_vOoQT*Pg>!DnelYlk03+k0}mEdMUMkM@mcVc)2KB|>1cxXlF8#N$xcT3hDgVw#E^}bs7-kqrNY>MR-h?;5#gPhc_wPN z{p77YN?%FlK9^0Ase!Jn=8r+jJ;L+|yfI4-Ym{6pJZUd$)@lMLm2$60TsmtUI#-TZ z_rvVIho5Pxo+$dfYun}$qUN`kwmhQUSD!F)q=uD8haXnun}guak_*a2t>|6f`@kZwzb&-FG>w)D;Pk`X-wfLEGZTO4qWnBL#*g;uDg*6 zQn9RU5j1TA3EncTUZl*Fgl>KQ)OG$(%RAH0cC$c(UV|P&(bcfrHYqAMHGrcwbf6Tn zQ;uJkf<`^9wm09dVpDXC!C1W)ZV2Ql-IYobUr@V~w@~4gCS%9FGGhRVv%^7y1R%S4 z+1U8lruwe2uer+8o3T(B6|VqGidA<*4v3wW_IJ#y&-r0iHHZ(cm%=V1sGc+KA^1IY zEM76)V4f?BIgZtvKiBo@Rod&X{b50cXmRlzz>fMo8X*up2{C|I?rZ@%mMr&!TRwo# z{@2GqDK_aMXjjVe_>L^|m#A%CV>EauLwb3^Qe)avEf{)ec=r@jE!N;|UikPs_xaBp zlxP|NYn_7lGy4mN2q&~2{T0;D-!(xxBX1S9?gkLdT- zdo`vE1-=K{SyDM^%hrb3O6vFpOf(wB8pG3;+66W#Ey5vancWkbMj*!#?~f1jC;Gt@ z7P5|K3g*xIUXo0hKw`-EnGVj|9hj$Mo{P#>J&&g@l(BE7kT>Ng=&=trqMDx^R!&3G z;X|MDz_+T`RMJw;e|~mN{y8jh^|2v^kR3Iif9`yOSULH5;|s^@>Yp>@k)I3qCizf2 zHP%;}{{#cQ2&ACcRN|@ZGkIrg;pyGibMg_4W7#DR9f}kwbV|&e^Ht-YBY!fuZD@;l zA;!W~Sb_k)gJdv^P3pZS$~P#Y^tN^{La;$@KP$TN0AHWODdVqg($2nAC$faX_?GIH znx*$mP3?VNM035|aIhCmli?^gGKCd4G&9!zRKwho{gB-8#%FW+UyuELN|Io_g%ax_ zxD+y&Ixd!HOCL+b#LFvTBfalAzw!-F;A#ec6_@6oTKV??{z(DNQiN#Llh=UQ)NK|M z=c1Yg*TzUK?N9UaPsY_(-cP->3G5iLQk%^2DOwO$=-*ZesM9KN21iV@VwowH=!?}B zFqDw#3Yp-gsYyR-?Y(mbM)c^QxU@W9zN+9cw)ZcC5>r5F-o#hif%zg>w!r!YeOzF0 zSBF}mf-5|!S+^p0=ri$wYZ@#XU5}!$O{50C(#L+37OiZm(1#%U{3DhP{t5aQv=0E{HHL5k)dq-kMW0 zqL_lc6=laA7^j2caC4QNsQv7_7yfh0OD_k1IgtB1e+r z1{Gu_FI3DN#{5HR69?!r!d}LYtk=@qJ!`4QMkqq!vC7mq>DmGpGr+TX=8`UWMDLuS?4^i)8+s$SG(#YQGz~ z;M0f<++$v=ye_SOU1j`pHn=v~(V8C@Ru%Q9avqNN2-gGEv{3aj0S{y?5(2_c8RB@e z4&ED}Q|Bn(U79I*pU5PwJ(iH2wo(RpuDI$LD41}AgKVfj#EkwvesO(J&%iUdAPN*u z^HlsIPaMd1n{+^tjUKOiwA!Fh+4XXc2@AxJDPRXaB4egh-y(#Z+(tO%s|?fks&QzV@ow&C@?#mTOA zh6zSE$nj--!wUsRO7G4bo!Sb>{Wk6mG=YxjLS(eeqode0qPxcK;jkv@q*-3|T<9Bq?L@6QHq zGgXH-H2}M~fFZt(J10wYP$PCxHYRG6%1-Q^PC`Ix=ukoK8+%Ab^GaqZT_rICQB!b9 zZgUo7aeDW>s>VaYuC3>C!K9RPJhDT5Y*u(U5aZ2YJ`Wj17AHPl6b(=P8_s#WqkqCb z^(d*)B{D4jk+^JxA4!rcd87N{QDCvhgaGlCfl{^H8(^pH5lY1koi0Xyx?) zja~A}fg_Wv=FRF5KSR;_T&gv`EN1S0{~EbAC=RUgCteVYEVP?`M*rbey8FGO`;SP& zsIsbNSo*|7K_r)moZ8O~OL4}v+fm0`{hDM z{z2m==9dRIpqeBzPim*L^RMRUv10Z6vtqPqTNeom;d_+xF3T&r6a^9O zQaCvH_!osXZXTfYPsUO;YHk0{o|3bgT=E^}){T|!NQ8gm`r&t`W&$3jEtz^jKcW^N7Fpn2OG2OQ=n*Adfne8jS*T=6!LjdT9Mz6z1 z{f`o+rpQ z*5W@^f(N&#i!p?3eOo?XmC1z(rT%&XQo6wMshvurf(e#JsOTDRX~Cq*Y)di1jy{HF z(#(4)aBNg}CP_Ab#+*EeyNd8S>{6-v4oq4Eo7y^5YF=+x8s+yM+ zmmV&v{Ghe%_Y8`OuK}J`b!18sM~RG9w@yd}&Koc{t3d%KjW+?3!A3#dazwk|K17{x z!u)zrK;*a`e-+uU;%ce*>QQuoq?6}xdIx*pUm|J5y}>U&gvl5Dg|zRcS-FPs6Kq{r za~eF{_+oc}gRSAuI(0`fRZ4WE>^qf@?7j}^)SBb=*dhLUxa!aJIxt(FYulW+;Zihy z^P=&+HePgIhi>{T()FDlG@jkJ;_5s7 z=wp0fgLa-SXSn>FOD>&qT!C>dy7y!`@-J}_2p@Tj_A~>=>$P5>`uLD7R7dB&iDnLQ z>m`&~Eu^rA7&{RmS;E2BNJ|jgAaK2pN>kbq-jzf5^y9zE)UQU%k`}3PiL1-71Ywt30eAar7k$ht&WR}#eZ@tY3Z z5)m_FP&H!%6^Q8l0!Sn0DR3=)*Auv>wf^%LzWPSrFt1KrcJ)sUXDX)wc=72V*&$75 z+RCL?t=QBzD!0A{(1H<_^sb2C@Bpv*Fi0yMgw)9$0_$vM0i*E%Yhkg%jC?N>t7fY9IlqGQqKscN|@=L z-Yh!w;Lal3XK@EdGHEEc`SHr#=r8n*7Lm{AXkl_Yp4+0M=qPP)4Ohff51yoDph+9(J-qW1$ut32QoV=Gxj$?V2X)|4z-<=NM7fh9<*Yr%Vm4?Vc4YIen; zTJ_6lNE_7uMb}Z%kIM)x=Mr;zo=6um@sud5C-uRk!TKUuQtVV+s}6WWt{+0ABfk}c zUo)u(F>+SV?2BKjiZXvjE^0!6-iGfXI^oU8C(FDeIgyI&c&6_G6xx-EJ>7mPwq z*`-DpsdZ~8lMH;ZAW2au4}gp~GVFp}syD-oBi(Yu!E{8r;Z5+~me3iKa?W7E;PcV; z8<1jjqH2kx_tIQ{}_6dDsXlqynGFtS$ie=C<3-k&zHqmMgsYI zq+dKd-SR!~wr#X!4&J82hGU*gB(+b58B`>*cC|iS3Yn~j;3mKRTHT{8bVi@Y2wgX& z80I~gx~hWNsCeN{E0ffm`iGu;N&1d<;*5=inAJFk9&8H+=;lSRbKHXg54u#kTi^C7 zh5q&v5vzSCQDo3%A?j85z)C3hDnNy6gyG}J$e%g? z;TZ5F#f@s`kC?o9xZVc=RTCLO+WPU4H3zDhCf-zE9&YvVf<4{_Y-Ju}dvC{Q^&bLU z9kCZ=8-vlLodSOECJNpr(W`CSb7~(CY*9gnDx0uH@A^hhsy=y@rPzP(iC&;hiCBMb z;e+QGA#Bx*(UwpJ!_%4A4PHyq=@lAgXCN>?m zP;i1p!sEvKEO{3IlQugMFQm2qI(fn;TzC0&zk1KrQaL)W!4dT6K7KT=1mSF1Z)nRHArT!U895|U{qvxlCb2;Z9G++bdHsEF4jQ>GjqcC zJN$fdXJ{CPw1Wbz@)}$z7~XI{9<2PH64*%?0@QPz$z=v9$DmZ`RM7$DxQEdyTi0~I zAN3qbzs``LBkcLnpCuNjFUdOI?H{@y>CPQuws08s$$Lx2z0XFOXWnMqfd;98FwfVx zyV1uh<7bs&(dB_hA+3wFZCf8)H{;*xX6Qr;SmkShN-eS;(1~LTpLJYReCpfSpeL$n z^56iI#&u4o{y?r@i$OIbUeHeT^-c<~H=nChKHRS-Pm>Y-C{DRdA2mN7Lh#s3ssSs;s4ix`-pB z=LPnUi)d4~O=2=!yURYDs#Cho<|MO{jEf2f9sNGWbie4hf8LfYN#%bowVd>pPVdWZ&1-F>SA=)EeWok&bnY1Om+!P!*98yXm znWrOWCm_Q`A*scIa)x8${NZ4dt9RYp1DP(&*bJ!W%bBXhq#O+t!sTk;iikvys}%%1 zmb!f8zSOJx7RYr1W z>h+*~E8LQf+S@{VJ6`s~J@T_lHA@FJZ--^g8I@+vb`TBEO;)I_znTXB^h^~v|j1u7|#aAhY( zp{8$7S(X#KdXBzZXelT9MAR*j^>m_P;e{F2RXS3~kqR0xPjP_3t+huqKQSLWl|<@; z!_}LkW$VPR)F$b><0Us!HA?~8@9%u{`f_$=Bec8KJBX5iIa9^oZd}TH(8T zjT1QlYv4OOjY@fo2C^22mDhX%Op1Iwt%NH=JragzmQjfMqev@5f}KRBO;ixB-YYGD$A-{H*l?lIpbF<_WJ=9u*!D!9@IxhdSz_9hd4$2Yc6HC z$!yPTC?$2NU%GWs~UwBt1<}c9{7sksHxK3m()Q_lH#KQ=Pb( zjb@h?zWgYH&BSdOc}NELlI2$>I=)g?V_E-gb`LRksc9^YwL+{`EBLKqTxDQ`ix1ze zbs^oE;EuivH6dFQ2~j4nS?MH|Ur))D2JQy+@Vi*9j_pj0P4qMHdgU7Y9|bIriX+Ru zP|>}ORE6Z}J6ein8(%$MPZb`5Ms}^UjAW)3z=yadh#0f$M!1PqUKcvs#778_&!x#< z=Ouvew3PWrLV~bF;{hJy4p?aRQ;@de_*lzyK~ofLWUyPJYqxFOx+bVypL)b~=$R5! zK>oOSh&E?isv4~nEo)IO{S7VBtlUl^dnZE!ONu{&WzAf=#s^=kTm7(yZnVWrw-hN` zAddR^x*cN|`ubanFbr16DadVGg|+mRMVi>0JMJLd4$F}Lb-A;G;!qQ>rQQy1q+CY) zME z^(<|SHzxS??wrTc{#L$xr!1IC^LswZrK6tp{s1H(m%$kFl&Nc`1{49TD4#+u50odv zC(V5#!L-IBrnnIn;f2mgcTstSGs%uGutLb=$;{{|blqQfConT(3y~SPbl@E*^fE6u zN56SmqQK;Ko7j|K6z`DeovSDwl*K*{T5{4jpm8FZ%Z{p!U}c@vLim}3ZZKM1b7fbvV&vJ59hUK0Z*?R; hWyimddO literal 0 HcmV?d00001 diff --git a/terraform/README.md b/terraform/README.md index 528e85c..209ee71 100644 --- a/terraform/README.md +++ b/terraform/README.md @@ -49,7 +49,7 @@ This instructions are based on the following documentation 1. Navigate with the File Explorer to the installation directory of Terraform. 1. In the File Explorer location path type `PowerShell` and press enter. - ![alt text](../images/terraform-powershell.jpg "") + ![alt text](../images/terraform-powershell.png "") 1. A new PowerShell prompt will open with the Terraform directory as his current location path From 17ec413e2904a17dc51bc328e199a4256eb2ee2d Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Sun, 2 Feb 2020 12:10:38 +0100 Subject: [PATCH 145/168] Modified Lab1 to integrate K8s and Terraform --- azure-devops-project/README.md | 219 +++++++++++++++++++++++-- images/pipelines-delete-arm-copy.PNG | Bin 0 -> 36139 bytes images/pipelines-terraform-install.PNG | Bin 0 -> 12468 bytes 3 files changed, 205 insertions(+), 14 deletions(-) create mode 100644 images/pipelines-delete-arm-copy.PNG create mode 100644 images/pipelines-terraform-install.PNG diff --git a/azure-devops-project/README.md b/azure-devops-project/README.md index 69fb69a..273d141 100644 --- a/azure-devops-project/README.md +++ b/azure-devops-project/README.md @@ -12,28 +12,216 @@ Based on the following tutorials: ## Tasks -### Setting up the code repository on your development machine +### Setting up the code repository on your development machine and Create Azure Storage Account. 1. Go to your Azure Portal and create a new DevOps Project. Make sure it meets the following demands: - .NET Runtime - ASP.NET Core application - - Linux Web App + - Kubernetes Service - Linked to your existing Azure DevOps account -1. When the azure resources are created, go to your Azure DevOps account and make sure that: - - The first Build and Release are successful - - The App is deployed and accessable through the web app url (*.azurewebsites.net) +1. When the Azure resources are created, clone your code repository to your development environment using: + - Open file explorer and go to a folder where you want to store the project files. In the address bar type PowerShell and press enter. A new PowerShell window will open with his location inside the folder of your choice. + - Run the next PowerShell command to clone the repository locally: + `git clone ` + +1. Create an Azure Storage account which will be used to store the Terraform state. + - In your browser, go to your Azure Portal and create a new Storage Account. Make sure it meets the following demands: + - Resource group: `` + - Storage account name: `devopsholstorage` + - Location: (Europe) West Europe + - Leave everything else by default settings + +1. Create an Azure Container in the just created Azure Storage Account meeting the following demands: + - Name: `terraform-state` + - Public access level: `Private (no anonymous acces)` + +### Add Terraform templates to your repository +1. In the root folder of your repository, create a new folder called `TerraformTemplates`. Because you can't add an empty folder to git, you also need to create a new file. Name this file `main.tf`. + - Make sure that the file `main.tf` contains the following content: + ``` + provider "azurerm" { + version = "~>1.5" + } + + terraform { + backend "azurerm" {} + } + ``` + - Create a new file `k8s.tf` and add the following content: + ``` + resource "azurerm_resource_group" "k8s" { + name = var.resource_group_name + location = var.location + } + + resource "random_id" "log_analytics_workspace_name_suffix" { + byte_length = 8 + } + + resource "azurerm_log_analytics_workspace" "test" { + # The WorkSpace name has to be unique across the whole of azure, not just the current subscription/tenant. + name = "${var.log_analytics_workspace_name}-${random_id.log_analytics_workspace_name_suffix.dec}" + location = var.log_analytics_workspace_location + resource_group_name = azurerm_resource_group.k8s.name + sku = var.log_analytics_workspace_sku + } + + resource "azurerm_log_analytics_solution" "test" { + solution_name = "ContainerInsights" + location = azurerm_log_analytics_workspace.test.location + resource_group_name = azurerm_resource_group.k8s.name + workspace_resource_id = azurerm_log_analytics_workspace.test.id + workspace_name = azurerm_log_analytics_workspace.test.name + + plan { + publisher = "Microsoft" + product = "OMSGallery/ContainerInsights" + } + } + + resource "azurerm_kubernetes_cluster" "k8s" { + name = var.cluster_name + location = azurerm_resource_group.k8s.location + resource_group_name = azurerm_resource_group.k8s.name + dns_prefix = var.dns_prefix + + linux_profile { + admin_username = "ubuntu" + + ssh_key { + key_data = file(var.ssh_public_key) + } + } + + default_node_pool { + name = "agentpool" + node_count = var.agent_count + vm_size = "Standard_DS1_v2" + } + + service_principal { + client_id = var.client_id + client_secret = var.client_secret + } + + addon_profile { + oms_agent { + enabled = true + log_analytics_workspace_id = azurerm_log_analytics_workspace.test.id + } + } + + tags = { + Environment = "Development" + } + } + ``` + - Create a new file `variables.tf` and add the following content: + ``` + variable "client_id" {} + variable "client_secret" {} + + variable "agent_count" { + default = 3 + } + + variable "ssh_public_key" { + default = "~/.ssh/id_rsa.pub" + } + + variable "dns_prefix" { + default = "devopsholk8s" + } + + variable cluster_name { + default = "devopsholk8s" + } + + variable resource_group_name { + default = "testautomatedcreatedappk8s-rg" + } + + variable location { + default = "West Europe" + } + + variable log_analytics_workspace_name { + default = "testLogAnalyticsWorkspaceName" + } + + variable log_analytics_workspace_location { + default = "westeurope" + } + + variable log_analytics_workspace_sku { + default = "PerGB2018" + } + ``` + **!Be aware!** Change the value of the variable `resource_group_name` to the name of your Resource Group. + + - Create a new file `output.tf` and add the following content: + ``` + output "client_key" { + value = azurerm_kubernetes_cluster.k8s.kube_config.0.client_key + } + + output "client_certificate" { + value = azurerm_kubernetes_cluster.k8s.kube_config.0.client_certificate + } + + output "cluster_ca_certificate" { + value = azurerm_kubernetes_cluster.k8s.kube_config.0.cluster_ca_certificate + } + + output "cluster_username" { + value = azurerm_kubernetes_cluster.k8s.kube_config.0.username + } + + output "cluster_password" { + value = azurerm_kubernetes_cluster.k8s.kube_config.0.password + } + + output "kube_config" { + value = azurerm_kubernetes_cluster.k8s.kube_config_raw + } + + output "host" { + value = azurerm_kubernetes_cluster.k8s.kube_config.0.host + } + ``` + + - Save all changes, commit and push them to your repository. -1. Clone your code repository to your development environment using: - - `git clone ` ### Set up the Pipeline as Code 1. In the root folder of your repository, create a new file called `azure-pipelines.yaml` -1. In your browser, go to Azure DevOps Pipelines and Edit the existing pipeline: - - Unlink the parameters: - ![](../images/pipelines-unlink.png) +1. In your browser, go to Azure DevOps Pipelines, Open the Build pipelines and Edit the existing build pipeline: + - Remove the copy ARM templates step, because we are going to work with Terraform: + ![](../images/pipelines-delete-arm-copy.png) + + - Add Terraform Init step by clicking on the **+** sign you see behind Agent job 1. Here you can search for Terraform. + - Terraform is by default not installed in your DevOps project. So you should click on Add Terraform, you will be redirected to the Market Place. Follow the steps to install Terraform and when you are finished you can close the window. + + - After installing Terraform, you should see the following search results: + ![](../images/pipelines-terraform-install.png) + + - Add a Terraform step between `helm package` and `Publish Artifacts: drop` with the following configuration: + - Name: `Terraform: init` + - Command: `init` + - Configuration directory: `TerraformTemplates` + - Azure subscription: `` + - Resource group: `` + - Storage account: `devopsholstorage` + - Container: `terraform-state` + - Key: ` Settings --> Access keys>` + + - Add a Terraform step after the previous created Terraform step with the following configuration: + - Name: `Terraform: validate` + - Command: `validate` + - Configuration directory: `TerraformTemplates` - Go to Triggers and disable continuous integration: ![](../images/pipelines-disable-ci.png) @@ -59,10 +247,13 @@ Based on the following tutorials: - Existing Azure Pipelines YAML file - Choose the YAML file from your repository -1. Add a new Variable: - - Name: BuildConfiguration - - Value: release - +1. Add a new variable BuildConfiguration + - By adding the following yaml code on top: + ``` + variables: + configuration: release + ``` + 1. Click Run to finalize the setup and wait for the build to complete ## Next steps diff --git a/images/pipelines-delete-arm-copy.PNG b/images/pipelines-delete-arm-copy.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4494892427209047abb4f20a8a213b9b96278b70 GIT binary patch literal 36139 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 eM}Jo7(O)@upL~OWs7vgCbEln7m7KWo*Z% Date: Mon, 3 Feb 2020 18:12:43 +0100 Subject: [PATCH 146/168] Modified lab1 and lab2 --- azure-devops-project/README.md | 24 +++++++++------ k8s-terraform-deployment/README.md | 49 ++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 9 deletions(-) create mode 100644 k8s-terraform-deployment/README.md diff --git a/azure-devops-project/README.md b/azure-devops-project/README.md index 273d141..c3fd963 100644 --- a/azure-devops-project/README.md +++ b/azure-devops-project/README.md @@ -87,10 +87,10 @@ Based on the following tutorials: dns_prefix = var.dns_prefix linux_profile { - admin_username = "ubuntu" + admin_username = "azureuser" ssh_key { - key_data = file(var.ssh_public_key) + key_data = var.ssh_public_key } } @@ -123,7 +123,7 @@ Based on the following tutorials: variable "client_secret" {} variable "agent_count" { - default = 3 + default = 1 } variable "ssh_public_key" { @@ -139,7 +139,7 @@ Based on the following tutorials: } variable resource_group_name { - default = "testautomatedcreatedappk8s-rg" + default = "devopsholk8s-rg" } variable location { @@ -199,10 +199,7 @@ Based on the following tutorials: 1. In the root folder of your repository, create a new file called `azure-pipelines.yaml` 1. In your browser, go to Azure DevOps Pipelines, Open the Build pipelines and Edit the existing build pipeline: - - Remove the copy ARM templates step, because we are going to work with Terraform: - ![](../images/pipelines-delete-arm-copy.png) - - - Add Terraform Init step by clicking on the **+** sign you see behind Agent job 1. Here you can search for Terraform. + - Add Terraform Init step by clicking on the **+** sign you see behind Agent job 1. Here you can search for Terraform. - Terraform is by default not installed in your DevOps project. So you should click on Add Terraform, you will be redirected to the Market Place. Follow the steps to install Terraform and when you are finished you can close the window. - After installing Terraform, you should see the following search results: @@ -223,6 +220,12 @@ Based on the following tutorials: - Command: `validate` - Configuration directory: `TerraformTemplates` + - Modify the copy ARM templates step, because we are going to work with Terraform. Make the properties has the followings values: + - Display name: `Copy Terraform templates` + - Source Folder: `TerraformTemplates` + - Contents: `*.tf` + - Target Folder: `$(Build.ArtifactStagingDirectory)/TerraformTemplates` + - Go to Triggers and disable continuous integration: ![](../images/pipelines-disable-ci.png) @@ -257,4 +260,7 @@ Based on the following tutorials: 1. Click Run to finalize the setup and wait for the build to complete ## Next steps -Return to [the lab index](../README.md) and continue with the next lab. \ No newline at end of file +Return to [the lab index](../README.md) and continue with the next lab. + +##TODO: +- secrets uit de variables halen en als variabelen in pipeline \ No newline at end of file diff --git a/k8s-terraform-deployment/README.md b/k8s-terraform-deployment/README.md new file mode 100644 index 0000000..9e501f3 --- /dev/null +++ b/k8s-terraform-deployment/README.md @@ -0,0 +1,49 @@ +# Avanade DevOps HOL - Define your continuous deployment process with Kubernetes and Terraform +In this lab, we modify the automated generated CD pipeline so it will work with Kubernetes and Terraform. + +## Prerequisites +- Complete lab [Continuous Integration with Azure DevOps](../azure-devops-project/README.md). + +## Tasks + +### Replace ARM templates with Terraform +The automated generated CD pipeline uses ARM templates for setting up the environment. You should probably see some releases that are failed. This happened because the CD pipeline was automatically triggered after every successfull build. The published build artifacts doesn't contain any ARM templates, which are needed in the current version of the CD pipeline. We will remove the old ARM deployment step and replace it with Terraform deployment steps. + +1. Edit the current CD pipeline and open the stage dev. + +1. Remove `Azure Deployment: Create AKS cluster` this is the ARM deployment step. + +1. Add a new Copy Files step after step 1 `Azure CLI: Preserve Cluster Tags`. Make sure it configured as: + - Display name: `Copy Terraform templates` + - Source Folder: `$(System.DefaultWorkingDirectory)/Drop/drop/TerraformTemplates` + - Contents: `*.tf` + - Target Folder: `$(System.DefaultWorkingDirectory)/Terraform` + +1. After the just created copy step, create a new Terraform step with the following settings: + - Display name: `Terraform: init` + - Command: `init` + - Configuration directory: `$(System.DefaultWorkingDirectory)/Terraform` + - Azure subscription: `` + - Resource group: `` + - Storage account: `devopsholstorage` + - Container: `terraform-state` + - Key: ` Settings --> Access keys>` + +1. After the just created Terraform step add a new Terraform step with the following configuration: + - Display name: `Terraform: validate and apply` + - Command: `validate and apply` + - Configuration directory: `$(System.DefaultWorkingDirectory)/Terraform` + - Azure subscription: `` + +1. Now the CD pipeline is adjusted to use Terraform. Save your changes and create a new release. + +### Wat moet er nog bij +- Test application, reach out naar het + + +az aks get-credentials -n cl0020 -g rg0020 +az aks install-cli +kubectl get services --all-namespaces + + +- Stretch: Blue/Green - namespaces From 55972ee370aa0f76fedbe817734d473fb3c8ddd7 Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Wed, 5 Feb 2020 13:23:25 +0100 Subject: [PATCH 147/168] Course lab changed first version uitesting --- README.md | 15 ++++---- ui-testing/README.md | 85 +++++++++++++++++--------------------------- 2 files changed, 40 insertions(+), 60 deletions(-) diff --git a/README.md b/README.md index 32d8b01..34fc316 100644 --- a/README.md +++ b/README.md @@ -9,11 +9,10 @@ The course contains the following labs: | Lab | Effort | | :-------- |:--------------------------:| | [Prerequisites - Set up development environment](azure-rm/README.md) | 30 min | -| [Lab 1 - Continuous Integration with Azure DevOps](azure-devops-project/README.md) | 60 min | -| [Lab 2 - Multi-stage deployments with Azure DevOps](multi-stage-deployments/README.md) | 45 min | -| [Lab 3 - UI Testing with Selenium and Azure DevOps](ui-testing/README.md) | 90 min | -| [Lab 4 - Static code analysis with SonarQube](sonarqube/README.md) | 45 min | -| [Lab 5 - Feature Toggles](feature-flag/README.md) | 45 min | -| [Lab 6 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 min | -| [Lab 7 - *(Optional)* - Security Verification Tests in your CD pipeline](security-testing/README.md) | 45 min | -| [Lab 8 - *(Optional)* - Feature branching and branch protection](feature-branching/README.md) | 45 min | +| [Lab 1 - Pipelines as code with K8s and Terraform](https://dev.azure.com/thx1139/_git/workshop1?path=%2FREADME.md) | 30 min | +| [Lab 2 - UI Testing with Selenium and Azure DevOps](ui-testing/README.md) | 45 min | +| [Lab 3 - Static code analysis with SonarQube](sonarqube/README.md) | 45 min | +| [Lab 4 - Feature Toggles](feature-flag/README.md) | 45 min | +| [Lab 5 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 min | +| [Lab 6 - Working with Secure DevOps Kit for Azure](security-testing/README.md) | 45 min | +| [Lab 7 - *(Optional)* - Feature branching and branch protection](feature-branching/README.md) | 45 min | diff --git a/ui-testing/README.md b/ui-testing/README.md index 5c14df3..d824598 100644 --- a/ui-testing/README.md +++ b/ui-testing/README.md @@ -12,10 +12,26 @@ The instructions are based on the following documentation: - Complete lab: [Multi-stage deployments with Azure DevOps](../multi-stage-deployments/README.md) ## Configure local UI Testing +1. Open the mywebapp.csproj (TRAIN/workshop1/app/mywebapp) in Visual Studio. -1. In the **FunctionalTests** project, remove the sample test (SampleFunctionalTests.cs) if it exists +1. Add a new project to the solution with the following settings: + - **Project Type:** xUnit Test Project (.NET Core) Visual C# + - **Name:** FunctionalTests + +1. Close the solution in Visual Studio and open the mywebapp folder (./TRAIN/azdotraining1/app/mywebapp) in file explorer. Move the **mywebapp.sln** towards the app folder (./TRAIN/azdotraining1/app). + +1. Edit the **mywebapp.sln** with Notepad or VS Code: + - Change `"mywebapp.csproj"` to `".\mywebapp\mywebapp.csproj"` + - Change `""..\FunctionalTests\FunctionalTests.csproj` to `".\FunctionalTests\FunctionalTests.csproj"` + - Save and close the **mywebapp.sln** file. + +1. Reopen the **mywebapp.sln** in Visual Studio. + +1. In the **FunctionalTests** project, remove the sample test (UnitTest1.cs) if it exists 1. On the **FunctionalTests** project, add the following NuGet packages: + - MSTest.TestFramework + - MSTest.TestAdapter - Selenium.Support - Selenium.WebDriver - Selenium.WebDriver.ChromeDriver @@ -27,7 +43,7 @@ The instructions are based on the following documentation: ``` -1. In the **FunctionalTests** project, (modify or) create a .runsettings file containing the siteUrl as parameter. Find the local website port in the website project *(aspnet-core-dotnet-core\Properties\launchSettings.json)* and create: +1. In the **FunctionalTests** project, (modify or) create a .runsettings file containing the siteUrl as parameter. Find the local website port in the website project *(mywebapp\Properties\launchSettings.json)* and create:
functionalTests.runsettings (expand to view code) @@ -44,13 +60,13 @@ The instructions are based on the following documentation: 1. Configure Visual Studio to use the .runsettings file using:\ [Configure unit tests by using a .runsettings file](https://docs.microsoft.com/visualstudio/test/configure-unit-tests-by-using-a-dot-runsettings-file) -1. In the **FunctionalTests** project, add functional test classes for all pages.\ +1. In the **FunctionalTests** project, add functional test classes for all pages. Add a folder 'PageObjects' and add the following classes to it.
BasePage.cs (expand to view code) ```csharp using OpenQA.Selenium; - + abstract class BasePage { protected readonly IWebDriver Driver; @@ -69,18 +85,11 @@ Add a folder 'PageObjects' and add the following classes to it. return new HomePage(Driver, BaseUrl); } - public AboutPage GoToAboutPage() + public PrivacyPage GoToPrivacyPage() { - var about = Driver.FindElement(By.LinkText("About")); + var about = Driver.FindElement(By.LinkText("Privacy")); about.Click(); - return new AboutPage(Driver, BaseUrl); - } - - public ContactPage GoToContactPage() - { - var contact = Driver.FindElement(By.LinkText("Contact")); - contact.Click(); - return new ContactPage(Driver, BaseUrl); + return new PrivacyPage(Driver, BaseUrl); } } ``` @@ -107,48 +116,22 @@ Add a folder 'PageObjects' and add the following classes to it. ```
-
AboutPage.cs (expand to view code) +
PrivacyPage.cs (expand to view code) ```csharp using OpenQA.Selenium; - using OpenQA.Selenium.Support.PageObjects; - class AboutPage : BasePage + class PrivacyPage : BasePage { - public AboutPage(IWebDriver driver, string baseUrl) : base(driver, baseUrl) + public PrivacyPage(IWebDriver driver, string baseUrl) : base(driver, baseUrl) { } - [FindsBy(How = How.ClassName, Using = "fusion-main-menu-icon")] - private IWebElement searchIcon; - public void GoToPage() { - Driver.Navigate().GoToUrl($"{BaseUrl}/Home/About"); - } - } - ``` -
- -
ContactPage.cs (expand to view code) - - ```csharp - using OpenQA.Selenium; - using OpenQA.Selenium.Support.PageObjects; - - class ContactPage : BasePage - { - public ContactPage(IWebDriver driver, string baseUrl) : base(driver, baseUrl) - { + Driver.Navigate().GoToUrl($"{BaseUrl}/Privacy"); } - [FindsBy(How = How.ClassName, Using = "fusion-main-menu-icon")] - private IWebElement searchIcon; - - public void GoToPage() - { - Driver.Navigate().GoToUrl($"{BaseUrl}/Home/Contact"); - } } ```
@@ -156,7 +139,7 @@ Add a folder 'PageObjects' and add the following classes to it. 1. In the **FunctionalTests** project, create the following test class for the functional UI tests:
UITests.cs (expand to view code) - ```csharp + ```csharp using Microsoft.VisualStudio.TestTools.UnitTesting; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; @@ -208,13 +191,11 @@ Add a folder 'PageObjects' and add the following classes to it. var page = new HomePage(_driver, _siteUrl); page.GoToPage(); SaveAsImage(_driver.GetScreenshot(), "Home.png"); - page.GoToContactPage(); - SaveAsImage(_driver.GetScreenshot(), "Contact.png"); - page.GoToAboutPage(); - SaveAsImage(_driver.GetScreenshot(), "About.png"); - var containerDiv = _driver.FindElement(By.ClassName("body-content")); - var header = containerDiv.FindElement(By.TagName("h3")); - Assert.AreEqual("Your application description page.", header.Text); + page.GoToPrivacyPage(); + SaveAsImage(_driver.GetScreenshot(), "Privacy.png"); + var containerDiv = _driver.FindElement(By.ClassName("pb-3")); + var header = containerDiv.FindElement(By.TagName("h1")); + Assert.AreEqual("Privacy Policy", header.Text); } catch (NoSuchElementException) { From 24df3da23555ebe97eae5b15a3392579e45c3dd5 Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Wed, 5 Feb 2020 13:28:47 +0100 Subject: [PATCH 148/168] Removed based-on-text --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 34fc316..8dcbd0b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,4 @@ # Avanade DevOps Hands-On Labs -These are the hands-on labs associated with the Avanade DevOps Practitioners course. This is based to a large part on the [PartsUnlimitedHOL](https://github.com/Microsoft/PartsUnlimitedE2E/blob/master/PartsUnlimited-aspnet45/docs/GettingStarted.md) but simplified to use the Visual Studio MVC sample application. It does not use the PartsUnlimited HOL, but we want to acknowledge that project's contribution to this project. - The labs can be completed using an Azure Virtual Machine as development environment. This not only keeps you from having to make changes to your local environment, but it gives you additional experience using Azure and PowerShell. The [Prerequisites](azure-rm/README.md) instructions help you to set up this environment. ## Course Labs From dd2dcff3561b68e6663bbbbb8e8135422648320c Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Wed, 5 Feb 2020 22:02:06 +0100 Subject: [PATCH 149/168] Made Azure Pipelines Selenium YML proof --- ui-testing/README.md | 116 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 95 insertions(+), 21 deletions(-) diff --git a/ui-testing/README.md b/ui-testing/README.md index d824598..0372eb6 100644 --- a/ui-testing/README.md +++ b/ui-testing/README.md @@ -36,12 +36,20 @@ The instructions are based on the following documentation: - Selenium.WebDriver - Selenium.WebDriver.ChromeDriver -1. Ensure the Selenium Chrome driver executable is copied to the output during publish. On the **FunctionalTests** project, edit the project file and add the following: - ```xml - - true - - ``` +1. Ensure the Selenium Chrome driver executable is copied to the output during publish. Also make sure that the testproject is using .NET Core 2.2. On the **FunctionalTests** project, edit the project file + - Add the following PropertyGroup: + ```xml + + true + + ``` + - Verify that the project is using .NET Core 2.2 + ```xml + + netcoreapp2.2 + + ``` + 1. In the **FunctionalTests** project, (modify or) create a .runsettings file containing the siteUrl as parameter. Find the local website port in the website project *(mywebapp\Properties\launchSettings.json)* and create: @@ -227,26 +235,92 @@ Add a folder 'PageObjects' and add the following classes to it. 1. Run the UI tests you just created and make sure that it succeeds. -## Configure automated UI Testing (on the staging environment) +## Configure automated UI Testing +1. Open the app-pipeline.yml to edit your app pipeline. -1. The UI Test tasks are Windows based, which requires a Windows agent.\ -In the **Azure DevOps** project, in the **Build** and in **both** of the **Release** environment stages, change the agent jobs to run on the agent **'Hosted Windows 2019 with VS2019'** +1. First the build of the Selenium project needs to be added to the **Build** stage by adding the following code above the job **Build_containers** + ``` + - job: Build_functional_tests + pool: + vmImage: 'windows-latest' + steps: + - task: UseDotNet@2 + displayName: 'Use .NET Core sdk 2.2.301' + inputs: + packageType: 'sdk' + version: '2.2.301' + - task: DotNetCoreCLI@2 + displayName: 'Restore' + inputs: + command: 'restore' + projects: '**/FunctionalTests.csproj' + feedsToUse: 'select' + - task: DotNetCoreCLI@2 + displayName: 'Publish' + inputs: + command: publish + publishWebProjects: false + projects: '**/FunctionalTests.csproj' + arguments: '--configuration Release -o $(build.artifactstagingdirectory)/SeleniumTests' + zipAfterPublish: false + modifyOutputPath: false + - task: PublishPipelineArtifact@1 + displayName: 'Publish Pipeline Artifact' + inputs: + targetPath: '$(Build.ArtifactStagingDirectory)' + artifact: 'functionaltests' + publishLocation: 'pipeline' + ``` -1. In the Azure DevOps **Release**, configure a variable for the website url on the staging environment. -Edit the release, go to Variables, and add the variable: - - *Name:* SiteUrl - - *Value:* [https://\.azurewebsites.net] - - *Scope:* QA stage name +1. The automated Selenium tests will run against the public ip address of our deployed Pods. To assign the right IP address to the pipeline we will use variables. Add the next two variables: + 1. **Name:** testip **Value:** the public ip address of your test environment + 1. **Name:** prodip **Value:** the public ip address of your production environment -1. In the Azure DevOps **Release**, include a task to run the functional UI tests.\ -Add a task of type Test - **Visual Studio Test**, and ensure it includes: - - *Test files:* **\\*FunctionalTest\*.dll - - *Settings file:* ../drop/../functionalTests.runsettings - - *Override test run parameters:* -siteUrl $(SiteUrl) +1. The next step is to add the automated Selenium tests to the Test deployment pipeline by adding the following code in stage **Release_Test** below the block **- deployment: Deploy_containers**: + ``` + - deployment: Run_functional_tests + dependsOn: "Deploy_containers" + environment: test + pool: + vmImage: 'windows-latest' + strategy: + runOnce: + deploy: + steps: + - task: VSTest@2 + inputs: + testSelector: 'testAssemblies' + testAssemblyVer2: | + **\*FunctionalTests.dll + !**\*TestAdapter.dll + !**\obj\** + searchFolder: '$(Pipeline.Workspace)/functionaltests/SeleniumTests' + overrideTestrunParameters: '-siteUrl "$(testip)"' + ``` -1. Commit your code to trigger a **Build**, followed by a **Release** +1. The last step is to add the automated Selenium tests to the Production deployment pipeline by adding the following code in stage **Release_Prod** below the block **- deployment: Deploy_containers**: + ``` + - deployment: Run_functional_tests + dependsOn: "Deploy_containers" + environment: prod + pool: + vmImage: 'windows-latest' + strategy: + runOnce: + deploy: + steps: + - task: VSTest@2 + inputs: + testSelector: 'testAssemblies' + testAssemblyVer2: | + **\*FunctionalTests.dll + !**\*TestAdapter.dll + !**\obj\** + searchFolder: '$(Pipeline.Workspace)/functionaltests/SeleniumTests' + overrideTestrunParameters: '-siteUrl "$(prodip)"' + ``` -1. Upon **Release** completion, review the Test results +1. Save your pipeline and run it. The Selenium will be automatically executed on the Test and Production environment. After the pipeline is completed you can find the test results in the tab **Tests**. ## Stretch goals From 48bba1134ca2e74ec39190490360021407c89a09 Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Wed, 5 Feb 2020 22:05:33 +0100 Subject: [PATCH 150/168] Changed prerequisites UI testing lab --- ui-testing/README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ui-testing/README.md b/ui-testing/README.md index 0372eb6..47ea7f1 100644 --- a/ui-testing/README.md +++ b/ui-testing/README.md @@ -1,6 +1,6 @@ # UI Testing with Selenium and Azure DevOps -This lab contains instructions to create automated functional UI tests.\ +This lab contains instructions to create automated functional UI tests. The instructions are based on the following documentation: - [UI test with Selenium](https://docs.microsoft.com/azure/devops/pipelines/test/continuous-test-selenium) @@ -8,8 +8,7 @@ The instructions are based on the following documentation: ## Prerequisites -- Complete lab: [Continuous Integration with Azure DevOps](../azure-devops-project/README.md) -- Complete lab: [Multi-stage deployments with Azure DevOps](../multi-stage-deployments/README.md) +- Complete lab: [Pipeline as code with K8s and Terraform](https://dev.azure.com/thx1139/_git/workshop1?path=%2FREADME.md)) ## Configure local UI Testing 1. Open the mywebapp.csproj (TRAIN/workshop1/app/mywebapp) in Visual Studio. From 30953000c0a39420ae434a5703879618d45b2dc2 Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Thu, 6 Feb 2020 20:46:40 +0100 Subject: [PATCH 151/168] Changed content for SonarQube lab --- sonarqube/README.md | 83 ++++++++++++++++++++++++++++---------------- ui-testing/README.md | 2 +- 2 files changed, 54 insertions(+), 31 deletions(-) diff --git a/sonarqube/README.md b/sonarqube/README.md index 9c25bdf..55f55c5 100644 --- a/sonarqube/README.md +++ b/sonarqube/README.md @@ -7,23 +7,26 @@ The instructions are based on the following documentation: ## Prerequisites -- Complete lab: [Continuous Integration with Azure DevOps](../azure-devops-project/README.md) -- Complete lab: [Multi-stage deployments with Azure DevOps](../multi-stage-deployments/README.md) +- Complete lab: [Pipeline as code with K8s and Terraform](https://dev.azure.com/thx1139/_git/workshop1?path=%2FREADME.md) ## Create a SonarQube instance and project -1. Using the [Azure Portal](https://portal.azure.com), create a SonarQube container instance. Follow instructions from\ +1. Using the [Azure Portal](https://portal.azure.com), create a SonarQube container instance. Follow instructions from [Quickstart: Deploy a container instance in Azure using the Azure portal](https://docs.microsoft.com/azure/container-instances/container-instances-quickstart-portal)\ Ensure the following settings: - - *Container name:* sonarqube-aci - - *Container image:* sonarqube - *Resource group:* sonarqube-rg (new) - - *DNS name label:* sonar\ - - *Port:* 9000 + - *Container name:* sonarqube-aci + - *Region:* (Europe) West Europe + - *Image type:* Public + - *Image name:* sonarqube + - *OS type:* Linux + - *Size:* 2vcpus, 4 GiB memory, 0 gpus + - *DNS name label:* sonar- + - *Port:* 9000 TCP 1. When provisioning is complete, create a project in SonarQube: - **Visit** the **SonarQube** instance at\ -*http:\//sonar\.\.azurecontainer.io:9000* +*http:\//sonar-\\.westeurope.azurecontainer.io:9000* - Login using the default credentials (admin/admin) - Under Projects, select **Create new project**. Ensure the following settings: - *Project key:* devopshol @@ -31,30 +34,50 @@ Ensure the following settings: - On the resulting project page, select **Generate** to generate a project token.\ *NOTE: store the token somewhere, it is needed in the next steps to configure the Release* -## Configure SonarQube analysis on the CI Build - -1. Add the SonarQube analysis tasks to the **Build**: - - Edit the CI **Build** - - Add the following SonarQube tasks **before** the Build task: - - Prepare analysis on SonarQube. Ensure the following settings: - - SonarQube Server Endpoint: *(new)* - - *Connection name:* 'sonarqube \' - - *Server Url:* \ - - *Token*: \ - - Project Key: \ - - Project Name: \ - - Add the following SonarQube tasks **after** the Build task: - - Run Code Analysis - - Publish Quality Gate Result - - Save the build, do not queue it - -1. Add a project guid to the **Website** project.\ +## Configure SonarQube analysis on the Build stage + +1. Install the SonarQube extension, go to the [Marketplace](https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarqube) and press on **Get it free**. Make sure you select the right Azure DevOps organization, the one you are using for this training. + +1. Add SonarQube service connection to your Azure DevOps pipelines + - Go to Project Settings --> Service Connections + - Add a new service connection with the following demands: + * Server url: http://sonar-.westeurope.azurecontainer.io:9000 + * Token: The just generated token from SonarQube + * Service connection name: sonarqubeconn1 + +1. In the App pipeline add the following steps in the stage Build: + 1. Prepare Analysis Configuration (SonarQube) + * Integrate with MSBuild + * Project key: devopshol + * Project name: devopshol + * Project version: 1.0 + + 1. Use .NET Core + * PackageType: sdk + * Version: 3.x + + 1. .NET Core + * Command: build + * Version: 2.x + + 1. Use .NET Core + * PackageType: sdk + * Version: 2.x + + 1. Run Code Analysis (SonarQube) + + 1. Publish Quality Gate Result (SonarQube) + * Timeout (s): 300 + +1. Save the changes to your pipeline, but don't start it yet. + +1. Add a project guid to the **mywebapp** project.\ *This is a workaround for the SonarQube runner to work with dotnet core projects.\ Otherwise, the dotnet build task will have an error similar to:*\ ```No analysable projects were found. SonarQube analysis will not be performed. Check the build summary report for details.```\ -Edit the project file (\.csproj), and ensure the *ProjectGuid* property is present: +Edit the project file (mywebapp.csproj), and ensure the *ProjectGuid* property is present: -
<websiteprojectname>.csproj (expand to view code) +
mywebapp.csproj (expand to view code) ```xml @@ -67,13 +90,13 @@ Edit the project file (\.csproj), and ensure the *ProjectGui 1. When finished, inspect the SonarQube results for the build: - Check the build Summary tab - - Inspect the status in the section **SonarQube Analysis Report** + - Inspect the status in the tab **Extensions** - Open the SonarQube project results by following the **Detailed SonarQube report** link. - Review the code analysis outcome in the SonarQube project results ## Stretch goals -1. Install 'SonarLint for Visual Studio 2017' via 'Tools - Extensions and Updates...' +1. Install 'SonarLint for Visual Studio 2019' via 'Extensions' 2. Configure your Sonar server via Team Explorer - SonarQube 3. Build your application and see the Sonar issues appear in the Error List of Visual Studio 4. Mark an issue in SonarQube as false positive and rebuild your application diff --git a/ui-testing/README.md b/ui-testing/README.md index 47ea7f1..344c072 100644 --- a/ui-testing/README.md +++ b/ui-testing/README.md @@ -8,7 +8,7 @@ The instructions are based on the following documentation: ## Prerequisites -- Complete lab: [Pipeline as code with K8s and Terraform](https://dev.azure.com/thx1139/_git/workshop1?path=%2FREADME.md)) +- Complete lab: [Pipeline as code with K8s and Terraform](https://dev.azure.com/thx1139/_git/workshop1?path=%2FREADME.md) ## Configure local UI Testing 1. Open the mywebapp.csproj (TRAIN/workshop1/app/mywebapp) in Visual Studio. From caf3018e689cc4e56c474e66e53296a384432792 Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Thu, 6 Feb 2020 20:58:53 +0100 Subject: [PATCH 152/168] Updated prerequisites --- azure-rm/README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/azure-rm/README.md b/azure-rm/README.md index ed27a04..ff5b182 100644 --- a/azure-rm/README.md +++ b/azure-rm/README.md @@ -48,10 +48,15 @@ Follow instructions from [Add a VM to a lab in Azure DevTest Labs](https://docs. - Verify you can use the virtual machine by connecting to it:\ Select 'Connect' in the Virtual machine Overview in the portal and provide the credentials you used in the previous step. -1. Install .NET Core SDK version 2.2: +1. Install .NET Core SDK version 3.1: - Open a PowerShell window - Enter this command and press Enter: - - `choco install dotnetcore-sdk --version=2.2.102 -y` + - `choco install dotnetcore-sdk` + +1. Install Azure CLI + - Open a PowerShell window + - Enter this command and press Enter: + - `Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .\AzureCLI.msi; Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet'` ## Next steps Return to the [Lab index](../README.md) to continue with the course labs. \ No newline at end of file From 4b1ab0ed0d50e213dfae50fe105429d7cdd05952 Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Sun, 9 Feb 2020 16:44:20 +0100 Subject: [PATCH 153/168] Modified Smoke Tests to new solution --- smoke-testing/README.md | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/smoke-testing/README.md b/smoke-testing/README.md index f717cb1..389600f 100644 --- a/smoke-testing/README.md +++ b/smoke-testing/README.md @@ -4,13 +4,12 @@ This lab contains instructions to enable automated smoke testing in the release. ## Prerequisites -- Complete lab: [Continuous Integration with Azure DevOps](../azure-devops-project/README.md) -- Complete lab: [Multi-stage deployments with Azure DevOps](../multi-stage-deployments/README.md) +- Complete lab: [Pipeline as code with K8s and Terraform](https://dev.azure.com/thx1139/_git/workshop1?path=%2FREADME.md) - Complete lab: [UI Testing with Selenium and Azure DevOps](../ui-testing/README.md) ## Configure local Smoke Testing -1. In the **FunctionalTest** project, add a smoke test to validate if the website is available: +1. In the **FunctionalTests** project, add a smoke test to validate if the website is available:
SmokeTests.cs (expand to view code) ```csharp @@ -30,7 +29,7 @@ This lab contains instructions to enable automated smoke testing in the release. [TestInitialize()] public void MyTestInitialize() { - if (TestContext.Properties.ContainsKey("siteUrl")) + if (TestContext.Properties["siteUrl"] != null) { _siteUrl = TestContext.Properties["siteUrl"].ToString(); } @@ -67,20 +66,18 @@ Right-click the *ValidateSiteIsAvailable()* test method and select **Run Test(s) ## Configure automated Smoke Testing in the release pipeline -1. Include a task to run the Smoke tests in the release pipeline: - - Edit the Azure DevOps **Release** - - In the **qa** environment stage, clone the existing **Visual Studio Test** task - - Rename the first test task to **Run Smoke Tests** and ensure it has this setting: - - *Test filter criteria:* TestCategory=Smoke - - Rename the second test task to **Run UI Tests** and ensure it has this setting: - - *Test filter criteria:* TestCategory=UI - - Create the same **Run UI Tests** task in the **dev** environment stage - -1. Commit your code to trigger a **Build**, followed by a **Release**.\ +1. Include Smoke tests in the app pipeline: + - Edit the Azure DevOps **app** pipeline + - In the stage **Release_Test**, edit the deployment **Run_functional_tests** + - Rename the deployment name to **Run_tests** + - Clone the existing **VSTest@2** and place it right below the current task + - Give the first test task the displayname **Run Smoke Tests** and ensure it has this setting: + - *Test filter criteria:* TestCategory=Smoke + - Give the second test task the displayname **Run UI Tests** and ensure it has this setting: + - *Test filter criterai:* TestCategory=UI + +1. Commit your code to trigger the **App pipeline**.\ Upon completion, inspect the release results and verify the Smoke test passed.\ - Notice the difference in executed tests per environment stage: - - **qa** environment stage: **smoke** tests and **UI** tests have been executed - - **dev** environment stage: **smoke** tests have been executed ## Stretch goals From 18cde2a473e09f463df448f8dc9c305037db4fd8 Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Sun, 9 Feb 2020 16:49:03 +0100 Subject: [PATCH 154/168] Added the new Secure DevOps kit lab --- README.md | 2 +- secure-devops-kit/README.md | 14 ++------------ smoke-testing/README.md | 2 +- 3 files changed, 4 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 8dcbd0b..aa268ea 100644 --- a/README.md +++ b/README.md @@ -12,5 +12,5 @@ The course contains the following labs: | [Lab 3 - Static code analysis with SonarQube](sonarqube/README.md) | 45 min | | [Lab 4 - Feature Toggles](feature-flag/README.md) | 45 min | | [Lab 5 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 min | -| [Lab 6 - Working with Secure DevOps Kit for Azure](security-testing/README.md) | 45 min | +| [Lab 6 - Working with Secure DevOps Kit for Azure](secure-devops-kit/README.md) | 45 min | | [Lab 7 - *(Optional)* - Feature branching and branch protection](feature-branching/README.md) | 45 min | diff --git a/secure-devops-kit/README.md b/secure-devops-kit/README.md index 8a9d5aa..7f15076 100644 --- a/secure-devops-kit/README.md +++ b/secure-devops-kit/README.md @@ -12,8 +12,7 @@ This instructions are based on the following documentation - [Getting started with the Secure DevOps Kit for Azure!](https://azsk.azurewebsites.net/00b-Getting-Started/Readme.html) ## Prerequisites -- PowerShell 5.0 or higher installed on local machine -- Active Azure subscription +- Complete lab: [Pipeline as code with K8s and Terraform](https://dev.azure.com/thx1139/_git/workshop1?path=%2FREADME.md) ## Preparations 1. Install Azure CLI on your local machine @@ -105,14 +104,5 @@ The AzSK Monitoring Solution is deployed to a Log Analytics workspace that is us 1. Once the Continuous setupd and modules download are completed successfully, the runbooks will automatically execute periodically (once a day) and scan the subscription and the specified resource groups for the application(s) for security issues. The outcomes of these scans will get stored in a storage account created by the installation (format : azsk e.g. azsk20170505181008) and follows a similar structure as followed by standalone SVT execution (CSV file, LOG file, etc.). -## Setup and configure Control Telemetry (Cloud Risk Governance) -Soon Control Telemetry will be renamed towards Org Telemetry. - -1. Create an Application Insights account in the [Azure Portal](https://portal.azure.com) - -1. When the Application Insights account has been created execute the next PowerShell command to configure the Org Telemetry setup on your local machine `Set-AzSKLocalAIOrgTelemetrySettings -LocalAIOrgTelemetryKey '' -EnableLocalAIOrgTelemetry $true`. Instrumentation key can be found on the overview page of the Application Insights account in the [Azure Portal](https://portal.azure.com). - -1. Check the data in Application Insights account in the [Azure Portal](https://portal.azure.com). It can take around 4 to 5 minutes before the data will be shown in Azure. - -## Stretch goals?? +## Stretch goals 1. Create an Azure pipeline with AzSK tasks to scan your Azure subscription and his resources. diff --git a/smoke-testing/README.md b/smoke-testing/README.md index 389600f..814b91a 100644 --- a/smoke-testing/README.md +++ b/smoke-testing/README.md @@ -77,7 +77,7 @@ Right-click the *ValidateSiteIsAvailable()* test method and select **Run Test(s) - *Test filter criterai:* TestCategory=UI 1. Commit your code to trigger the **App pipeline**.\ - Upon completion, inspect the release results and verify the Smoke test passed.\ + Upon completion, inspect the release results and verify the Smoke test passed. ## Stretch goals From 101b733f10522044ee025c011c93e48bc8f23a4b Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Sun, 9 Feb 2020 16:50:29 +0100 Subject: [PATCH 155/168] Removed not working component AzSK --- secure-devops-kit/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/secure-devops-kit/README.md b/secure-devops-kit/README.md index 7f15076..b2f456c 100644 --- a/secure-devops-kit/README.md +++ b/secure-devops-kit/README.md @@ -6,7 +6,6 @@ This lab contains instructions to explore the possibilities of the Micorosoft Se - Security in CICD - Continuous Assurance - Alerting & Monitoring -- Cloud Risk Governance This instructions are based on the following documentation - [Getting started with the Secure DevOps Kit for Azure!](https://azsk.azurewebsites.net/00b-Getting-Started/Readme.html) From 5ff439b6722e606951ea090aedaeca0e855efe87 Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Sun, 9 Feb 2020 16:51:24 +0100 Subject: [PATCH 156/168] Modified AzSK lab --- secure-devops-kit/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/secure-devops-kit/README.md b/secure-devops-kit/README.md index b2f456c..926c179 100644 --- a/secure-devops-kit/README.md +++ b/secure-devops-kit/README.md @@ -104,4 +104,4 @@ The AzSK Monitoring Solution is deployed to a Log Analytics workspace that is us 1. Once the Continuous setupd and modules download are completed successfully, the runbooks will automatically execute periodically (once a day) and scan the subscription and the specified resource groups for the application(s) for security issues. The outcomes of these scans will get stored in a storage account created by the installation (format : azsk e.g. azsk20170505181008) and follows a similar structure as followed by standalone SVT execution (CSV file, LOG file, etc.). ## Stretch goals -1. Create an Azure pipeline with AzSK tasks to scan your Azure subscription and his resources. +1. Add the AzSK tasks to your pipeline to scan your Azure subscription and his resources. From 4ce2f9da571bed8f42879ffb816d5434f766dc91 Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Sun, 9 Feb 2020 16:54:34 +0100 Subject: [PATCH 157/168] Changed description AzSK in the index --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aa268ea..a28f70f 100644 --- a/README.md +++ b/README.md @@ -12,5 +12,5 @@ The course contains the following labs: | [Lab 3 - Static code analysis with SonarQube](sonarqube/README.md) | 45 min | | [Lab 4 - Feature Toggles](feature-flag/README.md) | 45 min | | [Lab 5 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 min | -| [Lab 6 - Working with Secure DevOps Kit for Azure](secure-devops-kit/README.md) | 45 min | +| [Lab 6 - Working with Azure Secure DevOps Kit](secure-devops-kit/README.md) | 45 min | | [Lab 7 - *(Optional)* - Feature branching and branch protection](feature-branching/README.md) | 45 min | From 3eb18444db45ce43ca538cd9e094d6c3a790d0fc Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Mon, 10 Feb 2020 13:50:56 +0100 Subject: [PATCH 158/168] Changed prerequisites for master --- azure-rm/README.md | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/azure-rm/README.md b/azure-rm/README.md index 3422143..8c57afd 100644 --- a/azure-rm/README.md +++ b/azure-rm/README.md @@ -6,11 +6,11 @@ Follow this lab to set up a development environment for the course labs. Creatin 1. Make sure you have an active Azure DevOps account.\ [Sign up for Azure DevOps](https://dev.azure.com/) -2. Make sure you have an active Azure subscription.\ +1. Make sure you have an active Azure subscription.\ Sign in to the [Azure Portal](https://portal.azure.com) to verify you can log in and create resources.\ If you used a (Avanade) organization MDSN account, go to the next step. -3. (only for organization accounts) If you are using your Avanade email to access the Azure portal, then you will need to create a new Active Directory instance. This is because the labs require creating an enterprise application id and individual users do not have permissions to create enterprise applications on the Avanade AD instance. +1. (only for organization accounts) If you are using your Avanade email to access the Azure portal, then you will need to create a new Active Directory instance. This is because the labs require creating an enterprise application id and individual users do not have permissions to create enterprise applications on the Avanade AD instance. - In the [Azure Portal](https://portal.azure.com), *Create a Resource* of *Azure Active Directory* with a meaningful name. This is probably something you will use as a general purpose AD instance (i.e. not just for the class) so you may want to name it appropriately. @@ -28,24 +28,36 @@ Follow instructions from [Create a lab in Azure DevTest Labs](https://docs.micro - Location: West Europe - Auto-shutdown: default (Enabled, 19:00) -2. Add a Virtual Machine to your DevTest lab\ +1. Add a Virtual Machine to your DevTest lab\ Follow instructions from [Add a VM to a lab in Azure DevTest Labs](https://docs.microsoft.com/azure/lab-services/devtest-lab-add-vm). Ensure the following settings: - Choose a base: Visual Studio 2019 Community on Windows 10 Enterprise N (x64) - Virtual machine name: devopsvm - User name: devopshol - Password: ADP#2019 - - Virtual machine size: Standard_B8ms + - Virtual machine size: + - Pick any size that fits within your subscription - OS disk type: Standard SSD - Artifacts selection: Install Chocolatey Packages, configuration: - - Packages: git,vscode,googlechrome + - Packages: `git,vscode,microsoft-edge-insider` - Allow Empty Checksums: true - Ignore Checksums: true -3. Verify connection to the Virtual Machine +1. Verify connection to the Virtual Machine - Wait untill the virtual machine is fully provisioned and the artifacts are applied.\ *(this can take up to 20 minutes)* - Verify you can use the virtual machine by connecting to it:\ Select 'Connect' in the Virtual machine Overview in the portal and provide the credentials you used in the previous step. +1. Install .NET Core SDK version 3.1: + - Open a PowerShell window + - Enter this command and press Enter: + - `choco install dotnetcore-sdk` + +1. Install Azure CLI + - Open a PowerShell window + - Enter this command and press Enter: + + `Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .\AzureCLI.msi; Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet'` + ## Next steps Return to the [Lab index](../README.md) to continue with the course labs. \ No newline at end of file From 3a0f3d30410f4457119dd3232606ff6f20210993 Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Mon, 10 Feb 2020 13:59:44 +0100 Subject: [PATCH 159/168] Edited the prerequisites file --- azure-rm/README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/azure-rm/README.md b/azure-rm/README.md index ff5b182..8c57afd 100644 --- a/azure-rm/README.md +++ b/azure-rm/README.md @@ -54,9 +54,10 @@ Follow instructions from [Add a VM to a lab in Azure DevTest Labs](https://docs. - `choco install dotnetcore-sdk` 1. Install Azure CLI - - Open a PowerShell window - - Enter this command and press Enter: - - `Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .\AzureCLI.msi; Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet'` + - Open a PowerShell window + - Enter this command and press Enter: + + `Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .\AzureCLI.msi; Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet'` ## Next steps Return to the [Lab index](../README.md) to continue with the course labs. \ No newline at end of file From 47c4c089f94430a0999c10df1f0a3f827e3102cf Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Tue, 11 Feb 2020 18:50:12 +0100 Subject: [PATCH 160/168] Changed order of lab 5 and lab 6 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a28f70f..3663555 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,6 @@ The course contains the following labs: | [Lab 2 - UI Testing with Selenium and Azure DevOps](ui-testing/README.md) | 45 min | | [Lab 3 - Static code analysis with SonarQube](sonarqube/README.md) | 45 min | | [Lab 4 - Feature Toggles](feature-flag/README.md) | 45 min | -| [Lab 5 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 min | -| [Lab 6 - Working with Azure Secure DevOps Kit](secure-devops-kit/README.md) | 45 min | +| [Lab 5 - Working with Azure Secure DevOps Kit](secure-devops-kit/README.md) | 45 min | +| [Lab 6 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 min | | [Lab 7 - *(Optional)* - Feature branching and branch protection](feature-branching/README.md) | 45 min | From 052e320a8fddfc46a16ec4f33c676ee677f75e2a Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Tue, 11 Feb 2020 19:44:12 +0100 Subject: [PATCH 161/168] Edited feature flags to support new solution --- feature-flag/README.md | 150 +++++++++++++---------------------------- 1 file changed, 47 insertions(+), 103 deletions(-) diff --git a/feature-flag/README.md b/feature-flag/README.md index eae4321..e051794 100644 --- a/feature-flag/README.md +++ b/feature-flag/README.md @@ -8,24 +8,23 @@ The instructions are based on the following documentation: ## Prerequisites -- Complete lab: [Continuous Integration with Azure DevOps](../azure-devops-project/README.md) -- Complete lab: [Multi-stage deployments with Azure DevOps](../multi-stage-deployments/README.md) +- Complete lab: [Pipeline as code with K8s and Terraform](https://dev.azure.com/thx1139/_git/workshop1?path=%2FREADME.md) ## Add a feature toggle to the application -1. In the **Website** project, add the feature toggle NuGet package: +1. In the **mywebapp** project, add the feature toggle NuGet package: - FeatureToggle (by Jason Roberts) -1. In the **Website** project, add a feature toggle: +1. In the **mywebapp** project, add a feature toggle: - Create a feature toggle class in a 'Feature' folder -
Feature\CheckPhoneNumber.cs (expand to view code) +
Feature\ShowDate.cs (expand to view code) ```csharp using FeatureToggle; - namespace aspnet_core_dotnet_core.Features + namespace mywebapp.Feature { - public class CheckPhoneNumber : SimpleFeatureToggle { } + public class ShowDate : SimpleFeatureToggle { } } ```
@@ -36,7 +35,7 @@ The instructions are based on the following documentation: ```json { "FeatureToggle": { - "CheckPhoneNumber": false + "ShowDate": false } ... } @@ -52,130 +51,75 @@ The instructions are based on the following documentation: public void ConfigureServices(IServiceCollection services) { // Set provider config so file is read from content root path - var provider = new AppSettingsProvider { Configuration = Configuration }; + var provider = new AppSettingsProvider { Configuration = (IConfigurationRoot)Configuration }; // Add your feature here - services.AddSingleton(new CheckPhoneNumber { ToggleValueProvider = provider }); + services.AddSingleton(new ShowDate { ToggleValueProvider = provider }); ... } ```
-1. In the **Website** project, implement the feature toggle in a (new) phone number form on the contact page: - - Create a view model for the contact page including the feature toggle +1. In the **mywebapp** project, implement the feature toggle on the Index page: + - Add the FeatureToggle as property to the IndexModel and assigned it with Dependency Injection in the OnGet method. -
Models\ContactViewModel.cs (expand to view code) +
Pages\Index.cshtml.cs (expand to view code) ```csharp using FeatureToggle; + using Microsoft.AspNetCore.Mvc.RazorPages; + using Microsoft.Extensions.Logging; + using mywebapp.Feature; - namespace aspnet_core_dotnet_core.Models + namespace mywebapp.Pages { - public class ContactViewModel + public class IndexModel : PageModel { - public IFeatureToggle CheckPhoneNumber { get; set; } + private readonly ILogger _logger; + public IFeatureToggle ShowDate { get; set; } - public string Name { get; set; } + public IndexModel(ILogger logger) + { + _logger = logger; + } - public int? PhoneNumber { get; set; } + public void OnGet(ShowDate showDate) + { + ShowDate = showDate; + } } } ```
- - Inject the feature toggle in the controller, and pass it to the contact page - -
Controllers\HomeController.cs" (expand to view code) + - Add html to show the current DateTime in the form that will only display if the feature ShowDate is enabled. +
Pages\Index.cshtml (expand to view code) ```csharp - public class HomeController : Controller - { - private readonly CheckPhoneNumber _checkPhoneNumber; - - protected HomeController() - { - } - - public HomeController(CheckPhoneNumber checkPhoneNumber) - { - _checkPhoneNumber = checkPhoneNumber; - } - - ... + @page + @model IndexModel + @{ + ViewData["Title"] = "Home page"; + } - public IActionResult Contact() +
+

Welcome Avanadi!

+

Learn about building Web apps with ASP.NET Core.

+ @if(Model.ShowDate.FeatureEnabled) { - ... - // return a contact view model including the toggle setting - return View(new ContactViewModel { CheckPhoneNumber = _checkPhoneNumber }); +
+ @Html.Label("Current DateTime is: " + DateTime.Now.ToString()) +
} - - ... - } - ``` -
- - - Add the form with a toggle for the phone number logic to the contact page -
Views\Home\Contact.cshtml (expand to view code) - - ```csharp - @model aspnet_core_dotnet_core.Models.ContactViewModel - - ... - -
-
-
- - - -
-
- - - @if (Model.CheckPhoneNumber.FeatureEnabled) - { - @Html.TextBoxFor(m => m.PhoneNumber, new { @class = "form-control", placeholder = "555-555-5555", type = "tel", pattern = "\\d{3}[\\-]\\d{3}[\\-]\\d{4}", id = "phone" }) - } - else - { - @Html.TextBoxFor(m => m.PhoneNumber, new { @class = "form-control", placeholder = "Phone Number", id = "phone" }) - } - - -
-
- -
-
- ``` -
- - - In the UnitTest project, adjust the unit tests to the feature toggle injection - -
SampleUnitTests.cs (expand to view code) - - ```csharp - public void IndexPageTest() - { - var controller = new HomeController(null); - ... - public void AboutPageTest() - { - var controller = new HomeController(null); - ... - public void ContactPageTest() - { - var controller = new HomeController(null); + ```
-1. Start the website locally and test the feature toggle in the Contact form: - - With the toggle set to **false** in config, on the Contact page form: - 1. Enter any phone number and hit submit. Notice how no validation error is given - - With the toggle set to **true** in config, on the Contact page form: - 1. Enter phone number 0123456789, hit submit, and notice the validation error - 1. Enter phone number 123-123-5678, submit and notice the page refreshes without error +1. Start the website locally and test the feature toggle on the Index page: + - With the toggle set to **false** in config, on the Index page: + * You won't see the current DateTime. + - With the toggle set to **true** in config, on the Index page: + * You will see the current DateTime. ## Configure the feature toggle in the release pipeline From 7ea75e40c327f31ea1422b34b1b9277819d6b8fc Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Tue, 11 Feb 2020 19:50:35 +0100 Subject: [PATCH 162/168] adjust chapter 2 feature toggles --- feature-flag/README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/feature-flag/README.md b/feature-flag/README.md index e051794..76ff953 100644 --- a/feature-flag/README.md +++ b/feature-flag/README.md @@ -123,23 +123,23 @@ The instructions are based on the following documentation: ## Configure the feature toggle in the release pipeline -1. Configure the feature toggle to be enabled on the **qa** environment: - - Edit the Azure DevOps **Release** pipeline +1. Configure the feature toggle to be enabled on the **Test** environment: + - Edit the Azure DevOps **app** pipeline - Go to Variables, and add the variables: - |Name |Value|Scope| - |:-----------------------------|:----|:----| - |FeatureToggle.CheckPhoneNumber|true |qa | - |FeatureToggle.CheckPhoneNumber|false|dev | + |Name |Value|Scope| + |:---------------------|:----|:----| + |FeatureToggle.ShowDate|true |test | + |FeatureToggle.ShowDate|false|prod | - In the **Deploy Azure App Service** task, under *Application and Configuration Settings*,\ ensure the following setting: - - *App settings:* ```-FEATURETOGGLE__CHECKPHONENUMBER $(FeatureToggle.CheckPhoneNumber)``` + - *App settings:* ```-FEATURETOGGLE__SHOWDATE $(FeatureToggle.ShowDate)``` -1. Commit your code to trigger a **Build**, followed by a **Release** +1. Commit your code to trigger the **app** pipeline 1. Approve the release to all environments, and inspect the results:\ -The **qa** environment should have the feature enabled, and the **dev** environment not. +The **test** environment should have the feature enabled, and the **prod** environment not. ## Next steps Return to the [Lab index](../README.md) and continue with the next lab \ No newline at end of file From 5581f0cf29382c79a09c510696a8fc23cfdd8191 Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Wed, 12 Feb 2020 21:25:17 +0100 Subject: [PATCH 163/168] Updated UI-testing lab --- README.md | 2 +- feature-flag/README.md | 64 ++++++++++- ui-testing/README.md | 241 +++++++++++++++++++++-------------------- 3 files changed, 185 insertions(+), 122 deletions(-) diff --git a/README.md b/README.md index 3663555..35e366d 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ The course contains the following labs: | Lab | Effort | | :-------- |:--------------------------:| | [Prerequisites - Set up development environment](azure-rm/README.md) | 30 min | -| [Lab 1 - Pipelines as code with K8s and Terraform](https://dev.azure.com/thx1139/_git/workshop1?path=%2FREADME.md) | 30 min | +| [Lab 1 - Pipelines as code with K8s and Terraform](https://dev.azure.com/thx1139/_git/workshop1?path=%2FREADME.md) | 60 min | | [Lab 2 - UI Testing with Selenium and Azure DevOps](ui-testing/README.md) | 45 min | | [Lab 3 - Static code analysis with SonarQube](sonarqube/README.md) | 45 min | | [Lab 4 - Feature Toggles](feature-flag/README.md) | 45 min | diff --git a/feature-flag/README.md b/feature-flag/README.md index 76ff953..bbb023d 100644 --- a/feature-flag/README.md +++ b/feature-flag/README.md @@ -43,7 +43,7 @@ The instructions are based on the following documentation:
- Initialize the feature toggle setting from the configuration during startup - +
Startup.cs (expand to view code) ```csharp @@ -60,6 +60,40 @@ The instructions are based on the following documentation: ```
+ - Add environment variables to the program configuration + +
Program.cs (expand to view code) + + ```csharp + using Microsoft.AspNetCore.Hosting; + using Microsoft.Extensions.Configuration; + using Microsoft.Extensions.Hosting; + + namespace mywebapp + { + public class Program + { + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + webBuilder.UseUrls("http://*:5000"); + webBuilder.ConfigureAppConfiguration((hostingContext, config) => + { + config.AddEnvironmentVariables(prefix: "ShowDate_"); + }); + }); + } + } + ``` +
+ 1. In the **mywebapp** project, implement the feature toggle on the Index page: - Add the FeatureToggle as property to the IndexModel and assigned it with Dependency Injection in the OnGet method. @@ -132,10 +166,38 @@ The instructions are based on the following documentation: |FeatureToggle.ShowDate|true |test | |FeatureToggle.ShowDate|false|prod | + - Add the environment variable to mywebapp.yaml +
deploy\myapp\templates\mywebapp.yaml (expand to view code) + + ``` + ... + - image: {{ .Values.containerregistryurl}}/mywebapp:{{ .Values.build }} + name: mywebapp + env: + - name: "FeatureToggle__ShowDate" + value: {{ index .Values "ftcpn" }} + ... + ``` +
+ + - In the **Deploy Azure App Service** task, under *Application and Configuration Settings*,\ ensure the following setting: - *App settings:* ```-FEATURETOGGLE__SHOWDATE $(FeatureToggle.ShowDate)``` +1. Edit the **app** pipeline + - Add two new variables: + 1. *ft.showdate.test* with the value *true* + 1. *ft.showdate.prod* with the value *false* + + - Include variable *ft.showdate.test* in the test deployment stage + - location: Release_Test/Deploy_containers/HelmDeploy@0 + - add a new override value: ftcpn=$(ft.showdate.test) + + - Include variable *ft.showdate.prod* in the prod deployment stage + - location: Release_Prod/Deploy_containers/HelmDeploy@0 + - add a new override value: ftcpn=$(ft.showdate.prod) + 1. Commit your code to trigger the **app** pipeline 1. Approve the release to all environments, and inspect the results:\ diff --git a/ui-testing/README.md b/ui-testing/README.md index 344c072..c9eab89 100644 --- a/ui-testing/README.md +++ b/ui-testing/README.md @@ -11,20 +11,13 @@ The instructions are based on the following documentation: - Complete lab: [Pipeline as code with K8s and Terraform](https://dev.azure.com/thx1139/_git/workshop1?path=%2FREADME.md) ## Configure local UI Testing -1. Open the mywebapp.csproj (TRAIN/workshop1/app/mywebapp) in Visual Studio. +1. Open the mywebapp.csproj (TRAIN/azdotraining1/app/mywebapp) in Visual Studio. 1. Add a new project to the solution with the following settings: - **Project Type:** xUnit Test Project (.NET Core) Visual C# - **Name:** FunctionalTests -1. Close the solution in Visual Studio and open the mywebapp folder (./TRAIN/azdotraining1/app/mywebapp) in file explorer. Move the **mywebapp.sln** towards the app folder (./TRAIN/azdotraining1/app). - -1. Edit the **mywebapp.sln** with Notepad or VS Code: - - Change `"mywebapp.csproj"` to `".\mywebapp\mywebapp.csproj"` - - Change `""..\FunctionalTests\FunctionalTests.csproj` to `".\FunctionalTests\FunctionalTests.csproj"` - - Save and close the **mywebapp.sln** file. - -1. Reopen the **mywebapp.sln** in Visual Studio. +1. Save the solution in Visual Studio in the app folder (./TRAIN/azdotraining1/app). 1. In the **FunctionalTests** project, remove the sample test (UnitTest1.cs) if it exists @@ -33,16 +26,16 @@ The instructions are based on the following documentation: - MSTest.TestAdapter - Selenium.Support - Selenium.WebDriver - - Selenium.WebDriver.ChromeDriver + - Selenium.WebDriver.ChromeDriver **Version: (79.0.3945.3600)** -1. Ensure the Selenium Chrome driver executable is copied to the output during publish. Also make sure that the testproject is using .NET Core 2.2. On the **FunctionalTests** project, edit the project file +1. Ensure the Selenium Chrome driver executable is copied to the output during publish. Also make sure that the testproject is using .NET Core 2.2. To do this: double click on the **FunctionalTests** and the FunctionalTests.csproj will be opened: - Add the following PropertyGroup: ```xml true ``` - - Verify that the project is using .NET Core 2.2 + - Make sure that the project is using .NET Core 2.2 ```xml netcoreapp2.2 @@ -50,7 +43,7 @@ The instructions are based on the following documentation: ``` -1. In the **FunctionalTests** project, (modify or) create a .runsettings file containing the siteUrl as parameter. Find the local website port in the website project *(mywebapp\Properties\launchSettings.json)* and create: +1. In the **FunctionalTests** project, create the **functionalTests.runsettings** file. And replace the content with the following content:
functionalTests.runsettings (expand to view code) @@ -58,49 +51,19 @@ The instructions are based on the following documentation: - + ```
-1. Configure Visual Studio to use the .runsettings file using:\ -[Configure unit tests by using a .runsettings file](https://docs.microsoft.com/visualstudio/test/configure-unit-tests-by-using-a-dot-runsettings-file) +1. In the **functionalTests.runsettings** file make sure that the port of the siteUrl is the same as the webapp is using. This port can be found in the **launSettings.json** *(mywebapp\Properties\launchSettings.json)* of the **mywebapp** project. -1. In the **FunctionalTests** project, add functional test classes for all pages. -Add a folder 'PageObjects' and add the following classes to it. -
BasePage.cs (expand to view code) - - ```csharp - using OpenQA.Selenium; - - abstract class BasePage - { - protected readonly IWebDriver Driver; - protected readonly string BaseUrl; - - protected BasePage(IWebDriver driver, string baseUrl) - { - Driver = driver; - BaseUrl = baseUrl; - } - public HomePage GoToHomePage() - { - var home = Driver.FindElement(By.LinkText("Home")); - home.Click(); - return new HomePage(Driver, BaseUrl); - } +1. Configure Visual Studio to use the .runsettings file you just created. In Visual Studio go to *Test-->Configure Run Settings-->Select Solution Wide runsettings File*. In the explorer window select the **functionalTests.runsettings** file located in the folder *FunctionalTests*. - public PrivacyPage GoToPrivacyPage() - { - var about = Driver.FindElement(By.LinkText("Privacy")); - about.Click(); - return new PrivacyPage(Driver, BaseUrl); - } - } - ``` -
+1. In the **FunctionalTests** project add functional test classes for all pages. +Add the following classes to it:
HomePage.cs (expand to view code) @@ -143,6 +106,39 @@ Add a folder 'PageObjects' and add the following classes to it. ```
+
BasePage.cs (expand to view code) + + ```csharp + using OpenQA.Selenium; + + abstract class BasePage + { + protected readonly IWebDriver Driver; + protected readonly string BaseUrl; + + protected BasePage(IWebDriver driver, string baseUrl) + { + Driver = driver; + BaseUrl = baseUrl; + } + + public HomePage GoToHomePage() + { + var home = Driver.FindElement(By.LinkText("Home")); + home.Click(); + return new HomePage(Driver, BaseUrl); + } + + public PrivacyPage GoToPrivacyPage() + { + var about = Driver.FindElement(By.LinkText("Privacy")); + about.Click(); + return new PrivacyPage(Driver, BaseUrl); + } + } + ``` +
+ 1. In the **FunctionalTests** project, create the following test class for the functional UI tests:
UITests.cs (expand to view code) @@ -229,97 +225,102 @@ Add a folder 'PageObjects' and add the following classes to it. ```
+1. Start your website without debugging. This will ensure the website will be running in the local IIS Express instance, on the url specified in the .runsettings file. -1. Start your website once (using IIS Express settings) by debugging it, and then stop the debugger. This will ensure the website will be running in the local IIS Express instance, on the url specified in the .runsettings file. +1. Run the UI tests you just created in the Test Explorer and make sure that it succeeds. -1. Run the UI tests you just created and make sure that it succeeds. +1. When the tests are completed go in the File explorer to build folder of the FunctionalTests project *(C://TRAIN/azdotraining1/app/FunctionalTests/bin/Debug/netcoreapp2.2)*. Here you will some screenshots that were made during the test run, which can be used as Test evidence. ## Configure automated UI Testing -1. Open the app-pipeline.yml to edit your app pipeline. +1. Open the **app** pipeline *(Azure DevOps/Pipelines/Pipelines/app)* and press on **Edit**. + +1. The automated Selenium tests will run against the public ip address of our deployed Pods. To assign the right ip address to the pipeline we will use variables. The ip addressess can be found in the PowerShell window you used in lab 1. Add the next two variables: + 1. **Name:** testip **Value:** http://*\* + 1. **Name:** prodip **Value:** http://*\* -1. First the build of the Selenium project needs to be added to the **Build** stage by adding the following code above the job **Build_containers** +**Dont forget to press on Save!!** + +1. First the build step of the Selenium project needs to be added to the **Build** stage by adding the following code above the job **Build_containers**. Make sure that the identation of the code is correct. ``` - job: Build_functional_tests - pool: - vmImage: 'windows-latest' - steps: - - task: UseDotNet@2 - displayName: 'Use .NET Core sdk 2.2.301' - inputs: - packageType: 'sdk' - version: '2.2.301' - - task: DotNetCoreCLI@2 - displayName: 'Restore' - inputs: - command: 'restore' - projects: '**/FunctionalTests.csproj' - feedsToUse: 'select' - - task: DotNetCoreCLI@2 - displayName: 'Publish' - inputs: - command: publish - publishWebProjects: false - projects: '**/FunctionalTests.csproj' - arguments: '--configuration Release -o $(build.artifactstagingdirectory)/SeleniumTests' + pool: + vmImage: 'windows-latest' + steps: + - task: UseDotNet@2 + displayName: 'Use .NET Core sdk 2.2.301' + inputs: + packageType: 'sdk' + version: '2.2.301' + - task: DotNetCoreCLI@2 + displayName: 'Restore' + inputs: + command: 'restore' + projects: '**/FunctionalTests.csproj' + feedsToUse: 'select' + - task: DotNetCoreCLI@2 + displayName: 'Publish' + inputs: + command: publish + publishWebProjects: false + projects: '**/FunctionalTests.csproj' + arguments: '--configuration Release -o $(build.artifactstagingdirectory)/SeleniumTests' zipAfterPublish: false modifyOutputPath: false - - task: PublishPipelineArtifact@1 - displayName: 'Publish Pipeline Artifact' - inputs: - targetPath: '$(Build.ArtifactStagingDirectory)' - artifact: 'functionaltests' - publishLocation: 'pipeline' + - task: PublishPipelineArtifact@1 + displayName: 'Publish Pipeline Artifact' + inputs: + targetPath: '$(Build.ArtifactStagingDirectory)' + artifact: 'functionaltests' + publishLocation: 'pipeline' ``` -1. The automated Selenium tests will run against the public ip address of our deployed Pods. To assign the right IP address to the pipeline we will use variables. Add the next two variables: - 1. **Name:** testip **Value:** the public ip address of your test environment - 1. **Name:** prodip **Value:** the public ip address of your production environment - -1. The next step is to add the automated Selenium tests to the Test deployment pipeline by adding the following code in stage **Release_Test** below the block **- deployment: Deploy_containers**: +1. The next step is to add the automated Selenium tests to the Test deployment pipeline by adding the following code in stage **Release_Test** below the block **- deployment: Deploy_containers**. Make sure that the identation is correct. ``` - deployment: Run_functional_tests - dependsOn: "Deploy_containers" - environment: test - pool: - vmImage: 'windows-latest' - strategy: - runOnce: - deploy: - steps: - - task: VSTest@2 - inputs: - testSelector: 'testAssemblies' - testAssemblyVer2: | - **\*FunctionalTests.dll - !**\*TestAdapter.dll - !**\obj\** - searchFolder: '$(Pipeline.Workspace)/functionaltests/SeleniumTests' - overrideTestrunParameters: '-siteUrl "$(testip)"' + dependsOn: "Deploy_containers" + environment: test + pool: + vmImage: 'windows-latest' + strategy: + runOnce: + deploy: + steps: + - task: VSTest@2 + displayName: Run UI Tests + inputs: + testSelector: 'testAssemblies' + testAssemblyVer2: | + **\*FunctionalTests.dll + !**\*TestAdapter.dll + !**\obj\** + searchFolder: '$(Pipeline.Workspace)/functionaltests/SeleniumTests' + overrideTestrunParameters: '-siteUrl "$(testip)"' ``` -1. The last step is to add the automated Selenium tests to the Production deployment pipeline by adding the following code in stage **Release_Prod** below the block **- deployment: Deploy_containers**: +1. The last step is to add the automated Selenium tests to the Production deployment pipeline by adding the following code in stage **Release_Prod** below the block **- deployment: Deploy_containers**. Make sure that the identation is correct. ``` - deployment: Run_functional_tests - dependsOn: "Deploy_containers" - environment: prod - pool: - vmImage: 'windows-latest' - strategy: - runOnce: - deploy: - steps: - - task: VSTest@2 - inputs: - testSelector: 'testAssemblies' - testAssemblyVer2: | - **\*FunctionalTests.dll - !**\*TestAdapter.dll - !**\obj\** - searchFolder: '$(Pipeline.Workspace)/functionaltests/SeleniumTests' - overrideTestrunParameters: '-siteUrl "$(prodip)"' + dependsOn: "Deploy_containers" + environment: prod + pool: + vmImage: 'windows-latest' + strategy: + runOnce: + deploy: + steps: + - task: VSTest@2 + displayName: Run UI Tests + inputs: + testSelector: 'testAssemblies' + testAssemblyVer2: | + **\*FunctionalTests.dll + !**\*TestAdapter.dll + !**\obj\** + searchFolder: '$(Pipeline.Workspace)/functionaltests/SeleniumTests' + overrideTestrunParameters: '-siteUrl "$(prodip)"' ``` -1. Save your pipeline and run it. The Selenium will be automatically executed on the Test and Production environment. After the pipeline is completed you can find the test results in the tab **Tests**. +1. Save your pipeline but don't run it yet. Commit the code changes you made in Visual Studio and push those. This will trigger the **app** pipeline. The Selenium will be automatically executed on the Test and Production environment. After the pipeline is completed you can find the test results in the tab **Tests**. ## Stretch goals From 0c9d2721a8f113f6b5b7083c1d10fd87cf80a118 Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Wed, 12 Feb 2020 21:54:48 +0100 Subject: [PATCH 164/168] Last fixes for lab 3 SonarQube --- sonarqube/README.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/sonarqube/README.md b/sonarqube/README.md index 55f55c5..5b43647 100644 --- a/sonarqube/README.md +++ b/sonarqube/README.md @@ -21,7 +21,7 @@ Ensure the following settings: - *Image name:* sonarqube - *OS type:* Linux - *Size:* 2vcpus, 4 GiB memory, 0 gpus - - *DNS name label:* sonar- + - *DNS name label:* sonar-\ - *Port:* 9000 TCP 1. When provisioning is complete, create a project in SonarQube: @@ -31,7 +31,7 @@ Ensure the following settings: - Under Projects, select **Create new project**. Ensure the following settings: - *Project key:* devopshol - *Display name:* devopshol - - On the resulting project page, select **Generate** to generate a project token.\ + - On the resulting project page, select **Generate** to generate a project token. As token name you can use *devopsholtoken* \ *NOTE: store the token somewhere, it is needed in the next steps to configure the Release* ## Configure SonarQube analysis on the Build stage @@ -40,13 +40,16 @@ Ensure the following settings: 1. Add SonarQube service connection to your Azure DevOps pipelines - Go to Project Settings --> Service Connections - - Add a new service connection with the following demands: - * Server url: http://sonar-.westeurope.azurecontainer.io:9000 + - Add a new SonarQube service connection with the following demands: + * Server url: http://sonar-\.westeurope.azurecontainer.io:9000 * Token: The just generated token from SonarQube * Service connection name: sonarqubeconn1 -1. In the App pipeline add the following steps in the stage Build: +1. In the App pipeline add a new job *Run_SonarQube_analysis* as first job in the Build stage with the following steps: + 1. Job pool vmImage = *ubuntu-latest* + 1. Prepare Analysis Configuration (SonarQube) + * SonarQube Server Enpoint: sonarqubeconn1 * Integrate with MSBuild * Project key: devopshol * Project name: devopshol @@ -58,7 +61,7 @@ Ensure the following settings: 1. .NET Core * Command: build - * Version: 2.x + * Projects: **/mywebapp.csproj 1. Use .NET Core * PackageType: sdk @@ -74,7 +77,7 @@ Ensure the following settings: 1. Add a project guid to the **mywebapp** project.\ *This is a workaround for the SonarQube runner to work with dotnet core projects.\ Otherwise, the dotnet build task will have an error similar to:*\ -```No analysable projects were found. SonarQube analysis will not be performed. Check the build summary report for details.```\ +```No analyzable projects were found. SonarQube analysis will not be performed. Check the build summary report for details.```\ Edit the project file (mywebapp.csproj), and ensure the *ProjectGuid* property is present:
mywebapp.csproj (expand to view code) From ec4f28f94f333efed5d515ba24faf7728a62dcd2 Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Wed, 12 Feb 2020 21:59:05 +0100 Subject: [PATCH 165/168] Fixed markup lab 3 --- sonarqube/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sonarqube/README.md b/sonarqube/README.md index 5b43647..5576419 100644 --- a/sonarqube/README.md +++ b/sonarqube/README.md @@ -41,7 +41,7 @@ Ensure the following settings: 1. Add SonarQube service connection to your Azure DevOps pipelines - Go to Project Settings --> Service Connections - Add a new SonarQube service connection with the following demands: - * Server url: http://sonar-\.westeurope.azurecontainer.io:9000 + * Server url: http://sonar-\ Date: Wed, 12 Feb 2020 22:00:50 +0100 Subject: [PATCH 166/168] fix md lab 3 --- sonarqube/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sonarqube/README.md b/sonarqube/README.md index 5576419..81ec0a7 100644 --- a/sonarqube/README.md +++ b/sonarqube/README.md @@ -41,7 +41,7 @@ Ensure the following settings: 1. Add SonarQube service connection to your Azure DevOps pipelines - Go to Project Settings --> Service Connections - Add a new SonarQube service connection with the following demands: - * Server url: http://sonar-\ Date: Mon, 28 Dec 2020 18:06:10 +0100 Subject: [PATCH 167/168] Added gitignore for local vs stuff --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1670752 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +################################################################################ +# This .gitignore file was automatically created by Microsoft(R) Visual Studio. +################################################################################ + +/.vs/slnx.sqlite From dd8e63782ea426a7a75fb568cccdd385dfbda7db Mon Sep 17 00:00:00 2001 From: Jacco van der Meer Date: Tue, 19 Jan 2021 22:12:05 +0100 Subject: [PATCH 168/168] Added new ADO security scanner lab --- README.md | 2 +- images/ado-security-scanner-pipeline-yaml.png | Bin 0 -> 26305 bytes images/personal-access-tokens-part2.png | Bin 0 -> 8981 bytes images/personal-access-tokens.png | Bin 0 -> 2911 bytes secure-devops-kit-adoscanner/README.md | 129 ++++++++++++++++++ .../README.md | 4 +- 6 files changed, 132 insertions(+), 3 deletions(-) create mode 100644 images/ado-security-scanner-pipeline-yaml.png create mode 100644 images/personal-access-tokens-part2.png create mode 100644 images/personal-access-tokens.png create mode 100644 secure-devops-kit-adoscanner/README.md rename {secure-devops-kit => secure-devops-kit-powershell}/README.md (97%) diff --git a/README.md b/README.md index 35e366d..6797980 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,6 @@ The course contains the following labs: | [Lab 2 - UI Testing with Selenium and Azure DevOps](ui-testing/README.md) | 45 min | | [Lab 3 - Static code analysis with SonarQube](sonarqube/README.md) | 45 min | | [Lab 4 - Feature Toggles](feature-flag/README.md) | 45 min | -| [Lab 5 - Working with Azure Secure DevOps Kit](secure-devops-kit/README.md) | 45 min | +| [Lab 5 - Working with Azure Security Scanner](secure-devops-kit-adoscanner/README.md) | 45 min | | [Lab 6 - Validating the release with automated Smoke Testing](smoke-testing/README.md) | 45 min | | [Lab 7 - *(Optional)* - Feature branching and branch protection](feature-branching/README.md) | 45 min | diff --git a/images/ado-security-scanner-pipeline-yaml.png b/images/ado-security-scanner-pipeline-yaml.png new file mode 100644 index 0000000000000000000000000000000000000000..c0b4dfd55a0e1bf0b3f7d85c36c0052330d08033 GIT binary patch literal 26305 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 literal 0 HcmV?d00001 diff --git a/images/personal-access-tokens.png b/images/personal-access-tokens.png new file mode 100644 index 0000000000000000000000000000000000000000..cf68434f80f0ff94589b207533dfe92909b2750b GIT binary patch literal 2911 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 `Pipelines` and click on `New pipeline`. +1. Click on Azure Repos Git, select azdotraining1 +1. Select `Starter pipeline`, this will open a yaml file. +1. Change name of the yaml file to `ado-security-scanner-pipeline.yml` by pressing on `azure-pipelines.yml` +1. In the yaml file remove both the script steps. +1. Above trigger add the next piece of code (please make sure that identation is correct) + ```YAML + name: 'ADO Security Scanner' + ``` +1. Change the vmImage towards `windows-latest`. +1. Add the `ADOSecurityScanner@1` task with the following code (please make sure that identation is correct): + ```YAML + steps: + - task: ADOSecurityScanner@1 + displayName: 'ADO Security Scanner' + inputs: + ADOConnectionName: 'ADO security scanner' + ScanFilter: All + BuildNames: '*' + ReleaseNames: '*' + ServiceConnectionNames: '*' + AgentPoolNames: '*' + ``` +1. The end result should look like this: + ![alt text](../images/ado-security-scanner-pipeline-yaml.png "") + +1. Click on `Save and run`, and click on `Save and run` once again. The pipeline will be created and it will automatically start. + +1. Wait till the pipeline is succesfully finished. + +The pipeline will be created and you will get an authorization issue. Click on 'Resources authorized'. + +## Visualize security scan results +After the scan is completed, the results aren't visible yet. To visualize the results we need to create a project dashboard. + +The ADO security scanner extension contains two widgets which can be placed on an ADO dashboard: + +1. **Org Level Security Scan Summary:** Displays org level security control evaluation summary. This Dashboards helps org owners to take actions based on control failures. + +1. **Project Component Security Scan Summary:** Displays project components (Build/Release/Connections) security control evaluation summary. + +To implement these widgets follow the following steps: +1. Inside ADO go to `Overview`, `Dashboards` +1. On this page click on `Add a widget`, this will open a new view with a grid. +1. This grid represents your dashboard and on the right side you see all the widget you can add. +1. First add `ADO Security Org Security View` widget. +1. Then add `ADO Security Project Component` widget. +1. Click on `Done Editing` to save your dashboard. \ No newline at end of file diff --git a/secure-devops-kit/README.md b/secure-devops-kit-powershell/README.md similarity index 97% rename from secure-devops-kit/README.md rename to secure-devops-kit-powershell/README.md index 926c179..8c53a62 100644 --- a/secure-devops-kit/README.md +++ b/secure-devops-kit-powershell/README.md @@ -1,6 +1,6 @@ -# Secure DevOps Kit for Azure +# Secure DevOps Kit for Azure with PowerShell -This lab contains instructions to explore the possibilities of the Micorosoft Secure DevOps kit. This kit contains several tools to scan and monitor security in Azure in the following categories: +This lab contains instructions to explore the possibilities of the Microsoft Secure DevOps kit. This kit contains several tools to scan and monitor security in Azure in the following categories: - Subscription Security - Secure Development - Security in CICD