From 387ca1a18e0ef2cd88d5cbd3da5cda81664ebc4f Mon Sep 17 00:00:00 2001 From: svivekan Date: Fri, 31 May 2019 10:43:59 +0100 Subject: [PATCH 1/9] .gitignore is now working --- .idea/MLOpsPython.iml | 11 + .idea/encodings.xml | 4 + .idea/misc.xml | 4 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + .idea/workspace.xml | 12 + azure-pipelines.yml | 136 +-- docs/getting_started.md | 414 ++++---- release-pipelines/releasedeployment.json | 1160 +++++++++++----------- 9 files changed, 900 insertions(+), 855 deletions(-) create mode 100644 .idea/MLOpsPython.iml create mode 100644 .idea/encodings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml diff --git a/.idea/MLOpsPython.iml b/.idea/MLOpsPython.iml new file mode 100644 index 00000000..67116063 --- /dev/null +++ b/.idea/MLOpsPython.iml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 00000000..15a15b21 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..a2e120dc --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..4c2a0915 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..94a25f7f --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 00000000..96f83c7a --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/azure-pipelines.yml b/azure-pipelines.yml index c3815408..1e2bbc96 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1,68 +1,68 @@ -pool: - vmImage: 'Ubuntu 16.04' -#Your build pipeline references a secret variable named ‘sp_username’. Create or edit the build pipeline for this YAML file, define the variable on the Variables tab, and then select the option to make it secret. See https://go.microsoft.com/fwlink/?linkid=865972 -#Your build pipeline references a secret variable named ‘sp_password’. Create or edit the build pipeline for this YAML file, define the variable on the Variables tab, and then select the option to make it secret. See https://go.microsoft.com/fwlink/?linkid=865972 -#Your build pipeline references a secret variable named ‘sp_tenantid’. Create or edit the build pipeline for this YAML file, define the variable on the Variables tab, and then select the option to make it secret. See https://go.microsoft.com/fwlink/?linkid=865972 -#Your build pipeline references a secret variable named ‘subscription_id’. Create or edit the build pipeline for this YAML file, define the variable on the Variables tab, and then select the option to make it secret. See https://go.microsoft.com/fwlink/?linkid=865972 - -variables: -- group: AzureKeyVaultSecrets - -trigger: -- master -- releases/* -- develop - -steps: -- task: UsePythonVersion@0 - inputs: - versionSpec: '3.6' - architecture: 'x64' - -- task: Bash@3 - displayName: 'Install Requirements' - inputs: - targetType: filePath - filePath: 'environment_setup/install_requirements.sh' - workingDirectory: 'environment_setup' - -- script: | - az login --service-principal -u $(spidentity) -p $(spsecret) --tenant $(sptenant) - - displayName: 'Login to Azure' - -- script: | - sed -i 's#"subscription_id": "<>"#"subscription_id": "$(subscriptionid)"#g' aml_config/config.json - - displayName: 'replace subscription value' - -- script: 'pytest tests/unit/data_test.py' - displayName: 'Data Quality Check' - -- script: 'python aml_service/00-WorkSpace.py' - displayName: 'Get or Create Workspace' - -- script: 'python aml_service/03-AttachAmlCluster.py' - displayName: 'Create AML Compute Cluster' - -- script: 'python aml_service/04-AmlPipelines.py' - displayName: 'Create and Test AML Pipeline' - -- script: 'python aml_service/04-AmlPipelines.py --pipeline_action publish' - displayName: 'Publish AML Pipeline as Endpoint' - -- task: CopyFiles@2 - displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)' - inputs: - SourceFolder: '$(Build.SourcesDirectory)' - TargetFolder: '$(Build.ArtifactStagingDirectory)' - Contents: '**' - -- task: PublishBuildArtifacts@1 - displayName: 'Publish Artifact: devops-for-ai' - inputs: - ArtifactName: 'devops-for-ai' - publishLocation: 'container' - pathtoPublish: '$(Build.ArtifactStagingDirectory)' - TargetPath: '$(Build.ArtifactStagingDirectory)' - +pool: + vmImage: 'Ubuntu 16.04' +#Your build pipeline references a secret variable named ‘sp_username’. Create or edit the build pipeline for this YAML file, define the variable on the Variables tab, and then select the option to make it secret. See https://go.microsoft.com/fwlink/?linkid=865972 +#Your build pipeline references a secret variable named ‘sp_password’. Create or edit the build pipeline for this YAML file, define the variable on the Variables tab, and then select the option to make it secret. See https://go.microsoft.com/fwlink/?linkid=865972 +#Your build pipeline references a secret variable named ‘sp_tenantid’. Create or edit the build pipeline for this YAML file, define the variable on the Variables tab, and then select the option to make it secret. See https://go.microsoft.com/fwlink/?linkid=865972 +#Your build pipeline references a secret variable named ‘subscription_id’. Create or edit the build pipeline for this YAML file, define the variable on the Variables tab, and then select the option to make it secret. See https://go.microsoft.com/fwlink/?linkid=865972 + +variables: +- group: AzureKeyVaultSecrets + +trigger: +- master +- releases/* +- develop + +steps: +- task: UsePythonVersion@0 + inputs: + versionSpec: '3.6' + architecture: 'x64' + +- task: Bash@3 + displayName: 'Install Requirements' + inputs: + targetType: filePath + filePath: 'environment_setup/install_requirements.sh' + workingDirectory: 'environment_setup' + +- script: | + az login --service-principal -u $(spidentity) -p $(spsecret) --tenant $(sptenant) + + displayName: 'Login to Azure' + +- script: | + sed -i 's#"subscription_id": "<>"#"subscription_id": "$(subscriptionid)"#g' aml_config/config.json + + displayName: 'replace subscription value' + +- script: 'pytest tests/unit/data_test.py' + displayName: 'Data Quality Check' + +- script: 'python aml_service/00-WorkSpace.py' + displayName: 'Get or Create Workspace' + +- script: 'python aml_service/03-AttachAmlCluster.py' + displayName: 'Create AML Compute Cluster' + +- script: 'python aml_service/04-AmlPipelines.py' + displayName: 'Create and Test AML Pipeline' + +- script: 'python aml_service/04-AmlPipelines.py --pipeline_action publish' + displayName: 'Publish AML Pipeline as Endpoint' + +- task: CopyFiles@2 + displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)' + inputs: + SourceFolder: '$(Build.SourcesDirectory)' + TargetFolder: '$(Build.ArtifactStagingDirectory)' + Contents: '**' + +- task: PublishBuildArtifacts@1 + displayName: 'Publish Artifact: devops-for-ai' + inputs: + ArtifactName: 'devops-for-ai' + publishLocation: 'container' + pathtoPublish: '$(Build.ArtifactStagingDirectory)' + TargetPath: '$(Build.ArtifactStagingDirectory)' + diff --git a/docs/getting_started.md b/docs/getting_started.md index b0e16ff5..34ac6961 100644 --- a/docs/getting_started.md +++ b/docs/getting_started.md @@ -1,207 +1,207 @@ -## Getting Started with this Repo - -### 1. Get the source code -- Either clone the repository to your workspace and create your own repo with the code in GitHub. -- An easier way is to just fork the project, so you have the repository under your username on GitHub itself. - - -### 2. Create Azure DevOps account -We use Azure DevOps for running our build(CI), retraining trigger and release (CD) pipelines. If you don't already have Azure DevOps account, create one by following the instructions [here](https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/create-organization?view=azure-devops) - -If you already have Azure DevOps account, create a [new project](https://docs.microsoft.com/en-us/azure/devops/organizations/projects/create-project?view=azure-devops). - -#### Enable Azure DevOps Preview -The steps below uses the latest DevOps features. Thus, please enable the feature **New YAML pipeline creation experience** by following the instructions [here](https://docs.microsoft.com/en-us/azure/devops/project/navigation/preview-features?view=azure-devops). - -**Note:** Make sure you have the right permissions in Azure DevOps to do so. - -### 3. Create Service Principal to Login to Azure and create resources - -To create service principal, register an application entity in Azure Active Directory (Azure AD) and grant it the Contributor or Owner role of the subscription or the resource group where the web service belongs to. See [how to create service principal](https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal) and assign permissions to manage Azure resource. -Please make note the following values after creating a service principal, we will need them in subsequent steps -- Azure subscription id (subscriptionid) -- Service principal username (spidentity)([application id](https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal#get-application-id-and-authentication-key)) -- Service principal password (spsecret) ([auth_key](https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal#get-application-id-and-authentication-key)) -- Service principal [tenant id](https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal#get-tenant-id) (sptenant) - -**Note:** You must have sufficient permissions to register an application with your Azure AD tenant, and assign the application to a role in your Azure subscription. Contact your subscription adminstator if you don't have the permissions. Normally a subscription admin can create a Service principal and can provide you the details. - - -### 4. Store secret in Key Vault and link it as variable group in Azure DevOps to be used by piplines. -Our pipeline require the following variables to autheticate with Azure. -- spidentity -- spsecret -- sptenant -- subscriptionid - -We noted the value of these variables in previous steps. - -**NOTE:** These values should be treated as secret as they allow access to your subscription. - -We make use of variable group inside Azure DevOps to store variables and their values that we want to make available across multiple pipelines. You can either store the values directly in [Azure DevOps](https://docs.microsoft.com/en-us/azure/devops/pipelines/library/variable-groups?view=azure-devops&tabs=designer#create-a-variable-group) or connect to an Azure Key Vault in your subscription. Please refer to the documentation [here](https://docs.microsoft.com/en-us/azure/devops/pipelines/library/variable-groups?view=azure-devops&tabs=designer#create-a-variable-group) to learn more about how to create a variable group and [link](https://docs.microsoft.com/en-us/azure/devops/pipelines/library/variable-groups?view=azure-devops&tabs=designer#use-a-variable-group) it to your pipeline. - -Please name your variable group **``AzureKeyVaultSecrets``**, we are using this name within our build yaml file. - -Up until now you shouls have -- Forked (or cloned) the repo -- Created a devops account or use an existing one -- Got service principal details and subscription id -- Set them as variable group within devops - -We now have 3 pipelines that we would set up -- **Build Pipeline (azure-pipelines.yml)**: Runs tests and sets up infrastructure -- **Retraining trigger pipeline(/template/retraining-template.json)**: This pipeline triggers Azure ML Pipeline (training/retraining) which trains a new model and publishes model image, if new model performs better -- **Release pipeline(/template/release-template.json)**: This pipeline deploys and tests model image as web service in QA and Prod environment - - - -### 5. Set up Build Pipeline -1. Select your devops organization and project by clicking dev.azure.com -2. Once you are in the right devops project, click Pipelines on the left hand menu and select Builds -3. Click **New pipeline** to create new pipeline - ![new build pipeline](./images/new-build-pipeline1.png) -4. On the Connect option page, select **GitHub** - ![build connnect step](./images/build-connect.png) - -5. On the Select option page, select the GitHub repository where you forked the code. -![select repo](./images/build-selectrepo.png) - -6. Authorize Azure Pipelines to access your git account -![select repo](./images/Install_Azure_pipeline.png) - -7. Since the repository contains azure-pipelines.yml at the root level, Azure DevOps recognizes it and auto imports it. Click **Run** and this will start the build pipeline. -![select repo](./images/build-createpipeline1.png) - -8. Your build run would look similar to the following image -![select repo](./images/build-run.png) - -Great, you now have the build pipeline setup, you can either manually trigger it or it gets automatically triggered everytime there is a change in the master branch. - - -**Note:** The build pipeline will perform basic test on the code and provision infrastructure on azure. This can take around 10 mins to complete. - -### 6. Set up Retraining trigger release pipeline - -**Note:** For setting up release pipelines, first download the [release-pipelines](../release-pipelines) to your local filesystem so you can import it. - -**Also Note:** If this is the first time you are creating a release pipeline, you would see the following option, click on **New Pipeline** -![import release pipeline](./images/release-new-pipeline.png) - -To enable the option to **Import release pipeline**, we must have atleast one release pipeline so let's create one with an empty job. -![import release pipeline](./images/release-empty-job.png) - -On the next screen, click on **Save** and then click **Ok** to save the empty release pipeline. -![import release pipeline](./images/release-save-empty.png) - -**Steps** - -1. Select the Release tab from the menu on the left, then click the New dropdown on top and click on **Import Release pipeline** -![import release pipeline](./images/release-import.png) - -1. On the next screen, navigate to **release-pipelines** folder and select **retrainingtrigger.json** pipeline file, click import. You should now see the following screen. Under Stages click on the Retrain stage, where it shows the red error sign. -![release retraining triggger](./images/release-retrainingtrigger.png) - - Click on agent job and then from the drop down for Agent Pool on the right side select **Hosted Ubuntu 1604** agent to execute your run and click **Save** button on top right. -![release retraining agent](./images/release-retrainingagent.png) - -1. We would now link the variable group we created earlier to this release pipeline. To do so click on the **Variables** tab, then click on **Variable** groups and then select **Link variable group** and select the variable group that we created in previous step and click **Link** followed by **Save** button. -![release retraining artifact](./images/release-link-vg.png) -1. We want the retraining pipeline to be triggered every time build pipeline is complete. To create this dependency, we will link the artifact from build pipeline as a trigger for retraining trigger release pipeline. To do so, click on the **pipeline** tab and then select **Add an artifact** option under Artifacts. -![release pipeline view](./images/release-retrainingpipeline.png) - -1. This will open up a pop up window, on this screen: - - for source type, select **Build** - - for project, select your project in Azure DevOps that you created in previous steps. - - For Source select the source build pipeline. If you have forked the git repo, the build pipeline may named ``yourgitusername.DevOpsForAI`` - - In the Source alias, replace the auto-populated value with - **``DevOpsForAI``** - - Field **Devault version** will get auto populated **Latest**, you can leave them as it is. - - Click on **Add**, and then **Save** the pipeline - ![release retraining artifact](./images/release-retrainingartifact.png) - -1. Artifact is now added for retraining trigger pipeline, hit the **save** button on top right and then click **ok**. - -1. To trigger this pipeline every time build pipeline executes, click on the lighting sign to enable the **Continous Deployment Trigger**, click **Save**. - ![release retraining artifact](./images/release-retrainingtrigger1.png) - -2. If you want to run this pipeline on a schedule, you can set one by clicking on **Schedule set** in Artifacts section. -![release retraining artifact](./images/release-retrainingartifactsuccess.png) - -1. For the first time, we will manually trigger this pipeline. - - Click Releases option on the left hand side and navigate to the release pipeline you just created. - ![release retraining artifact](./images/release-createarelease.png) - - Click **Create Release** - ![release create ](./images/release-create.png) - - On the next screen click on **Create** button, this creates a manual release for you. - - **Note**: This release pipeline will call the published AML pipeline. The AML pipeline will train the model and package it into image. It will take around 10 mins to complete. The next steps need this pipeline to complete successfully. - -### 7. Set up release (Deployment) pipeline - -**Note:** For setting up release pipelines, first download the [release-pipelines](../release-pipelines) to your local filesystem so you can import it. - -**Also Note:** Before creating this pipeline, make sure that the build pipeline, retraining trigger release pipeline and AML retraining pipeline have been executed, as they will be creating resources during their run like docker images that we will deploy as part of this pipeline. So it is important for them to have successful runs before the setup here. - -Let's set up the release deployment pipeline now. -1. As done in previous step, Select the Release tab from the menu on the left, then click the New dropdown on top and click on **Import Release pipeline** -![import release pipeline](./images/release-import.png) - -1. On the next screen, navigate to **release-pipelines** folder and select **releasedeployment.json** pipeline file, click import. You should now see the following screen. Under Stages click on the QA environment's **view stage task", where it shows the red error sign. -![release retraining triggger](./images/release-deployment.png) - - Click on agent job and then from the drop down for Agent Pool on the right side select **Hosted Ubuntu 1604** agent to execute your run and click **Save** button on top right. -![release retraining agent](./images/release-deploymentqaagent.png) - - Follow the same steps for **Prod Environment** and select **Hosted Ubuntu 1604** for agent pool and save the pipeline. - ![release retraining agent](./images/release-deploymentprodagent.png) - -1. We would now link the variable group we created earlier to this release pipeline. To do so click on the **Variables** tab, then click on **Variable** groups and then select **Link variable group** and select the variable group that we created in previous step and click **Link** followed by **Save** button. -![release retraining artifact](./images/release-link-vg.png) - -1. We now need to add artifact that will trigger this pipeline. We will add two artifacts: - - Build pipeline output as artifact since that contains our configuration and code files that we require in this pipeline. - - ACR artifact to trigger this pipeline everytime there is a new image that gets published to Azure container registry (ACR) as part of retraining pipeline. - - Here are the steps to add build output as artifact - - - Click on pipeline tab to go back to pipeline view and click **Add an artifact**. This will open a pop up window - - for source type, select **Build** - - for project, select your project in Azure DevOps that you created in previous steps. - - For Source select the source build pipeline. If you have forked the git repo, the build pipeline may named ``yourgitusername.DevOpsForAI`` - - In the Source alias, replace the auto-populated value with - **``DevOpsForAI``** - - Field **Devault version** will get auto populated **Latest**, you can leave them as it is. - - Click on **Add**, and then **Save** the pipeline - ![release retraining artifact](./images/release-retrainingartifact.png) - - Here are the steps to add ACR as an artifact - - ![release retraining agent](./images/release-deployment-service-conn.png) - - - - Click on pipeline tab to go back to pipeline view and click **Add an artifact**. This will open a pop up window - - For Source type, click on **more artifact types** dropdown and select **Azure Container Registry** - - For **service connection**, select an existing service connection to Azure, if you don't see anything in the dropdown, click on **Manage** and [create new **Azure Resource Manager**](https://docs.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops#create-a-service-connection) service connection for your subscription. - **Note:** You must have sufficient privileges to create a service connection, if not contact your subscription adminstrator. - - For Resource Group, select **DevOps_AzureML_Demo**, this is the default resource group name that we are using and if the previous pipelines executed properly you will see this resource group in the drop down. - - Under Azure container registry dropdown, select the container registry, there should be only one container registry entry. - - For repository, select **diabetes-model-score** repository. - - For Default version, keep it to **latest** - - For Source alias, keep the default generated name. - - Click Add - - Click on lighting sign to enable the **Continous Deployment Trigger**, click Save. - ![release retraining artifact](./images/release-deploymentcitrigger.png) - - -1. We now have QA environment continously deployed each time there is a new image available in container registry. You can select pre-deployment conditions for prod environment, normally you don't want it to be auto deployed, so select manual only trigger here. - - ![release retraining artifact](./images/release-deploymentprodtrigger.png) - - To deploy a release manually, follow the document [here](https://docs.microsoft.com/en-us/azure/devops/pipelines/get-started-designer?view=azure-devops&tabs=new-nav#deploy-a-release) - - -Congratulations, you now have three pipelines set up end to end. - - Build pipeline: triggered on code change to master branch on GitHub. - - Release Trigger pipeline: triggered on build pipeline execution and produces a new model image if better than previous one. - - Release Deployment pipeline: QA environment is auto triggered when there is a new image. - Prod is manual only and user decides when to release to this environment. +## Getting Started with this Repo + +### 1. Get the source code +- Either clone the repository to your workspace and create your own repo with the code in GitHub. +- An easier way is to just fork the project, so you have the repository under your username on GitHub itself. + + +### 2. Create Azure DevOps account +We use Azure DevOps for running our build(CI), retraining trigger and release (CD) pipelines. If you don't already have Azure DevOps account, create one by following the instructions [here](https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/create-organization?view=azure-devops) + +If you already have Azure DevOps account, create a [new project](https://docs.microsoft.com/en-us/azure/devops/organizations/projects/create-project?view=azure-devops). + +#### Enable Azure DevOps Preview +The steps below uses the latest DevOps features. Thus, please enable the feature **New YAML pipeline creation experience** by following the instructions [here](https://docs.microsoft.com/en-us/azure/devops/project/navigation/preview-features?view=azure-devops). + +**Note:** Make sure you have the right permissions in Azure DevOps to do so. + +### 3. Create Service Principal to Login to Azure and create resources + +To create service principal, register an application entity in Azure Active Directory (Azure AD) and grant it the Contributor or Owner role of the subscription or the resource group where the web service belongs to. See [how to create service principal](https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal) and assign permissions to manage Azure resource. +Please make note the following values after creating a service principal, we will need them in subsequent steps +- Azure subscription id (subscriptionid) +- Service principal username (spidentity)([application id](https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal#get-application-id-and-authentication-key)) +- Service principal password (spsecret) ([auth_key](https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal#get-application-id-and-authentication-key)) +- Service principal [tenant id](https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal#get-tenant-id) (sptenant) + +**Note:** You must have sufficient permissions to register an application with your Azure AD tenant, and assign the application to a role in your Azure subscription. Contact your subscription adminstator if you don't have the permissions. Normally a subscription admin can create a Service principal and can provide you the details. + + +### 4. Store secret in Key Vault and link it as variable group in Azure DevOps to be used by piplines. +Our pipeline require the following variables to autheticate with Azure. +- spidentity +- spsecret +- sptenant +- subscriptionid + +We noted the value of these variables in previous steps. + +**NOTE:** These values should be treated as secret as they allow access to your subscription. + +We make use of variable group inside Azure DevOps to store variables and their values that we want to make available across multiple pipelines. You can either store the values directly in [Azure DevOps](https://docs.microsoft.com/en-us/azure/devops/pipelines/library/variable-groups?view=azure-devops&tabs=designer#create-a-variable-group) or connect to an Azure Key Vault in your subscription. Please refer to the documentation [here](https://docs.microsoft.com/en-us/azure/devops/pipelines/library/variable-groups?view=azure-devops&tabs=designer#create-a-variable-group) to learn more about how to create a variable group and [link](https://docs.microsoft.com/en-us/azure/devops/pipelines/library/variable-groups?view=azure-devops&tabs=designer#use-a-variable-group) it to your pipeline. + +Please name your variable group **``AzureKeyVaultSecrets``**, we are using this name within our build yaml file. + +Up until now you shouls have +- Forked (or cloned) the repo +- Created a devops account or use an existing one +- Got service principal details and subscription id +- Set them as variable group within devops + +We now have 3 pipelines that we would set up +- **Build Pipeline (azure-pipelines.yml)**: Runs tests and sets up infrastructure +- **Retraining trigger pipeline(/template/retraining-template.json)**: This pipeline triggers Azure ML Pipeline (training/retraining) which trains a new model and publishes model image, if new model performs better +- **Release pipeline(/template/release-template.json)**: This pipeline deploys and tests model image as web service in QA and Prod environment + + + +### 5. Set up Build Pipeline +1. Select your devops organization and project by clicking dev.azure.com +2. Once you are in the right devops project, click Pipelines on the left hand menu and select Builds +3. Click **New pipeline** to create new pipeline + ![new build pipeline](./images/new-build-pipeline1.png) +4. On the Connect option page, select **GitHub** + ![build connnect step](./images/build-connect.png) + +5. On the Select option page, select the GitHub repository where you forked the code. +![select repo](./images/build-selectrepo.png) + +6. Authorize Azure Pipelines to access your git account +![select repo](./images/Install_Azure_pipeline.png) + +7. Since the repository contains azure-pipelines.yml at the root level, Azure DevOps recognizes it and auto imports it. Click **Run** and this will start the build pipeline. +![select repo](./images/build-createpipeline1.png) + +8. Your build run would look similar to the following image +![select repo](./images/build-run.png) + +Great, you now have the build pipeline setup, you can either manually trigger it or it gets automatically triggered everytime there is a change in the master branch. + + +**Note:** The build pipeline will perform basic test on the code and provision infrastructure on azure. This can take around 10 mins to complete. + +### 6. Set up Retraining trigger release pipeline + +**Note:** For setting up release pipelines, first download the [release-pipelines](../release-pipelines) to your local filesystem so you can import it. + +**Also Note:** If this is the first time you are creating a release pipeline, you would see the following option, click on **New Pipeline** +![import release pipeline](./images/release-new-pipeline.png) + +To enable the option to **Import release pipeline**, we must have atleast one release pipeline so let's create one with an empty job. +![import release pipeline](./images/release-empty-job.png) + +On the next screen, click on **Save** and then click **Ok** to save the empty release pipeline. +![import release pipeline](./images/release-save-empty.png) + +**Steps** + +1. Select the Release tab from the menu on the left, then click the New dropdown on top and click on **Import Release pipeline** +![import release pipeline](./images/release-import.png) + +1. On the next screen, navigate to **release-pipelines** folder and select **retrainingtrigger.json** pipeline file, click import. You should now see the following screen. Under Stages click on the Retrain stage, where it shows the red error sign. +![release retraining triggger](./images/release-retrainingtrigger.png) + + Click on agent job and then from the drop down for Agent Pool on the right side select **Hosted Ubuntu 1604** agent to execute your run and click **Save** button on top right. +![release retraining agent](./images/release-retrainingagent.png) + +1. We would now link the variable group we created earlier to this release pipeline. To do so click on the **Variables** tab, then click on **Variable** groups and then select **Link variable group** and select the variable group that we created in previous step and click **Link** followed by **Save** button. +![release retraining artifact](./images/release-link-vg.png) +1. We want the retraining pipeline to be triggered every time build pipeline is complete. To create this dependency, we will link the artifact from build pipeline as a trigger for retraining trigger release pipeline. To do so, click on the **pipeline** tab and then select **Add an artifact** option under Artifacts. +![release pipeline view](./images/release-retrainingpipeline.png) + +1. This will open up a pop up window, on this screen: + - for source type, select **Build** + - for project, select your project in Azure DevOps that you created in previous steps. + - For Source select the source build pipeline. If you have forked the git repo, the build pipeline may named ``yourgitusername.DevOpsForAI`` + - In the Source alias, replace the auto-populated value with + **``DevOpsForAI``** + - Field **Devault version** will get auto populated **Latest**, you can leave them as it is. + - Click on **Add**, and then **Save** the pipeline + ![release retraining artifact](./images/release-retrainingartifact.png) + +1. Artifact is now added for retraining trigger pipeline, hit the **save** button on top right and then click **ok**. + +1. To trigger this pipeline every time build pipeline executes, click on the lighting sign to enable the **Continous Deployment Trigger**, click **Save**. + ![release retraining artifact](./images/release-retrainingtrigger1.png) + +2. If you want to run this pipeline on a schedule, you can set one by clicking on **Schedule set** in Artifacts section. +![release retraining artifact](./images/release-retrainingartifactsuccess.png) + +1. For the first time, we will manually trigger this pipeline. + - Click Releases option on the left hand side and navigate to the release pipeline you just created. + ![release retraining artifact](./images/release-createarelease.png) + - Click **Create Release** + ![release create ](./images/release-create.png) + - On the next screen click on **Create** button, this creates a manual release for you. + + **Note**: This release pipeline will call the published AML pipeline. The AML pipeline will train the model and package it into image. It will take around 10 mins to complete. The next steps need this pipeline to complete successfully. + +### 7. Set up release (Deployment) pipeline + +**Note:** For setting up release pipelines, first download the [release-pipelines](../release-pipelines) to your local filesystem so you can import it. + +**Also Note:** Before creating this pipeline, make sure that the build pipeline, retraining trigger release pipeline and AML retraining pipeline have been executed, as they will be creating resources during their run like docker images that we will deploy as part of this pipeline. So it is important for them to have successful runs before the setup here. + +Let's set up the release deployment pipeline now. +1. As done in previous step, Select the Release tab from the menu on the left, then click the New dropdown on top and click on **Import Release pipeline** +![import release pipeline](./images/release-import.png) + +1. On the next screen, navigate to **release-pipelines** folder and select **releasedeployment.json** pipeline file, click import. You should now see the following screen. Under Stages click on the QA environment's **view stage task", where it shows the red error sign. +![release retraining triggger](./images/release-deployment.png) + + Click on agent job and then from the drop down for Agent Pool on the right side select **Hosted Ubuntu 1604** agent to execute your run and click **Save** button on top right. +![release retraining agent](./images/release-deploymentqaagent.png) + + Follow the same steps for **Prod Environment** and select **Hosted Ubuntu 1604** for agent pool and save the pipeline. + ![release retraining agent](./images/release-deploymentprodagent.png) + +1. We would now link the variable group we created earlier to this release pipeline. To do so click on the **Variables** tab, then click on **Variable** groups and then select **Link variable group** and select the variable group that we created in previous step and click **Link** followed by **Save** button. +![release retraining artifact](./images/release-link-vg.png) + +1. We now need to add artifact that will trigger this pipeline. We will add two artifacts: + - Build pipeline output as artifact since that contains our configuration and code files that we require in this pipeline. + - ACR artifact to trigger this pipeline everytime there is a new image that gets published to Azure container registry (ACR) as part of retraining pipeline. + + Here are the steps to add build output as artifact + + - Click on pipeline tab to go back to pipeline view and click **Add an artifact**. This will open a pop up window + - for source type, select **Build** + - for project, select your project in Azure DevOps that you created in previous steps. + - For Source select the source build pipeline. If you have forked the git repo, the build pipeline may named ``yourgitusername.DevOpsForAI`` + - In the Source alias, replace the auto-populated value with + **``DevOpsForAI``** + - Field **Devault version** will get auto populated **Latest**, you can leave them as it is. + - Click on **Add**, and then **Save** the pipeline + ![release retraining artifact](./images/release-retrainingartifact.png) + + Here are the steps to add ACR as an artifact + + ![release retraining agent](./images/release-deployment-service-conn.png) + + + - Click on pipeline tab to go back to pipeline view and click **Add an artifact**. This will open a pop up window + - For Source type, click on **more artifact types** dropdown and select **Azure Container Registry** + - For **service connection**, select an existing service connection to Azure, if you don't see anything in the dropdown, click on **Manage** and [create new **Azure Resource Manager**](https://docs.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops#create-a-service-connection) service connection for your subscription. + **Note:** You must have sufficient privileges to create a service connection, if not contact your subscription adminstrator. + - For Resource Group, select **DevOps_AzureML_Demo**, this is the default resource group name that we are using and if the previous pipelines executed properly you will see this resource group in the drop down. + - Under Azure container registry dropdown, select the container registry, there should be only one container registry entry. + - For repository, select **diabetes-model-score** repository. + - For Default version, keep it to **latest** + - For Source alias, keep the default generated name. + - Click Add + - Click on lighting sign to enable the **Continous Deployment Trigger**, click Save. + ![release retraining artifact](./images/release-deploymentcitrigger.png) + + +1. We now have QA environment continously deployed each time there is a new image available in container registry. You can select pre-deployment conditions for prod environment, normally you don't want it to be auto deployed, so select manual only trigger here. + + ![release retraining artifact](./images/release-deploymentprodtrigger.png) + + To deploy a release manually, follow the document [here](https://docs.microsoft.com/en-us/azure/devops/pipelines/get-started-designer?view=azure-devops&tabs=new-nav#deploy-a-release) + + +Congratulations, you now have three pipelines set up end to end. + - Build pipeline: triggered on code change to master branch on GitHub. + - Release Trigger pipeline: triggered on build pipeline execution and produces a new model image if better than previous one. + - Release Deployment pipeline: QA environment is auto triggered when there is a new image. + Prod is manual only and user decides when to release to this environment. diff --git a/release-pipelines/releasedeployment.json b/release-pipelines/releasedeployment.json index 6147d931..cc1f11b8 100644 --- a/release-pipelines/releasedeployment.json +++ b/release-pipelines/releasedeployment.json @@ -1,581 +1,581 @@ -{ - "source": 2, - "revision": 1, - "description": null, - "createdBy": { - "displayName": "Username", - "url": "https://app.vssps.visualstudio.com/Ababa295f-6e98-40b6-9dc1-aa6118e169e2/_apis/Identities/af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", - "_links": { - "avatar": { - "href": "https://youaccount.visualstudio.com/_apis/GraphProfile/MemberAvatars/aad.ZmZhYjg5YzEtYmIxNC03NGRiLTk3NTAtZDBlMzQ2NGQwNjU0" - } - }, - "id": "af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", - "uniqueName": "user@email.com", - "imageUrl": "https://youaccount.visualstudio.com/_api/_common/identityImage?id=af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", - "descriptor": "aad.ZmZhYjg5YzEtYmIxNC03NGRiLTk3NTAtZDBlMzQ2NGQwNjU0" - }, - "createdOn": "2019-03-28T18:56:41.680Z", - "modifiedBy": { - "displayName": "User Name", - "url": "https://app.vssps.visualstudio.com/Ababa295f-6e98-40b6-9dc1-aa6118e169e2/_apis/Identities/af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", - "_links": { - "avatar": { - "href": "https://youaccount.visualstudio.com/_apis/GraphProfile/MemberAvatars/aad.ZmZhYjg5YzEtYmIxNC03NGRiLTk3NTAtZDBlMzQ2NGQwNjU0" - } - }, - "id": "af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", - "uniqueName": "user@email.com", - "imageUrl": "https://youaccount.visualstudio.com/_api/_common/identityImage?id=af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", - "descriptor": "aad.ZmZhYjg5YzEtYmIxNC03NGRiLTk3NTAtZDBlMzQ2NGQwNjU0" - }, - "modifiedOn": "2019-03-28T18:56:41.680Z", - "isDeleted": false, - "variables": {}, - "variableGroups": [], - "environments": [ - { - "id": 8, - "name": "QA Environment", - "rank": 1, - "owner": { - "displayName": "User Name", - "url": "https://app.vssps.visualstudio.com/Ababa295f-6e98-40b6-9dc1-aa6118e169e2/_apis/Identities/af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", - "_links": { - "avatar": { - "href": "https://youaccount.visualstudio.com/_apis/GraphProfile/MemberAvatars/aad.ZmZhYjg5YzEtYmIxNC03NGRiLTk3NTAtZDBlMzQ2NGQwNjU0" - } - }, - "id": "af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", - "uniqueName": "user@email.com", - "imageUrl": "https://youaccount.visualstudio.com/_api/_common/identityImage?id=af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", - "descriptor": "aad.ZmZhYjg5YzEtYmIxNC03NGRiLTk3NTAtZDBlMzQ2NGQwNjU0" - }, - "variables": {}, - "variableGroups": [], - "preDeployApprovals": { - "approvals": [ - { - "rank": 1, - "isAutomated": true, - "isNotificationOn": false, - "id": 22 - } - ], - "approvalOptions": { - "requiredApproverCount": null, - "releaseCreatorCanBeApprover": false, - "autoTriggeredAndPreviousEnvironmentApprovedCanBeSkipped": false, - "enforceIdentityRevalidation": false, - "timeoutInMinutes": 0, - "executionOrder": 1 - } - }, - "deployStep": { - "id": 25 - }, - "postDeployApprovals": { - "approvals": [ - { - "rank": 1, - "isAutomated": true, - "isNotificationOn": false, - "id": 26 - } - ], - "approvalOptions": { - "requiredApproverCount": null, - "releaseCreatorCanBeApprover": false, - "autoTriggeredAndPreviousEnvironmentApprovedCanBeSkipped": false, - "enforceIdentityRevalidation": false, - "timeoutInMinutes": 0, - "executionOrder": 2 - } - }, - "deployPhases": [ - { - "deploymentInput": { - "parallelExecution": { - "parallelExecutionType": 0 - }, - "skipArtifactsDownload": false, - "artifactsDownloadInput": { - "downloadInputs": [] - }, - "queueId": 18, - "demands": [], - "enableAccessToken": false, - "timeoutInMinutes": 0, - "jobCancelTimeoutInMinutes": 1, - "condition": "succeeded()", - "overrideInputs": {} - }, - "rank": 1, - "phaseType": 1, - "name": "Agent job", - "refName": null, - "workflowTasks": [ - { - "environment": {}, - "taskId": "33c63b11-352b-45a2-ba1b-54cb568a29ca", - "version": "0.*", - "name": "Use Python 3.6", - "refName": "", - "enabled": true, - "alwaysRun": false, - "continueOnError": false, - "timeoutInMinutes": 0, - "definitionType": "task", - "overrideInputs": {}, - "condition": "succeeded()", - "inputs": { - "versionSpec": "3.6", - "addToPath": "true", - "architecture": "x64" - } - }, - { - "environment": {}, - "taskId": "6c731c3c-3c68-459a-a5c9-bde6e6595b5b", - "version": "3.*", - "name": "Bash Script", - "refName": "", - "enabled": true, - "alwaysRun": false, - "continueOnError": false, - "timeoutInMinutes": 0, - "definitionType": "task", - "overrideInputs": {}, - "condition": "succeeded()", - "inputs": { - "targetType": "filePath", - "filePath": "$(System.DefaultWorkingDirectory)/DevOpsForAI/devops-for-ai/environment_setup/install_requirements.sh", - "arguments": "", - "script": "# Write your commands here\n\n# Use the environment variables input below to pass secret variables to this script", - "workingDirectory": "$(System.DefaultWorkingDirectory)/DevOpsForAI/devops-for-ai/environment_setup", - "failOnStderr": "false", - "noProfile": "true", - "noRc": "true" - } - }, - { - "environment": {}, - "taskId": "d9bafed4-0b18-4f58-968d-86655b4d2ce9", - "version": "2.*", - "name": "Login to Azure Subscription", - "refName": "", - "enabled": true, - "alwaysRun": false, - "continueOnError": false, - "timeoutInMinutes": 0, - "definitionType": "task", - "overrideInputs": {}, - "condition": "succeeded()", - "inputs": { - "script": "az login --service-principal -u $(spidentity) -p $(spsecret) --tenant $(sptenant)\n", - "workingDirectory": "", - "failOnStderr": "false" - } - }, - { - "environment": {}, - "taskId": "d9bafed4-0b18-4f58-968d-86655b4d2ce9", - "version": "2.*", - "name": "New model available, Create Scoring Image", - "refName": "", - "enabled": false, - "alwaysRun": false, - "continueOnError": false, - "timeoutInMinutes": 0, - "definitionType": "task", - "overrideInputs": {}, - "condition": "succeeded()", - "inputs": { - "script": "python aml_service/30-CreateScoringImage.py", - "workingDirectory": "$(System.DefaultWorkingDirectory)/DevOpsForAI/devops-for-ai", - "failOnStderr": "false" - } - }, - { - "environment": {}, - "taskId": "d9bafed4-0b18-4f58-968d-86655b4d2ce9", - "version": "2.*", - "name": "Get Latest Scoring Image Name & Version", - "refName": "", - "enabled": true, - "alwaysRun": false, - "continueOnError": false, - "timeoutInMinutes": 0, - "definitionType": "task", - "overrideInputs": {}, - "condition": "succeeded()", - "inputs": { - "script": "python aml_service/34-GetScoringImageName.py", - "workingDirectory": "$(System.DefaultWorkingDirectory)/DevOpsForAI/devops-for-ai", - "failOnStderr": "false" - } - }, - { - "environment": {}, - "taskId": "d9bafed4-0b18-4f58-968d-86655b4d2ce9", - "version": "2.*", - "name": "Deploy new image to ACI", - "refName": "", - "enabled": true, - "alwaysRun": false, - "continueOnError": false, - "timeoutInMinutes": 0, - "definitionType": "task", - "overrideInputs": {}, - "condition": "succeeded()", - "inputs": { - "script": "python aml_service/50-deployOnAci.py", - "workingDirectory": "$(System.DefaultWorkingDirectory)/DevOpsForAI/devops-for-ai", - "failOnStderr": "false" - } - }, - { - "environment": {}, - "taskId": "d9bafed4-0b18-4f58-968d-86655b4d2ce9", - "version": "2.*", - "name": "Test the image on ACI", - "refName": "", - "enabled": true, - "alwaysRun": false, - "continueOnError": false, - "timeoutInMinutes": 0, - "definitionType": "task", - "overrideInputs": {}, - "condition": "succeeded()", - "inputs": { - "script": "python aml_service/60-AciWebserviceTest.py", - "workingDirectory": "$(System.DefaultWorkingDirectory)/DevOpsForAI/devops-for-ai", - "failOnStderr": "false" - } - } - ] - } - ], - "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": 0, - "url": "https://youaccount.vsrm.visualstudio.com/c9414c5b-b8f8-4d50-a8bf-eae8dbbb6a2a/_apis/Release/releases/0", - "_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://youaccount.vsrm.visualstudio.com/_apis/public/Release/badge/c9414c5b-b8f8-4d50-a8bf-eae8dbbb6a2a/5/8" - }, - { - "id": 9, - "name": "Prod Environment", - "rank": 2, - "owner": { - "displayName": "User Name", - "url": "https://app.vssps.visualstudio.com/Ababa295f-6e98-40b6-9dc1-aa6118e169e2/_apis/Identities/af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", - "_links": { - "avatar": { - "href": "https://youaccount.visualstudio.com/_apis/GraphProfile/MemberAvatars/aad.ZmZhYjg5YzEtYmIxNC03NGRiLTk3NTAtZDBlMzQ2NGQwNjU0" - } - }, - "id": "af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", - "uniqueName": "user@email.com", - "imageUrl": "https://youaccount.visualstudio.com/_api/_common/identityImage?id=af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", - "descriptor": "aad.ZmZhYjg5YzEtYmIxNC03NGRiLTk3NTAtZDBlMzQ2NGQwNjU0" - }, - "variables": {}, - "variableGroups": [], - "preDeployApprovals": { - "approvals": [ - { - "rank": 1, - "isAutomated": true, - "isNotificationOn": false, - "id": 23 - } - ], - "approvalOptions": { - "requiredApproverCount": null, - "releaseCreatorCanBeApprover": false, - "autoTriggeredAndPreviousEnvironmentApprovedCanBeSkipped": false, - "enforceIdentityRevalidation": false, - "timeoutInMinutes": 0, - "executionOrder": 1 - } - }, - "deployStep": { - "id": 24 - }, - "postDeployApprovals": { - "approvals": [ - { - "rank": 1, - "isAutomated": true, - "isNotificationOn": false, - "id": 27 - } - ], - "approvalOptions": { - "requiredApproverCount": null, - "releaseCreatorCanBeApprover": false, - "autoTriggeredAndPreviousEnvironmentApprovedCanBeSkipped": false, - "enforceIdentityRevalidation": false, - "timeoutInMinutes": 0, - "executionOrder": 2 - } - }, - "deployPhases": [ - { - "deploymentInput": { - "parallelExecution": { - "parallelExecutionType": 0 - }, - "skipArtifactsDownload": false, - "artifactsDownloadInput": { - "downloadInputs": [] - }, - "queueId": 18, - "demands": [], - "enableAccessToken": false, - "timeoutInMinutes": 0, - "jobCancelTimeoutInMinutes": 1, - "condition": "succeeded()", - "overrideInputs": {} - }, - "rank": 1, - "phaseType": 1, - "name": "Agent job", - "refName": null, - "workflowTasks": [ - { - "environment": {}, - "taskId": "33c63b11-352b-45a2-ba1b-54cb568a29ca", - "version": "0.*", - "name": "Use Python 3.6", - "refName": "", - "enabled": true, - "alwaysRun": false, - "continueOnError": false, - "timeoutInMinutes": 0, - "definitionType": "task", - "overrideInputs": {}, - "condition": "succeeded()", - "inputs": { - "versionSpec": "3.6", - "addToPath": "true", - "architecture": "x64" - } - }, - { - "environment": {}, - "taskId": "6c731c3c-3c68-459a-a5c9-bde6e6595b5b", - "version": "3.*", - "name": "Bash Script", - "refName": "", - "enabled": true, - "alwaysRun": false, - "continueOnError": false, - "timeoutInMinutes": 0, - "definitionType": "task", - "overrideInputs": {}, - "condition": "succeeded()", - "inputs": { - "targetType": "filePath", - "filePath": "$(System.DefaultWorkingDirectory)/DevOpsForAI/devops-for-ai/environment_setup/install_requirements.sh", - "arguments": "", - "script": "# Write your commands here\n\n# Use the environment variables input below to pass secret variables to this script", - "workingDirectory": "$(System.DefaultWorkingDirectory)/DevOpsForAI/devops-for-ai/environment_setup", - "failOnStderr": "false", - "noProfile": "true", - "noRc": "true" - } - }, - { - "environment": {}, - "taskId": "d9bafed4-0b18-4f58-968d-86655b4d2ce9", - "version": "2.*", - "name": "Login to Azure Subscription", - "refName": "", - "enabled": true, - "alwaysRun": false, - "continueOnError": false, - "timeoutInMinutes": 0, - "definitionType": "task", - "overrideInputs": {}, - "condition": "succeeded()", - "inputs": { - "script": "az login --service-principal -u $(spidentity) -p $(spsecret) --tenant $(sptenant)", - "workingDirectory": "", - "failOnStderr": "false" - } - }, - { - "environment": {}, - "taskId": "d9bafed4-0b18-4f58-968d-86655b4d2ce9", - "version": "2.*", - "name": "Get Latest Scoring Image Name & Version", - "refName": "", - "enabled": true, - "alwaysRun": false, - "continueOnError": false, - "timeoutInMinutes": 0, - "definitionType": "task", - "overrideInputs": {}, - "condition": "succeeded()", - "inputs": { - "script": "python aml_service/34-GetScoringImageName.py", - "workingDirectory": "$(System.DefaultWorkingDirectory)/DevOpsForAI/devops-for-ai", - "failOnStderr": "false" - } - }, - { - "environment": {}, - "taskId": "d9bafed4-0b18-4f58-968d-86655b4d2ce9", - "version": "2.*", - "name": "Deploy to AKS", - "refName": "", - "enabled": true, - "alwaysRun": false, - "continueOnError": false, - "timeoutInMinutes": 0, - "definitionType": "task", - "overrideInputs": {}, - "condition": "succeeded()", - "inputs": { - "script": "python aml_service/51-deployOnAks.py", - "workingDirectory": "$(System.DefaultWorkingDirectory)/DevOpsForAI/devops-for-ai", - "failOnStderr": "false" - } - }, - { - "environment": {}, - "taskId": "d9bafed4-0b18-4f58-968d-86655b4d2ce9", - "version": "2.*", - "name": "Test AKS endpoint", - "refName": "", - "enabled": true, - "alwaysRun": false, - "continueOnError": false, - "timeoutInMinutes": 0, - "definitionType": "task", - "overrideInputs": {}, - "condition": "succeeded()", - "inputs": { - "script": "python aml_service/61-AksWebserviceTest.py", - "workingDirectory": "$(System.DefaultWorkingDirectory)/DevOpsForAI/devops-for-ai", - "failOnStderr": "false" - } - } - ] - } - ], - "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": [], - "executionPolicy": { - "concurrencyCount": 1, - "queueDepthCount": 0 - }, - "schedules": [], - "currentRelease": { - "id": 0, - "url": "https://youaccount.vsrm.visualstudio.com/c9414c5b-b8f8-4d50-a8bf-eae8dbbb6a2a/_apis/Release/releases/0", - "_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://youaccount.vsrm.visualstudio.com/_apis/public/Release/badge/c9414c5b-b8f8-4d50-a8bf-eae8dbbb6a2a/5/9" - } - ], - "artifacts": [], - "triggers": [], - "releaseNameFormat": "Release-$(rev:r)", - "tags": [], - "pipelineProcess": { - "type": 1 - }, - "properties": { - "DefinitionCreationSource": { - "$type": "System.String", - "$value": "ReleaseImport" - } - }, - "id": 5, - "name": "releasedeploymentpipeline", - "path": "\\", - "projectReference": null, - "url": "https://youaccount.vsrm.visualstudio.com/c9414c5b-b8f8-4d50-a8bf-eae8dbbb6a2a/_apis/Release/definitions/5", - "_links": { - "self": { - "href": "https://youaccount.vsrm.visualstudio.com/c9414c5b-b8f8-4d50-a8bf-eae8dbbb6a2a/_apis/Release/definitions/5" - }, - "web": { - "href": "https://youaccount.visualstudio.com/c9414c5b-b8f8-4d50-a8bf-eae8dbbb6a2a/_release?definitionId=5" - } - } +{ + "source": 2, + "revision": 1, + "description": null, + "createdBy": { + "displayName": "Username", + "url": "https://app.vssps.visualstudio.com/Ababa295f-6e98-40b6-9dc1-aa6118e169e2/_apis/Identities/af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", + "_links": { + "avatar": { + "href": "https://youaccount.visualstudio.com/_apis/GraphProfile/MemberAvatars/aad.ZmZhYjg5YzEtYmIxNC03NGRiLTk3NTAtZDBlMzQ2NGQwNjU0" + } + }, + "id": "af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", + "uniqueName": "user@email.com", + "imageUrl": "https://youaccount.visualstudio.com/_api/_common/identityImage?id=af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", + "descriptor": "aad.ZmZhYjg5YzEtYmIxNC03NGRiLTk3NTAtZDBlMzQ2NGQwNjU0" + }, + "createdOn": "2019-03-28T18:56:41.680Z", + "modifiedBy": { + "displayName": "User Name", + "url": "https://app.vssps.visualstudio.com/Ababa295f-6e98-40b6-9dc1-aa6118e169e2/_apis/Identities/af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", + "_links": { + "avatar": { + "href": "https://youaccount.visualstudio.com/_apis/GraphProfile/MemberAvatars/aad.ZmZhYjg5YzEtYmIxNC03NGRiLTk3NTAtZDBlMzQ2NGQwNjU0" + } + }, + "id": "af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", + "uniqueName": "user@email.com", + "imageUrl": "https://youaccount.visualstudio.com/_api/_common/identityImage?id=af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", + "descriptor": "aad.ZmZhYjg5YzEtYmIxNC03NGRiLTk3NTAtZDBlMzQ2NGQwNjU0" + }, + "modifiedOn": "2019-03-28T18:56:41.680Z", + "isDeleted": false, + "variables": {}, + "variableGroups": [], + "environments": [ + { + "id": 8, + "name": "QA Environment", + "rank": 1, + "owner": { + "displayName": "User Name", + "url": "https://app.vssps.visualstudio.com/Ababa295f-6e98-40b6-9dc1-aa6118e169e2/_apis/Identities/af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", + "_links": { + "avatar": { + "href": "https://youaccount.visualstudio.com/_apis/GraphProfile/MemberAvatars/aad.ZmZhYjg5YzEtYmIxNC03NGRiLTk3NTAtZDBlMzQ2NGQwNjU0" + } + }, + "id": "af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", + "uniqueName": "user@email.com", + "imageUrl": "https://youaccount.visualstudio.com/_api/_common/identityImage?id=af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", + "descriptor": "aad.ZmZhYjg5YzEtYmIxNC03NGRiLTk3NTAtZDBlMzQ2NGQwNjU0" + }, + "variables": {}, + "variableGroups": [], + "preDeployApprovals": { + "approvals": [ + { + "rank": 1, + "isAutomated": true, + "isNotificationOn": false, + "id": 22 + } + ], + "approvalOptions": { + "requiredApproverCount": null, + "releaseCreatorCanBeApprover": false, + "autoTriggeredAndPreviousEnvironmentApprovedCanBeSkipped": false, + "enforceIdentityRevalidation": false, + "timeoutInMinutes": 0, + "executionOrder": 1 + } + }, + "deployStep": { + "id": 25 + }, + "postDeployApprovals": { + "approvals": [ + { + "rank": 1, + "isAutomated": true, + "isNotificationOn": false, + "id": 26 + } + ], + "approvalOptions": { + "requiredApproverCount": null, + "releaseCreatorCanBeApprover": false, + "autoTriggeredAndPreviousEnvironmentApprovedCanBeSkipped": false, + "enforceIdentityRevalidation": false, + "timeoutInMinutes": 0, + "executionOrder": 2 + } + }, + "deployPhases": [ + { + "deploymentInput": { + "parallelExecution": { + "parallelExecutionType": 0 + }, + "skipArtifactsDownload": false, + "artifactsDownloadInput": { + "downloadInputs": [] + }, + "queueId": 18, + "demands": [], + "enableAccessToken": false, + "timeoutInMinutes": 0, + "jobCancelTimeoutInMinutes": 1, + "condition": "succeeded()", + "overrideInputs": {} + }, + "rank": 1, + "phaseType": 1, + "name": "Agent job", + "refName": null, + "workflowTasks": [ + { + "environment": {}, + "taskId": "33c63b11-352b-45a2-ba1b-54cb568a29ca", + "version": "0.*", + "name": "Use Python 3.6", + "refName": "", + "enabled": true, + "alwaysRun": false, + "continueOnError": false, + "timeoutInMinutes": 0, + "definitionType": "task", + "overrideInputs": {}, + "condition": "succeeded()", + "inputs": { + "versionSpec": "3.6", + "addToPath": "true", + "architecture": "x64" + } + }, + { + "environment": {}, + "taskId": "6c731c3c-3c68-459a-a5c9-bde6e6595b5b", + "version": "3.*", + "name": "Bash Script", + "refName": "", + "enabled": true, + "alwaysRun": false, + "continueOnError": false, + "timeoutInMinutes": 0, + "definitionType": "task", + "overrideInputs": {}, + "condition": "succeeded()", + "inputs": { + "targetType": "filePath", + "filePath": "$(System.DefaultWorkingDirectory)/DevOpsForAI/devops-for-ai/environment_setup/install_requirements.sh", + "arguments": "", + "script": "# Write your commands here\n\n# Use the environment variables input below to pass secret variables to this script", + "workingDirectory": "$(System.DefaultWorkingDirectory)/DevOpsForAI/devops-for-ai/environment_setup", + "failOnStderr": "false", + "noProfile": "true", + "noRc": "true" + } + }, + { + "environment": {}, + "taskId": "d9bafed4-0b18-4f58-968d-86655b4d2ce9", + "version": "2.*", + "name": "Login to Azure Subscription", + "refName": "", + "enabled": true, + "alwaysRun": false, + "continueOnError": false, + "timeoutInMinutes": 0, + "definitionType": "task", + "overrideInputs": {}, + "condition": "succeeded()", + "inputs": { + "script": "az login --service-principal -u $(spidentity) -p $(spsecret) --tenant $(sptenant)\n", + "workingDirectory": "", + "failOnStderr": "false" + } + }, + { + "environment": {}, + "taskId": "d9bafed4-0b18-4f58-968d-86655b4d2ce9", + "version": "2.*", + "name": "New model available, Create Scoring Image", + "refName": "", + "enabled": false, + "alwaysRun": false, + "continueOnError": false, + "timeoutInMinutes": 0, + "definitionType": "task", + "overrideInputs": {}, + "condition": "succeeded()", + "inputs": { + "script": "python aml_service/30-CreateScoringImage.py", + "workingDirectory": "$(System.DefaultWorkingDirectory)/DevOpsForAI/devops-for-ai", + "failOnStderr": "false" + } + }, + { + "environment": {}, + "taskId": "d9bafed4-0b18-4f58-968d-86655b4d2ce9", + "version": "2.*", + "name": "Get Latest Scoring Image Name & Version", + "refName": "", + "enabled": true, + "alwaysRun": false, + "continueOnError": false, + "timeoutInMinutes": 0, + "definitionType": "task", + "overrideInputs": {}, + "condition": "succeeded()", + "inputs": { + "script": "python aml_service/34-GetScoringImageName.py", + "workingDirectory": "$(System.DefaultWorkingDirectory)/DevOpsForAI/devops-for-ai", + "failOnStderr": "false" + } + }, + { + "environment": {}, + "taskId": "d9bafed4-0b18-4f58-968d-86655b4d2ce9", + "version": "2.*", + "name": "Deploy new image to ACI", + "refName": "", + "enabled": true, + "alwaysRun": false, + "continueOnError": false, + "timeoutInMinutes": 0, + "definitionType": "task", + "overrideInputs": {}, + "condition": "succeeded()", + "inputs": { + "script": "python aml_service/50-deployOnAci.py", + "workingDirectory": "$(System.DefaultWorkingDirectory)/DevOpsForAI/devops-for-ai", + "failOnStderr": "false" + } + }, + { + "environment": {}, + "taskId": "d9bafed4-0b18-4f58-968d-86655b4d2ce9", + "version": "2.*", + "name": "Test the image on ACI", + "refName": "", + "enabled": true, + "alwaysRun": false, + "continueOnError": false, + "timeoutInMinutes": 0, + "definitionType": "task", + "overrideInputs": {}, + "condition": "succeeded()", + "inputs": { + "script": "python aml_service/60-AciWebserviceTest.py", + "workingDirectory": "$(System.DefaultWorkingDirectory)/DevOpsForAI/devops-for-ai", + "failOnStderr": "false" + } + } + ] + } + ], + "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": 0, + "url": "https://youaccount.vsrm.visualstudio.com/c9414c5b-b8f8-4d50-a8bf-eae8dbbb6a2a/_apis/Release/releases/0", + "_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://youaccount.vsrm.visualstudio.com/_apis/public/Release/badge/c9414c5b-b8f8-4d50-a8bf-eae8dbbb6a2a/5/8" + }, + { + "id": 9, + "name": "Prod Environment", + "rank": 2, + "owner": { + "displayName": "User Name", + "url": "https://app.vssps.visualstudio.com/Ababa295f-6e98-40b6-9dc1-aa6118e169e2/_apis/Identities/af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", + "_links": { + "avatar": { + "href": "https://youaccount.visualstudio.com/_apis/GraphProfile/MemberAvatars/aad.ZmZhYjg5YzEtYmIxNC03NGRiLTk3NTAtZDBlMzQ2NGQwNjU0" + } + }, + "id": "af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", + "uniqueName": "user@email.com", + "imageUrl": "https://youaccount.visualstudio.com/_api/_common/identityImage?id=af1dae6a-5d55-49bb-a1a1-8e5db902dc1c", + "descriptor": "aad.ZmZhYjg5YzEtYmIxNC03NGRiLTk3NTAtZDBlMzQ2NGQwNjU0" + }, + "variables": {}, + "variableGroups": [], + "preDeployApprovals": { + "approvals": [ + { + "rank": 1, + "isAutomated": true, + "isNotificationOn": false, + "id": 23 + } + ], + "approvalOptions": { + "requiredApproverCount": null, + "releaseCreatorCanBeApprover": false, + "autoTriggeredAndPreviousEnvironmentApprovedCanBeSkipped": false, + "enforceIdentityRevalidation": false, + "timeoutInMinutes": 0, + "executionOrder": 1 + } + }, + "deployStep": { + "id": 24 + }, + "postDeployApprovals": { + "approvals": [ + { + "rank": 1, + "isAutomated": true, + "isNotificationOn": false, + "id": 27 + } + ], + "approvalOptions": { + "requiredApproverCount": null, + "releaseCreatorCanBeApprover": false, + "autoTriggeredAndPreviousEnvironmentApprovedCanBeSkipped": false, + "enforceIdentityRevalidation": false, + "timeoutInMinutes": 0, + "executionOrder": 2 + } + }, + "deployPhases": [ + { + "deploymentInput": { + "parallelExecution": { + "parallelExecutionType": 0 + }, + "skipArtifactsDownload": false, + "artifactsDownloadInput": { + "downloadInputs": [] + }, + "queueId": 18, + "demands": [], + "enableAccessToken": false, + "timeoutInMinutes": 0, + "jobCancelTimeoutInMinutes": 1, + "condition": "succeeded()", + "overrideInputs": {} + }, + "rank": 1, + "phaseType": 1, + "name": "Agent job", + "refName": null, + "workflowTasks": [ + { + "environment": {}, + "taskId": "33c63b11-352b-45a2-ba1b-54cb568a29ca", + "version": "0.*", + "name": "Use Python 3.6", + "refName": "", + "enabled": true, + "alwaysRun": false, + "continueOnError": false, + "timeoutInMinutes": 0, + "definitionType": "task", + "overrideInputs": {}, + "condition": "succeeded()", + "inputs": { + "versionSpec": "3.6", + "addToPath": "true", + "architecture": "x64" + } + }, + { + "environment": {}, + "taskId": "6c731c3c-3c68-459a-a5c9-bde6e6595b5b", + "version": "3.*", + "name": "Bash Script", + "refName": "", + "enabled": true, + "alwaysRun": false, + "continueOnError": false, + "timeoutInMinutes": 0, + "definitionType": "task", + "overrideInputs": {}, + "condition": "succeeded()", + "inputs": { + "targetType": "filePath", + "filePath": "$(System.DefaultWorkingDirectory)/DevOpsForAI/devops-for-ai/environment_setup/install_requirements.sh", + "arguments": "", + "script": "# Write your commands here\n\n# Use the environment variables input below to pass secret variables to this script", + "workingDirectory": "$(System.DefaultWorkingDirectory)/DevOpsForAI/devops-for-ai/environment_setup", + "failOnStderr": "false", + "noProfile": "true", + "noRc": "true" + } + }, + { + "environment": {}, + "taskId": "d9bafed4-0b18-4f58-968d-86655b4d2ce9", + "version": "2.*", + "name": "Login to Azure Subscription", + "refName": "", + "enabled": true, + "alwaysRun": false, + "continueOnError": false, + "timeoutInMinutes": 0, + "definitionType": "task", + "overrideInputs": {}, + "condition": "succeeded()", + "inputs": { + "script": "az login --service-principal -u $(spidentity) -p $(spsecret) --tenant $(sptenant)", + "workingDirectory": "", + "failOnStderr": "false" + } + }, + { + "environment": {}, + "taskId": "d9bafed4-0b18-4f58-968d-86655b4d2ce9", + "version": "2.*", + "name": "Get Latest Scoring Image Name & Version", + "refName": "", + "enabled": true, + "alwaysRun": false, + "continueOnError": false, + "timeoutInMinutes": 0, + "definitionType": "task", + "overrideInputs": {}, + "condition": "succeeded()", + "inputs": { + "script": "python aml_service/34-GetScoringImageName.py", + "workingDirectory": "$(System.DefaultWorkingDirectory)/DevOpsForAI/devops-for-ai", + "failOnStderr": "false" + } + }, + { + "environment": {}, + "taskId": "d9bafed4-0b18-4f58-968d-86655b4d2ce9", + "version": "2.*", + "name": "Deploy to AKS", + "refName": "", + "enabled": true, + "alwaysRun": false, + "continueOnError": false, + "timeoutInMinutes": 0, + "definitionType": "task", + "overrideInputs": {}, + "condition": "succeeded()", + "inputs": { + "script": "python aml_service/51-deployOnAks.py", + "workingDirectory": "$(System.DefaultWorkingDirectory)/DevOpsForAI/devops-for-ai", + "failOnStderr": "false" + } + }, + { + "environment": {}, + "taskId": "d9bafed4-0b18-4f58-968d-86655b4d2ce9", + "version": "2.*", + "name": "Test AKS endpoint", + "refName": "", + "enabled": true, + "alwaysRun": false, + "continueOnError": false, + "timeoutInMinutes": 0, + "definitionType": "task", + "overrideInputs": {}, + "condition": "succeeded()", + "inputs": { + "script": "python aml_service/61-AksWebserviceTest.py", + "workingDirectory": "$(System.DefaultWorkingDirectory)/DevOpsForAI/devops-for-ai", + "failOnStderr": "false" + } + } + ] + } + ], + "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": [], + "executionPolicy": { + "concurrencyCount": 1, + "queueDepthCount": 0 + }, + "schedules": [], + "currentRelease": { + "id": 0, + "url": "https://youaccount.vsrm.visualstudio.com/c9414c5b-b8f8-4d50-a8bf-eae8dbbb6a2a/_apis/Release/releases/0", + "_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://youaccount.vsrm.visualstudio.com/_apis/public/Release/badge/c9414c5b-b8f8-4d50-a8bf-eae8dbbb6a2a/5/9" + } + ], + "artifacts": [], + "triggers": [], + "releaseNameFormat": "Release-$(rev:r)", + "tags": [], + "pipelineProcess": { + "type": 1 + }, + "properties": { + "DefinitionCreationSource": { + "$type": "System.String", + "$value": "ReleaseImport" + } + }, + "id": 5, + "name": "releasedeploymentpipeline", + "path": "\\", + "projectReference": null, + "url": "https://youaccount.vsrm.visualstudio.com/c9414c5b-b8f8-4d50-a8bf-eae8dbbb6a2a/_apis/Release/definitions/5", + "_links": { + "self": { + "href": "https://youaccount.vsrm.visualstudio.com/c9414c5b-b8f8-4d50-a8bf-eae8dbbb6a2a/_apis/Release/definitions/5" + }, + "web": { + "href": "https://youaccount.visualstudio.com/c9414c5b-b8f8-4d50-a8bf-eae8dbbb6a2a/_release?definitionId=5" + } + } } \ No newline at end of file From b1855287967eda0b88a80fdbbceb9b53379ae0d2 Mon Sep 17 00:00:00 2001 From: svivekan Date: Fri, 31 May 2019 10:55:06 +0100 Subject: [PATCH 2/9] config updated --- aml_config/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aml_config/config.json b/aml_config/config.json index 7105ecf7..08e1b06a 100644 --- a/aml_config/config.json +++ b/aml_config/config.json @@ -2,5 +2,5 @@ "subscription_id": "<>", "resource_group": "DevOps_AzureML_Demo", "workspace_name": "AzureML_Demo_ws", - "location": "southcentralus" + "location": "westeurope" } From e0d1ceac4451eea4b3909bc9d41ff2ac492f6463 Mon Sep 17 00:00:00 2001 From: svivekan Date: Fri, 31 May 2019 11:04:43 +0100 Subject: [PATCH 3/9] Update .gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index bc6e89d1..c72c2a9a 100644 --- a/.gitignore +++ b/.gitignore @@ -103,3 +103,6 @@ venv.bak/ # mypy .mypy_cache/ + +# pycharm +.idea/ From 9e548bc7fc23b4f13dab3fbd5dd9348a871f2caa Mon Sep 17 00:00:00 2001 From: svivekan Date: Fri, 31 May 2019 11:05:45 +0100 Subject: [PATCH 4/9] .gitignore is now working --- .idea/MLOpsPython.iml | 11 ----------- .idea/encodings.xml | 4 ---- .idea/misc.xml | 4 ---- .idea/modules.xml | 8 -------- .idea/vcs.xml | 6 ------ .idea/workspace.xml | 12 ------------ 6 files changed, 45 deletions(-) delete mode 100644 .idea/MLOpsPython.iml delete mode 100644 .idea/encodings.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/vcs.xml delete mode 100644 .idea/workspace.xml diff --git a/.idea/MLOpsPython.iml b/.idea/MLOpsPython.iml deleted file mode 100644 index 67116063..00000000 --- a/.idea/MLOpsPython.iml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index 15a15b21..00000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index a2e120dc..00000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 4c2a0915..00000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7f..00000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml deleted file mode 100644 index 96f83c7a..00000000 --- a/.idea/workspace.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - \ No newline at end of file From 0bb03cd5974d84267bc90933348c9c19b5754522 Mon Sep 17 00:00:00 2001 From: svivekan Date: Fri, 31 May 2019 11:06:32 +0100 Subject: [PATCH 5/9] Workspace named updated --- aml_config/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aml_config/config.json b/aml_config/config.json index 08e1b06a..f6321f71 100644 --- a/aml_config/config.json +++ b/aml_config/config.json @@ -1,6 +1,6 @@ { "subscription_id": "<>", "resource_group": "DevOps_AzureML_Demo", - "workspace_name": "AzureML_Demo_ws", + "workspace_name": "AzureML_Demo_Workspace", "location": "westeurope" } From f82fd38917296d166ef78286408dc970459d43ee Mon Sep 17 00:00:00 2001 From: svivekan Date: Fri, 31 May 2019 13:12:20 +0100 Subject: [PATCH 6/9] resouce group updated --- aml_config/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aml_config/config.json b/aml_config/config.json index f6321f71..17b79fb9 100644 --- a/aml_config/config.json +++ b/aml_config/config.json @@ -1,6 +1,6 @@ { "subscription_id": "<>", - "resource_group": "DevOps_AzureML_Demo", + "resource_group": "Svivekan_DevOps_AzureML_Demo", "workspace_name": "AzureML_Demo_Workspace", "location": "westeurope" } From d9fd1692120acd9ce8e98ba01b5e11779cf0938c Mon Sep 17 00:00:00 2001 From: svivekan Date: Mon, 17 Jun 2019 13:59:31 +0100 Subject: [PATCH 7/9] Update config.json --- aml_config/config.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/aml_config/config.json b/aml_config/config.json index 17b79fb9..e99a6643 100644 --- a/aml_config/config.json +++ b/aml_config/config.json @@ -1,6 +1,6 @@ { - "subscription_id": "<>", - "resource_group": "Svivekan_DevOps_AzureML_Demo", - "workspace_name": "AzureML_Demo_Workspace", + "subscription_id": "38502671-55d1-4260-921a-2803653552de", + "resource_group": "AzureMLOps", + "workspace_name": "svivekan-workspace", "location": "westeurope" } From 74301f7b28eddd20ea0a5450d49a5181d68b6f35 Mon Sep 17 00:00:00 2001 From: svivekan Date: Mon, 17 Jun 2019 14:51:45 +0100 Subject: [PATCH 8/9] Subscription id removed --- aml_config/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aml_config/config.json b/aml_config/config.json index e99a6643..439ee48f 100644 --- a/aml_config/config.json +++ b/aml_config/config.json @@ -1,5 +1,5 @@ { - "subscription_id": "38502671-55d1-4260-921a-2803653552de", + "subscription_id": "", "resource_group": "AzureMLOps", "workspace_name": "svivekan-workspace", "location": "westeurope" From 164ac0499a8fd5d50fd6392dd474b4d68eb299d7 Mon Sep 17 00:00:00 2001 From: svivekan Date: Mon, 17 Jun 2019 14:54:57 +0100 Subject: [PATCH 9/9] subscription id added --- aml_config/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aml_config/config.json b/aml_config/config.json index 439ee48f..e99a6643 100644 --- a/aml_config/config.json +++ b/aml_config/config.json @@ -1,5 +1,5 @@ { - "subscription_id": "", + "subscription_id": "38502671-55d1-4260-921a-2803653552de", "resource_group": "AzureMLOps", "workspace_name": "svivekan-workspace", "location": "westeurope"