diff --git a/build-tools/PowerApps_Build Tools_Lab.zip b/build-tools/PowerApps_Build Tools_Lab.zip deleted file mode 100644 index bdebd4b9..00000000 Binary files a/build-tools/PowerApps_Build Tools_Lab.zip and /dev/null differ diff --git a/build-tools/PowerApps_Build Tools_Lab/PowerPlatform_DevOps_Module0.md b/build-tools/PowerApps_Build Tools_Lab/PowerPlatform_DevOps_Module0.md new file mode 100644 index 00000000..b6b69d29 --- /dev/null +++ b/build-tools/PowerApps_Build Tools_Lab/PowerPlatform_DevOps_Module0.md @@ -0,0 +1,82 @@ +# Power Apps Lab +## Module 0: Pre-Lab Setup and Review using Azure DevOps +Last updated: February 15, 2021 +Authors: Per Mikkelsen, Shan McArthur, Evan Chaki, Amin Espinoza + +### Overview + +This hand-on lab will give you an opportunity to get hands on with the best practices to get your app +into source control, generate a managed solution from Source (your build artifact) and finally deploy the +app into another environment. You will need access to 3 Common Data Service environments +(Development, Build & Production) along with Azure DevOps to automate deployments. + +### Pre-Lab Setup: + +You will need to create three environments in your demo or customer tenant. To do this follow these +instructions: + +1. Login to a tenant that you have access to and that minimum 3GB available capacity which is required to create 3 environments. + +2. Go to [https://admin.powerplatform.microsoft.com/](https://admin.powerplatform.microsoft.com/), this will take you to the *admin center*. + +3. Select **environments** in the navigation area. + +![Environments](./assets/module0/img0.jpg) + +4. Select **+ New** to create your first new environment. + +![New environment](./assets/module0/img1.jpg) + +5. The first environment should be named **Your Name – dev**, set the region to **United States (default)**, set the Environment type to **Production** (if available) if not use **Trial**. Select the option to create a database for the new environment. + +![Creation](./assets/module0/img2.jpg) + +6. In next section to create a database you can select a language, and an URL, this URL has to be unique, also select the currency, and select **Yes** when prompted to deploy sample apps and data. + +![Database](./assets/module0/img3.jpg) + +7. Your development environment has been created, follow steps 4 – 6 above to create a second environment called **Your Name – build**, and then finally, create a third environment called **Your Name – prod** – NOTE the third environment can be a trial environment type. + +![Three environments](./assets/module0/img4.jpg) + +8. Now that you have the environments that we will need for this lab, it's time to go to Azure DevOps. Create a DevOps project by going to [https://dev.azure.com](https://dev.azure.com) and selecting **Sign into Azure DevOps**. Select **+ Create project**. + +![New project](./assets/module0/img5.jpg) + +9. Create a new project name called **Your name - DevOps Project**, make it a Private project and select **Create**. + +![Project wizard](./assets/module0/img6.jpg) + +10. Your DevOps project has now been created, please note the URL on the top for your project and bookmark it or save it locally. + +![Project dashboard](./assets/module0/img7.jpg) + +11. You are now ready to begin the ALM Hands-on Lab. + +### ALM Hands-on Lab Overview + +During this lab you will use the account, login, and environments you created in the previous steps. You will get hands-on with the full set of Application Lifecycle Management (ALM) capabilities for the Power Platform. Learn how to use the key concepts that allow customers and partners to manage solutions and deploy them across environments. Additionally, get up to speed with the details of canvas apps and flows in solutions. + +1. Let's get familiar with the environments that you created (in the pre-lab) or were created for you. + +2. Go to [https://admin.powerplatform.microsoft.com/environments](https://admin.powerplatform.microsoft.com/environments) to view the environment you have access to. + +3. You will see your environments, one with dev in the name, one with build in the name and a third with prod in the name. + +![Three environments](./assets/module0/img4.jpg) + +4. We will use these environments as our primary environments during the lab. Your user will have the **System Administrator** Common Data Service role for all environments giving you full access to the environment. + +5. In a new tab open [https://make.powerapps.com](https://make.powerapps.com). + +![Power Apps](./assets/module0/img8.jpg) + +6. In the header, you will see a way to switch environments to move between your different environments. + +![Environments options](./assets/module0/img9.jpg) + +7. When you change to a new environment Power Apps.com will also change to show only content relevant to that environment. Both environments contain a Common Data Service database. This allows you to leverage the Common Data Service solution infrastructure to move app, entities, code and other resources from one environment to another. + +8. Select **Solutions** in the navigation. + +9. Solutions are how customizers and developers author, package, and maintain units of software that extend Dataverse. Customizers and developers distribute solutions so that organizations can use Dataverse to install and uninstall the app(s) defined in the solution. In the next Module you will learn how to create a new solution. \ No newline at end of file diff --git a/build-tools/PowerApps_Build Tools_Lab/PowerPlatform_DevOps_Module1.md b/build-tools/PowerApps_Build Tools_Lab/PowerPlatform_DevOps_Module1.md new file mode 100644 index 00000000..f53b7246 --- /dev/null +++ b/build-tools/PowerApps_Build Tools_Lab/PowerPlatform_DevOps_Module1.md @@ -0,0 +1,77 @@ +# Power Apps Hands-on Lab +## Module 1: Building Basic Model-driven Common Data Service Application for Deployment Using Azure DevOps +Last updated: February 15, 2021 +Authors: Per Mikkelsen, Shan McArthur, Evan Chaki, Amin Espinoza + +In this lab you will be creating a basic Model-driven Dataverse application to use with Module 2 of the lab to automate the application lifecycle management (ALM) of the application. + +1. Navigate to [https://make.powerapps.com](https://make.powerapps.com) and sign in with your credentials. Click the environment selector dropdown the header and select your development environment. + +![Environments](./assets/module1/img0.jpg) + +2. Click the **Solutions** area in the left navigation then click the **New Solution** button to create a new solution. + +![Solutions](./assets/module1/img1.jpg) + +3. In the side panel that appears, enter a name for the application and click the dropdown for the publisher and click the **Add Publisher** option. +**Note**: The solution publisher specifies who developed the app. For this reason, you should create a solution publisher name that's meaningful. Furthermore, the solution publisher includes a prefix, which helps you distinguish system components or components introduced by others and is also a mechanism to help avoid naming collisions. This allows for solutions from different publishers to be installed in an environment with minimal conflicts. + +![Publisher](./assets/module1/img2.jpg) + +4. A new window will pop up. If a window does not pop up, check your popup blocker settings. For the purpose of this lab, enter your **ALMLab** for the display name, name and prefix and click **Save and Close**. + +![New publisher](./assets/module1/img3.jpg) + +5. On the new solution panel, select the publisher that you just created, give the application a version number, and click **Create** to create a new unmanaged solution in the environment. + +![New solution](./assets/module1/img4.jpg) + +6. In the solutions list, select the solution you just created and click the **Edit** button. + +![Edit](./assets/module1/img5.jpg) + +7. Your new solution will be empty, and you need to add components to it. In this lab we will create a custom entity. Click the **New** dropdown from the top navigation and select Table. + +![Table](./assets/module1/img6.jpg) + +8. Enter a display name and plural name. The system will fill out the table name and other fields for you. Click **create** to create the table. + +![New table](./assets/module1/img7.jpg) + +9. Once your table is created, click the solution name again to go back to the solution view to add another component. + +10. Click the New **dropdown**, then App, and **Model-driven app**. + +![New app](./assets/module1/img8.jpg) + +11. Enter an application name and click the **Done** button. + +![Create app](./assets/module1/img9.jpg) + +12. In the application designer, click the **Site Map** to edit it. + +![Site map](./assets/module1/img10.jpg) + +13. In the site map editor, select the **New Subarea** to get its current properties. + +![Site map](./assets/module1/img11.jpg) + +14. Select the Entity dropdown and select your custom table to add to the sitemap. + +![Custom table](./assets/module1/img12.jpg) + +15. Click **Save**, then **Publish**, then **Save and Close** to go back to the application designer. + +![Save](./assets/module1/img13.jpg) + +16. Click **Save** then Validate to validate the application. + +![Validate](./assets/module1/img14.jpg) + +17. You should see one warning. View the warning, then click **Publish** then **Play**. + +![Warning](./assets/module1/img15.jpg) + +18. This will take you to the application so that you can see how it looks. You can use the application and close the tab when you are satisfied. + +![App](./assets/module1/img16.jpg) diff --git a/build-tools/PowerApps_Build Tools_Lab/PowerPlatform_DevOps_Module2.md b/build-tools/PowerApps_Build Tools_Lab/PowerPlatform_DevOps_Module2.md new file mode 100644 index 00000000..016b37a0 --- /dev/null +++ b/build-tools/PowerApps_Build Tools_Lab/PowerPlatform_DevOps_Module2.md @@ -0,0 +1,462 @@ +# Power Platform Build Tools Hands-on Lab +## Module 2: Automating Solution Deployment Using Azure DevOps +Last updated: February 15, 2021 +Authors: Per Mikkelsen, Shan McArthur, Evan Chaki, Amin Espinoza + +## Lab Scenario +In this hands-on lab, you will create an Azure DevOps Project, setup permissions and create the required pipelines to automatically export your app (as unmanaged solution) from a development environment, generate a build artifact (managed solution) and finally deply the app into production. The lab will also introduce you to Microsoft Power Platform Build Tools. + +## Create an Azure DevOps Project +We are going to use Azure DevOps for both source code storage, build and deployment automation. You can use any automated source control and build automation tools using the same principles. Your configuration data should be exported from a development environment, processed by Package Deployer, and checked into source control. + +1. Log into [dev.azure.com](https://dev.azure.com/) with your credentials and click on your organization in the left panel. Follow the instructions to create a project. + +![DevOps](./assets/module2/img0.jpg) + +2. When the project is completed, you will need to create a Repo to hold the source code. Click on the **Repos** link in the left navigation. + +![Repos](./assets/module2/img1.jpg) + +3. Initialize the repo with the default README by clicking the **Initialize** button. + +![README](./assets/module2/img2.jpg) + +### Install and enable the Azure DevOps Extensions for Power Platform + +4. On the upper right corner close to your profile icon, you can see a **bag icon**, click it and then select the option **Browse marketplace**. + +![Extensions](./assets/module2/img3.jpg) + +5. This will redirect you to the Azure DevOps marketplace. Search for **Power Platform** and select the **Power Platform Build Tools**. Note that there are great community options too. + +![Marketplace](./assets/module2/img4.jpg) + +6. Click **Get it free**. + +![Install](./assets/module2/img5.jpg) + +7. Click **Install**. + +![Tools](./assets/module2/img6.jpg) + +8. Click **Proceed to organization**. + +![Organization](./assets/module2/img7.jpg) + +### Configure Azure DevOps Permissions for Build Service Account + +The build pipelines that we set up later will be exporting files from an org and checking them into your source code repo. This is not a default permission of Azure DevOps, so we need to configure the appropriate permissions for the pipeline to function properly. + +9. Click the **Project Settings** icon on the lower left of the screen and click the **Repositories** link int the fly out menu. Select the repository in your project and go to the **Permissions** tab. Type in **Project Collection Build Service** and select it (select the project collection with the username appended). + +![Permissions](./assets/module2/img8.jpg) + +10. The setting for the user is displayed. Select Allow for **Contribute** and ensure that the green checkbox is displayed. + +![Contributor](./assets/module2/img9.jpg) + +### Build Pipeline 1: Create Export from Dev + +The first pipeline you wil create will export your solution from your development environment as an unmanaged solution, unpack it and check it into source control (your repo). + +11. Click the **Create Pipeline** button. + +![Pipeline](./assets/module2/img10.jpg) + +12. Click **use the classic editor** link to create a pipeline. + +![Pipeline](./assets/module2/img11.jpg) + +13. Leave default values as is and click **Continue**. + +![Values](./assets/module2/img12.jpg) + +14. Select **Empty job** to create an empty job. + +![Job](./assets/module2/img13.jpg) + +15. Select **Agent job 1** and enable the **Allow scripts to access the OAuth token** option. + +![Job](./assets/module2/img14.jpg) + +16. Name the pipeline **Create Export from Dev** and click Save. Changes to your pipeline are also checked into source control so you will be prompted to select the folder and type a comment before saving. + +![Name](./assets/module2/img15.jpg) + +17. You are now ready to start using the Power Platform Build Tools tasks for Azure DevOps in your pipeline. Select **Add a task to Agent job 1**. + +![Agent](./assets/module2/img16.jpg) + +18. The very first task you will create is a task that installs the required tools in the agent. Search for **Power Platform Tool** + +![Install](./assets/module2/img17.jpg) + +19. Select **Add** under the Power Platform Tool Installer task. + +![Add](./assets/module2/img18.jpg) + +20. This will add the Tool Installer task to the Pipeline. No additional configuration is required for this task. + +![Task](./assets/module2/img19.jpg) + +### Export Solution as Unmanaged + +Your unmanaged solution is your source code for your configuration. You should export your solution as unmanaged to check it into source control. + +21. The next task you will add is a task that exports the unmanaged solution from development environment. Search for **Power Platform Export Solution**. + +![Task](./assets/module2/img20.jpg) + +22. Select the task and click **Add**. + +![Export](./assets/module2/img21.jpg) + +23. After adding the Power Platform Export Solution task, you will notice that additional configuration is required. Click on the Power Platform Export Solution (in the pipeline view). + +![Export](./assets/module2/img22.jpg) + +24. This will open the task configuration page: + +* **Display name**: Is inherited from Build task itself. +* **Application type**: Two types of authentications are available: + * **Username/password**: Simple to setup but does not support multi factor authentication (MFA). This is what we will use for this lab. + * **Service Principal/client secret**: Recommended and supports MFA. This is harder to setup as it requires creation of the Service principal and client secret in the Azure Portal as well as creation of the application user in the Power Platform environment. Not used in this lab but anyone familiar with setting this up can use this option instead throughout the rest of the lab. +* **Service Connection**: This is the connection to the environment that you want to export the solution from. We will define this in the next step. +* **Solution name**: This is the mane of the solution you want to export. +* **Solution output file**: This specifies the path and filename of the generated solution zip. +* **Export as Managed solution**: By default, solutions are exported as unmanaged (for development purposes). Setting this flag exports the solution as Managed (used fro deployment to any downstream environment such as Test, Pre-prod, and Production). + +25. Select **Username/password** under **Authentication type**. Click on **Manage** next to Service connection. + +![Export](./assets/module2/img23.jpg) + +26. This will bring up the connection configuration required to export the solution from the development environment (user-xx-dev). Click **Create service connection**. + +![Service](./assets/module2/img24.jpg) + +27. This will bring up the New Service connection screen. Select **Generic** from the list of connections and click **Next**. + +![Generic](./assets/module2/img25.jpg) + +28. Fill the required details: + + * **Server URL**: https://.crm.dynamics.com. This should be the URL to your development environment. + * **Username**: Username of a user with admin access to the environment. + * **Password**: Associated password for the user. + * **Service Connection Name**: This name will be used to identify which environment to connect to the Build tasks. + * **Description**: Give the connection a description that helps you identify the environment the service connection connects to. + +A sample connection is shown below. + +![Service](./assets/module2/img26.jpg) + +29. Click **Save**. You will be in the pipeline service connection area in your project. +30. Close the browser tab and go back to the previous tab where tou were building the pipeline. Select the Service Connection that created in the previous step. + +![Manage](./assets/module2/img27.jpg) + +31. Fill out the remaining details: + * Solution Name: **$(SolutionName) + **Note**: This will use the input parameter that you specify when running (queuing) the build pipeline. + * Solution Output File: **$(Build.ArtifactStagingDirectory)\$(SolutionName).zip** + **Note** This will add the file to your repo and retain the existing solution name. + +![Solution](./assets/module2/img28.jpg) + +32. Save the Build Pipeline by clicking **Save & Queue**, then save from the top command bar and clicking **Save** on the dialog. + +### Unpack Solution + +The solution file that is exported from the server is a zip file with consolidated configuration files. These initial files are not suitable for source code management as they are not structured to make it feasible for source code management systems to properly do differencing on the files and capture the changes you want to commit to source control. You need to **unpack** the solution files to make then suitable for source control storage and processing. + +33. Click **Ad a task**, then search for **Power Platform Unpack**. + +![Unpack](./assets/module2/img29.jpg) + +34. Add the Power Platform Unpack Solution task to the pipeline. + +![Add](./assets/module2/img30.jpg) + +35. Open the task to configure settings for the task with the following details: + +* **Solution Input File**: $(Build.ArtifactStagingDirectory)\$(SolutionName).zip +* **Target folder to unpack solution**: $(Build.SourcesDirectory)\$(SolutionName) +* **Type of sulution**: Unmanaged. + +![Unpack](./assets/module2/img31.jpg) + +36. Save the updated pipeline. + +![Save](./assets/module2/img32.jpg) + +37. You can leave the comment blank. + +![Comment](./assets/module2/img33.jpg) + +### Commit Solution Files to Source Control + +Next, we are going to add some scripts as a next pipeline step to commit the solution to the repo. The reason we allowed for scripts to access the OAuth token when we started building the pipeline was to allow for this next step. + +38. Add a Command Line task to your pipeline by clicking the **+** button, searching for **command**, and adding it. + +![Command](./assets/module2/img34.jpg) + +39. Select the task, give the task a display name and copy the following script into the script textbox: + +```bash +echo commit all changes +git config user.email "userXXX@wrkdevops.onmicrosoft.com" +git config user.name "Automatic Build" +git checkout main +git add --all +git commit -m "solution init" +echo push code to new repo +git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" push origin main +``` + +40. Screenshot provided below: + +![Script](./assets/module2/img35.jpg) + +41. Save the task (Save & queue > Save). + +### Test your Pipeline + +42. Select **Queue** to execute your pipeline. + +![Queue](./assets/module2/img36.jpg) + +43. Leave the defaults and click **Run**. + +![Run](./assets/module2/img37.jpg) + +44. You can see your build has been queued. You can navigate to it directly in the notification on this screen or using the **Builds** area in the left navigation. + +![Task](./assets/module2/img38.jpg) + +45. The desired outcome would be a series of green checkboxes, but if you have some issues with your pipeline, you should see the errors in the log. You can click on those for more details if you like. In our case, we have not defined our solution name variable yet, so the export step will fail. This was done intentionally to show you what a failure looks like and how to look at the details. + +![Fail](./assets/module2/img39.jpg) + +46. Go back to your pipeline by selecting the arrow next to the pipeline name on the top of the screen. + +![Back](./assets/module2/img40.jpg) + +47. Select the three dots button and then **Edit pipeline**. + +![Edit](./assets/module2/img41.jpg) + +48. On the pipelines screen, switch to the Variables tab and click **Add** to add a new variable. + +49. Use **SolutionName** for the name of the variable and add your unique solution name as a value. It should be your solution's name form Module1 (point 3). + +![Edit](./assets/module2/img42.jpg) + +50. Click **Save and queue** and observe the results. Fix any issues until you get a successful build. + +![Success](./assets/module2/img43.jpg) + +**Note** You can get more details about any issues found by setting the variable **debug** to **true**. + +![Success](./assets/module2/img44.jpg) + +51. Let's go look at what it added to your source control now. Click **Repos and Files** and notice that it added a new folder that contains your solution files. + +![Repos](./assets/module2/img45.jpg) + +## Pipeline 2: Build your Managed Solution + +Your unmanaged solution is checked into source control, but you need to have a managed solution to deploy to other environments such as test and production. To obtain your managed solution to deploy to other environments such as test and production. To obtain your managed solution, you should ue a **Just-In-Time**(JIT) build environment where you would import your unmanaged solution files then export them as managed. These managed solution files will not be checked into source control buy will be stored as a build artifact in your pipeline. This will make them available to be deployed in your release pipeline. + +52. Navigate to your pipelines and add a new build pipeline. + +![Repos](./assets/module2/img46.jpg) + +53. Click **Use the classic editor** link to build the pipeline without YAML. On the next screen use the defaults and click **Continue**. Finally, click on the **Empty job**link on the template selection page shown below. + +![Job](./assets/module2/img47.jpg) + +54. Name the pipeline **Build Managed Solution** and Save it. This will give you an empty pipeline. + +![Job](./assets/module2/img48.jpg) + +55. A small note on navigation. If you have problems seeing your newly created pipeline, you can see all the pipelines you have created in the **All** tab. + +![Pipelines](./assets/module2/img49.jpg) + +56. In your empty pipeline, add the Power Platform Tool Installer task. + +![Add](./assets/module2/img50.jpg) + +57. Add the Power Platform Pack Solution task. + +![Add](./assets/module2/img51.jpg) + +58. Configure the pack solution task with the following parameters: + +* **Source folder of Solution to Pack**: $(Build.SourcesDirectory)\$(SolutionName) +* **Solution Output File**: $(Build.ArtifactStagingDirectory)\$(SolutionName).zip + +![Add](./assets/module2/img52.jpg) + +59. On the pipeline screen, switch to the variables tab in the pipeline and add the SolutionName variables with your unique solution name. This should be your solution name from Module 1. Click **Save** (through the **Save & Queue dropdown). + +![Save](./assets/module2/img53.jpg) + +60. The next task will be to import the solution into your build server, so we need to add a connection to that environment before we add and configure the task to do the import. Click the **Project settings** link in the lower left of the screen and navigate to **Service connections** then click **New service connection**. + +![Connection](./assets/module2/img54.jpg) + +61. Select **Generic** on the New Service connection page and click **Next**. + +![Connection](./assets/module2/img55.jpg) + +62. Fill out the required details: + +* **Server URL**: https://.crm.dynamics.com. This should be the URL to your build environment. +* **Username**: Username of a user with administrator access to the environment. +* **Password**: Associated password for the user +* **Service connection name**: This name will be used to identify which environment to connect to in the Build tasks. +* **Description**: Give the connection a description that helps you identify the environment the service connection connects to. + +The sample connection is shown below. + +![Generic](./assets/module2/img56.jpg) + +**Note**: If you forgot to record the server URL for your build environment, simple visit [https://admin.powerplatform.microsoft.com/](https://admin.powerplatform.microsoft.com/) click the environment. This will open another tab displaying the environment URL. Make sure it is your build environment. + +![Environments](./assets/module2/img57.jpg) + +![Environments](./assets/module2/img58.jpg) + +63. Click **Save** You will be in the pipeline service connections area in your project. + +64. Navigate back to your Build Management Solution pipeline (if you don't see the pipeline go to step 55 on how to view all the pipelines). Click **Edit**, and then add the **Power Platform Import Solution** task to take the solution file and import into your build environment. + +![Import](./assets/module2/img59.jpg) + +65. Select the connection you just added to your build server and provide the following for the solution input file: $(Build.ArtifactStagingDirectory)\$(SolutionName).zip. + +![Select](./assets/module2/img60.jpg) + +66. Add a task to export the solution file as a managed file. + +![Add](./assets/module2/img61.jpg) + +67. Select your build environment, check the **Export as managed solution** checkbox and enter the following details: + +* **Solution name**: $(SolutionName) +* **Solution Output File**: $(Build.ArtifactStagingDirectory)\$(SolutionName)_managed.zip + +![Add](./assets/module2/img62.jpg) + +68. The files at this stage will be in the build agent and we need to publish it as a build artifact. Add a new pipeline step **Publish Pipeline Artifact**. + +![Publish](./assets/module2/img63.jpg) + +69. Leave the predefined values as-is and click **Save and queue**: + +![Publish](./assets/module2/img64.jpg) + +70. Monitor it until it is successful. + +![Monitor](./assets/module2/img65.jpg) + +## Release Pipeline: Release to Production + +71. The next task will be to import the solution into your production server, so we need to add a connection to that environment before we add and configure the task to do the import. Click the **Project seetings** link in the lower left of the screen and navigate to **Service connections**, then click *New Service Connection**. + +![Connection](./assets/module2/img66.jpg) + +72. Select **Generic** on the New service connection page and click **Next**. + +![Connection](./assets/module2/img55.jpg) + +73. Fill out the required details: + +* **Server URL**: https://.crm.dynamics.com. This should be the URL to your build environment. +* **Username**: Username of a user with administrator access to the environment. +* **Password**: Associated password for the user +* **Service connection name**: This name will be used to identify which environment to connect to in the Build tasks. +* **Description**: Give the connection a description that helps you identify the environment the service connection connects to. + +The sample connection is shown below. + +![Connection](./assets/module2/img67.jpg) + +74. Click **Save**. You will be in the pipeline service connections area in your project. + +75. To deploy a build, you will configure a release pipeline. Navigate to the release pipelines. You likely won’t have one yet, so click on the **New pipeline** button. + +![Release](./assets/module2/img68.jpg) + +76. Click on *Empty job** when selecting a template. + +![Empty](./assets/module2/img69.jpg) + +77. Give it a stage name and then close the stage dialogue. + +![Stage](./assets/module2/img70.jpg) + +78. Next, we need to add the artifact that will be used in the deployment. Click the **Add** button in the Artifacts list. In the **Add an artifact** screen, select your **Build Managed Solution** from the source build pipeline. To make it easier to not have to deal with encoding spaces in filenames, change your source alias to something simple, like **Build**. Leave the rest as default. Click **Add** when completed. + +![Artifact](./assets/module2/img71.jpg) + +79. Switch to the **Tasks** view and click the plus button to add a new task. + +![Task](./assets/module2/img72.jpg) + +80. In the tasks view, click the **+** button to add a new task. + +![Add](./assets/module2/img73.jpg) + +81. Add the Power Platform Tool Installer task. + +![Install](./assets/module2/img74.jpg) + +82. Add the **Power Platform Import Solution** task to the pipeline. + +![Import](./assets/module2/img75.jpg) + +83. Configure the solution import to use the production environment connection and the following for solution input file: + +``` +$(System.DefaultWorkingDirectory)/Build/drop/$(SolutionName)_managed.zip +``` +Click **Save**. + +![File](./assets/module2/img76.jpg) + +84. Switch to the **Variables** tab and add a variable named **SolutionName** and the unique name of the solution to import. If you are using the solution created in lab 1, the solution name should be that. Click **Save** an then **Ok** in the next dialog. + +![Save](./assets/module2/img77.jpg) + +85. Click the **Create release** button. This functions like Queuing a build pipeline, only for release pipelines. + +![Release](./assets/module2/img78.jpg) + +86. Click **Create** on the popup panel. + +![Create](./assets/module2/img79.jpg) + +87. Monitor your release until it is succeeded, or troubleshoot if it is not successful. + +![Succeed](./assets/module2/img80.jpg) + +88. For final confirmation, log into your production system and see your application! + +![App](./assets/module2/img81.jpg) + +### Terms of use + +© 2020 Microsoft Corporation. All rights reserved. +By using this demo/lab, you agree to the following terms: The technology/functionality described in this demo/lab is provided by Microsoft Corporation for purposes of obtaining your Power Platform ALM Workshop: Module 2 66 feedback and to provide you with a learning experience. You may only use the demo/lab to evaluate such technology features and functionality and provide feedback to Microsoft. You may not use it for any other purpose. You may not modify, copy, distribute, transmit, display, perform, reproduce, publish, license, create derivative works from, transfer, or sell this demo/lab or any portion thereof. COPYING OR REPRODUCTION OF THE DEMO/LAB (OR ANY PORTION OF IT) TO ANY OTHER SERVER OR LOCATION FOR FURTHER REPRODUCTION OR REDISTRIBUTION IS EXPRESSLY PROHIBITED. THIS DEMO/LAB PROVIDES CERTAIN SOFTWARE TECHNOLOGY/PRODUCT FEATURES AND FUNCTIONALITY, INCLUDING POTENTIAL NEW FEATURES AND CONCEPTS, IN A SIMULATED ENVIRONMENT WITHOUT COMPLEX SET-UP OR +INSTALLATION FOR THE PURPOSE DESCRIBED ABOVE. THE TECHNOLOGY/CONCEPTS REPRESENTED IN THIS DEMO/LAB MAY NOT REPRESENT FULL FEATURE FUNCTIONALITY AND MAY NOT WORK THE WAY A FINAL VERSION MAY WORK. WE ALSO MAY NOT RELEASE A FINAL VERSION OF SUCH FEATURES OR CONCEPTS. YOUR EXPERIENCE WITH USING SUCH FEATURES AND FUNCTIONALITY IN A PHYSICAL ENVIRONMENT MAY ALSO BE DIFFERENT. + +### FEEDBACK + +If you give feedback about the technology features, functionality and/or concepts described in this demo/lab to Microsoft, you give to Microsoft, without charge, the right to use, share and commercialize your feedback in any way and for any purpose. You also give to third parties, without charge, any patent rights needed for their products, technologies and services to use or interface with any specific parts of a Microsoft software or service that includes the feedback. You will not give feedback that is subject to a license that requires Microsoft to license its software or documentation to third parties because we include your feedback in them. These rights survive this agreement. MICROSOFT CORPORATION HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS WITH REGARD TO THE DEMO/LAB, INCLUDING ALL WARRANTIES AND CONDITIONS OF MERCHANTABILITY, WHETHER EXPRESS, IMPLIED OR STATUTORY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. MICROSOFT DOES NOT MAKE ANY ASSURANCES OR REPRESENTATIONS WITH REGARD TO THE ACCURACY OF THE RESULTS, OUTPUT THAT DERIVES FROM USE OF DEMO/ LAB, OR SUITABILITY OF THE INFORMATION CONTAINED IN THE DEMO/LAB FOR ANY PURPOSE. + +### DISCLAIMER + +This demo/lab contains only a portion of new features and enhancements in. Some of the features might change in future releases of the product. In this demo/lab, you will learn about some, but not all, new features. diff --git a/build-tools/PowerApps_Build Tools_Lab/Terms_of_use.md b/build-tools/PowerApps_Build Tools_Lab/Terms_of_use.md new file mode 100644 index 00000000..0858f60b --- /dev/null +++ b/build-tools/PowerApps_Build Tools_Lab/Terms_of_use.md @@ -0,0 +1,36 @@ +# Terms of use + +© 2020 Microsoft Corporation. All rights reserved. +By using this demo/lab, you agree to the following terms: The technology/functionality +described in this demo/lab is provided by Microsoft Corporation for purposes of obtaining your +feedback and to provide you with a learning experience. You may only use the demo/lab to +evaluate such technology features and functionality and provide feedback to Microsoft. You +may not use it for any other purpose. You may not modify, copy, distribute, transmit, display, +perform, reproduce, publish, license, create derivative works from, transfer, or sell this +demo/lab or any portion thereof. COPYING OR REPRODUCTION OF THE DEMO/LAB (OR ANY +PORTION OF IT) TO ANY OTHER SERVER OR LOCATION FOR FURTHER REPRODUCTION OR +REDISTRIBUTION IS EXPRESSLY PROHIBITED. THIS DEMO/LAB PROVIDES CERTAIN SOFTWARE +TECHNOLOGY/PRODUCT FEATURES AND FUNCTIONALITY, INCLUDING POTENTIAL NEW +FEATURES AND CONCEPTS, IN A SIMULATED ENVIRONMENT WITHOUT COMPLEX SET-UP OR +INSTALLATION FOR THE PURPOSE DESCRIBED ABOVE. THE TECHNOLOGY/CONCEPTS +REPRESENTED IN THIS DEMO/LAB MAY NOT REPRESENT FULL FEATURE FUNCTIONALITY AND +MAY NOT WORK THE WAY A FINAL VERSION MAY WORK. WE ALSO MAY NOT RELEASE A FINAL +VERSION OF SUCH FEATURES OR CONCEPTS. YOUR EXPERIENCE WITH USING SUCH FEATURES +AND FUNCTIONALITY IN A PHYSICAL ENVIRONMENT MAY ALSO BE DIFFERENT. + +### Feedback + +If you give feedback about the technology features, functionality and/or concepts described in +this demo/lab to Microsoft, you give to Microsoft, without charge, the right to use, share and +commercialize your feedback in any way and for any purpose. You also give to third parties, +without charge, any patent rights needed for their products, technologies and services to use or +interface with any specific parts of a Microsoft software or service that includes the feedback. +You will not give feedback that is subject to a license that requires Microsoft to license its +software or documentation to third parties because we include your feedback in them. These +rights survive this agreement. MICROSOFT CORPORATION HEREBY DISCLAIMS ALL WARRANTIES +AND CONDITIONS WITH REGARD TO THE DEMO/LAB, INCLUDING ALL WARRANTIES AND +CONDITIONS OF MERCHANTABILITY, WHETHER EXPRESS, IMPLIED OR STATUTORY, FITNESS FOR +A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. MICROSOFT DOES NOT MAKE ANY +ASSURANCES OR REPRESENTATIONS WITH REGARD TO THE ACCURACY OF THE RESULTS, +OUTPUT THAT DERIVES FROM USE OF DEMO/ LAB, OR SUITABILITY OF THE INFORMATION +CONTAINED IN THE DEMO/LAB FOR ANY PURPOSE. \ No newline at end of file diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module0/img0.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module0/img0.jpg new file mode 100644 index 00000000..05367d12 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module0/img0.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module0/img1.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module0/img1.jpg new file mode 100644 index 00000000..53082ace Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module0/img1.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module0/img10.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module0/img10.jpg new file mode 100644 index 00000000..0c1c4f26 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module0/img10.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module0/img2.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module0/img2.jpg new file mode 100644 index 00000000..5869ac90 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module0/img2.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module0/img3.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module0/img3.jpg new file mode 100644 index 00000000..dc37507f Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module0/img3.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module0/img4.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module0/img4.jpg new file mode 100644 index 00000000..29897900 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module0/img4.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module0/img5.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module0/img5.jpg new file mode 100644 index 00000000..ec467dd8 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module0/img5.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module0/img6.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module0/img6.jpg new file mode 100644 index 00000000..31b55aef Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module0/img6.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module0/img7.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module0/img7.jpg new file mode 100644 index 00000000..8aa15030 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module0/img7.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module0/img8.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module0/img8.jpg new file mode 100644 index 00000000..10227919 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module0/img8.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module0/img9.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module0/img9.jpg new file mode 100644 index 00000000..9de08389 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module0/img9.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module1/img0.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img0.JPG new file mode 100644 index 00000000..f92fed23 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img0.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module1/img1.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img1.jpg new file mode 100644 index 00000000..c4049555 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img1.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module1/img10.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img10.JPG new file mode 100644 index 00000000..f98f972a Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img10.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module1/img11.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img11.jpg new file mode 100644 index 00000000..634b08f6 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img11.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module1/img12.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img12.jpg new file mode 100644 index 00000000..28ea13a9 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img12.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module1/img13.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img13.JPG new file mode 100644 index 00000000..8a06289d Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img13.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module1/img14.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img14.jpg new file mode 100644 index 00000000..a45960b8 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img14.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module1/img15.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img15.JPG new file mode 100644 index 00000000..ad736932 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img15.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module1/img16.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img16.JPG new file mode 100644 index 00000000..9213b103 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img16.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module1/img2.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img2.jpg new file mode 100644 index 00000000..2b2afb7a Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img2.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module1/img3.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img3.jpg new file mode 100644 index 00000000..a9970074 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img3.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module1/img4.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img4.jpg new file mode 100644 index 00000000..5e009948 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img4.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module1/img5.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img5.jpg new file mode 100644 index 00000000..fc8a7a89 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img5.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module1/img6.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img6.jpg new file mode 100644 index 00000000..b38aae45 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img6.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module1/img7.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img7.jpg new file mode 100644 index 00000000..3da75b04 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img7.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module1/img8.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img8.jpg new file mode 100644 index 00000000..e557812c Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img8.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module1/img9.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img9.jpg new file mode 100644 index 00000000..5001c2a0 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module1/img9.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img0.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img0.jpg new file mode 100644 index 00000000..3e64c72e Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img0.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img1.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img1.jpg new file mode 100644 index 00000000..2a5cacd9 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img1.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img10.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img10.jpg new file mode 100644 index 00000000..938ae08a Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img10.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img11.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img11.jpg new file mode 100644 index 00000000..a39e677d Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img11.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img12.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img12.JPG new file mode 100644 index 00000000..f4a61bd4 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img12.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img13.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img13.jpg new file mode 100644 index 00000000..e50c09ec Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img13.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img14.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img14.jpg new file mode 100644 index 00000000..975c4273 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img14.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img15.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img15.jpg new file mode 100644 index 00000000..96d2b5b5 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img15.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img16.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img16.jpg new file mode 100644 index 00000000..b8b2e6fc Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img16.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img17.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img17.JPG new file mode 100644 index 00000000..760ec687 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img17.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img18.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img18.JPG new file mode 100644 index 00000000..d7fe8d8e Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img18.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img19.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img19.JPG new file mode 100644 index 00000000..f209a741 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img19.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img2.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img2.JPG new file mode 100644 index 00000000..7e912d60 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img2.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img20.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img20.JPG new file mode 100644 index 00000000..618159c8 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img20.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img21.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img21.jpg new file mode 100644 index 00000000..e8d69b83 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img21.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img22.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img22.JPG new file mode 100644 index 00000000..28abbde8 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img22.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img23.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img23.jpg new file mode 100644 index 00000000..10b3b21c Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img23.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img24.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img24.JPG new file mode 100644 index 00000000..d550b7d6 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img24.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img25.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img25.JPG new file mode 100644 index 00000000..ea539542 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img25.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img26.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img26.JPG new file mode 100644 index 00000000..676f35ae Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img26.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img27.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img27.jpg new file mode 100644 index 00000000..0fc00e96 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img27.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img28.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img28.jpg new file mode 100644 index 00000000..91ab5cc0 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img28.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img29.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img29.JPG new file mode 100644 index 00000000..e31e5c78 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img29.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img3.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img3.jpg new file mode 100644 index 00000000..81d0a6da Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img3.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img30.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img30.jpg new file mode 100644 index 00000000..251a5d10 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img30.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img31.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img31.jpg new file mode 100644 index 00000000..2a901325 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img31.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img32.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img32.jpg new file mode 100644 index 00000000..773a706b Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img32.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img33.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img33.jpg new file mode 100644 index 00000000..3d7be906 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img33.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img34.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img34.JPG new file mode 100644 index 00000000..c8136f07 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img34.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img35.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img35.jpg new file mode 100644 index 00000000..c94e76e8 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img35.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img36.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img36.jpg new file mode 100644 index 00000000..c266f0c6 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img36.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img37.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img37.jpg new file mode 100644 index 00000000..5eca7231 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img37.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img38.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img38.JPG new file mode 100644 index 00000000..0590268c Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img38.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img39.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img39.JPG new file mode 100644 index 00000000..02a4c818 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img39.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img4.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img4.JPG new file mode 100644 index 00000000..85cbceef Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img4.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img40.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img40.jpg new file mode 100644 index 00000000..de1f5bac Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img40.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img41.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img41.jpg new file mode 100644 index 00000000..6d18c769 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img41.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img42.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img42.jpg new file mode 100644 index 00000000..20a3a79d Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img42.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img43.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img43.JPG new file mode 100644 index 00000000..4b1421ce Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img43.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img44.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img44.jpg new file mode 100644 index 00000000..39a10768 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img44.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img45.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img45.JPG new file mode 100644 index 00000000..2d278236 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img45.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img46.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img46.jpg new file mode 100644 index 00000000..ef0a257a Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img46.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img47.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img47.jpg new file mode 100644 index 00000000..082ec7b8 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img47.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img48.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img48.jpg new file mode 100644 index 00000000..562d3785 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img48.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img49.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img49.jpg new file mode 100644 index 00000000..1eb4f3ec Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img49.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img5.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img5.jpg new file mode 100644 index 00000000..ee9d86af Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img5.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img50.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img50.jpg new file mode 100644 index 00000000..5baadc20 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img50.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img51.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img51.jpg new file mode 100644 index 00000000..45588558 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img51.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img52.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img52.jpg new file mode 100644 index 00000000..3a616e62 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img52.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img53.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img53.jpg new file mode 100644 index 00000000..35f93102 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img53.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img54.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img54.jpg new file mode 100644 index 00000000..cd9d582e Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img54.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img55.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img55.jpg new file mode 100644 index 00000000..24a4d0bf Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img55.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img56.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img56.jpg new file mode 100644 index 00000000..260dd9bb Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img56.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img57.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img57.jpg new file mode 100644 index 00000000..a75086a9 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img57.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img58.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img58.jpg new file mode 100644 index 00000000..56bd05e9 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img58.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img59.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img59.jpg new file mode 100644 index 00000000..27b6922f Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img59.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img6.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img6.JPG new file mode 100644 index 00000000..c7b06b43 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img6.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img60.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img60.jpg new file mode 100644 index 00000000..d874d929 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img60.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img61.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img61.JPG new file mode 100644 index 00000000..0e589075 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img61.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img62.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img62.jpg new file mode 100644 index 00000000..001760df Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img62.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img63.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img63.JPG new file mode 100644 index 00000000..c92ba495 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img63.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img64.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img64.jpg new file mode 100644 index 00000000..eb9c42db Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img64.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img65.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img65.JPG new file mode 100644 index 00000000..4e51f8e3 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img65.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img66.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img66.jpg new file mode 100644 index 00000000..18f08cdb Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img66.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img67.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img67.JPG new file mode 100644 index 00000000..71a65e3e Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img67.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img68.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img68.jpg new file mode 100644 index 00000000..29a0a4b9 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img68.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img69.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img69.jpg new file mode 100644 index 00000000..f07c3b7b Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img69.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img7.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img7.jpg new file mode 100644 index 00000000..250b6940 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img7.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img70.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img70.JPG new file mode 100644 index 00000000..21c019ed Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img70.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img71.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img71.jpg new file mode 100644 index 00000000..ec6ebf11 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img71.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img72.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img72.jpg new file mode 100644 index 00000000..4ce01658 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img72.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img73.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img73.jpg new file mode 100644 index 00000000..d5a40fab Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img73.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img74.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img74.jpg new file mode 100644 index 00000000..74b6c9b8 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img74.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img75.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img75.jpg new file mode 100644 index 00000000..d5d02c69 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img75.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img76.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img76.jpg new file mode 100644 index 00000000..d4aa524e Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img76.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img77.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img77.jpg new file mode 100644 index 00000000..937b1d9f Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img77.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img78.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img78.jpg new file mode 100644 index 00000000..16581f52 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img78.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img79.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img79.JPG new file mode 100644 index 00000000..751398d6 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img79.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img8.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img8.jpg new file mode 100644 index 00000000..74b3a2e5 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img8.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img80.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img80.jpg new file mode 100644 index 00000000..e2b34d18 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img80.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img81.jpg b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img81.jpg new file mode 100644 index 00000000..abed190d Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img81.jpg differ diff --git a/build-tools/PowerApps_Build Tools_Lab/assets/module2/img9.JPG b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img9.JPG new file mode 100644 index 00000000..bb5919fe Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/assets/module2/img9.JPG differ diff --git a/build-tools/PowerApps_Build Tools_Lab/docs/PowerPlatform_DevOps_Module0.pdf b/build-tools/PowerApps_Build Tools_Lab/docs/PowerPlatform_DevOps_Module0.pdf new file mode 100644 index 00000000..70535efc Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/docs/PowerPlatform_DevOps_Module0.pdf differ diff --git a/build-tools/PowerApps_Build Tools_Lab/docs/PowerPlatform_DevOps_Module1.pdf b/build-tools/PowerApps_Build Tools_Lab/docs/PowerPlatform_DevOps_Module1.pdf new file mode 100644 index 00000000..6462eb43 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/docs/PowerPlatform_DevOps_Module1.pdf differ diff --git a/build-tools/PowerApps_Build Tools_Lab/docs/PowerPlatform_DevOps_Module2.pdf b/build-tools/PowerApps_Build Tools_Lab/docs/PowerPlatform_DevOps_Module2.pdf new file mode 100644 index 00000000..cbda9f73 Binary files /dev/null and b/build-tools/PowerApps_Build Tools_Lab/docs/PowerPlatform_DevOps_Module2.pdf differ