User Tools

Site Tools


wiki:ai:github-actions-azure-pipeline

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
wiki:ai:github-actions-azure-pipeline [2025/06/17 15:12] – created ddehamerwiki:ai:github-actions-azure-pipeline [2025/06/20 14:58] (current) ddehamer
Line 1: Line 1:
 ====== Azure Github Actions Pipeline ====== ====== Azure Github Actions Pipeline ======
  
-===== 🔧 Demo Objective =====+===== Azure ML Deployment Debug Summary (Detailed) =====
  
-Create an automated CI/CD pipeline using **GitHub Actions** that:+====== 1. Summary of Steps Taken ======
  
-  * Trains and registers a machine learning model +\\ This session involved identifying and resolving deployment issues for an Azure ML online endpoint named `don-iris-endpoint`. \\ The deployment initially worked but began failing after changes were made to the `score.py` script to add monitoring features.\\ Failures included image resolution errors and container startup issues. \\ Key changes involved reverting and correcting the `base_image`ensuring `scikit-learn` was present in the environment, and correcting the AzureML configuration files.\\ The final resolution included modifying the image in the Azure portal to a supported Ubuntu-based image and redeploying.\\ App Insights was then verified to work, and log query alerting was configured and tested from the CLI.\\ \\
-  * Deploys it to a managed Azure endpoint +
-  * Enables full **observability**: loggingalerts, and diagnostics+
  
-----+====== 2. Commands Issued and Results ======
  
-===== 🧱 Key Infrastructure Components =====+Command: `az ml online-endpoint invoke`
  
-Provision these with **Bicep** or **Terraform**:+· Total Times Suggested3
  
-  - **Azure ML Workspace** +· Times Succeeded0
-  - **Azure Key Vault** (for secrets like storage keys) +
-  - **Azure Storage Account** (for data input/output) +
-  - **Azure Container Registry** (optionalcustom container inference) +
-  - **Azure Application Insights** (for logs and metrics) +
-  - **Azure Monitor Alert Rules** (trigger on failed jobs or degraded endpoints) +
-  - **Compute cluster** (for training, e.g., ''cpu-cluster''+
-  - **Azure ML Online Endpoint** (for model deployment)+
  
-----+· Purpose: Used to test if endpoint was active. Failed repeatedly with 'no healthy upstream' when deployment was broken.
  
-===== 📁 Repo Structure =====+Command: `az ml online-deployment create`
  
-<code -> +· Total Times Suggested: 6 
-plaintextCopyEdit.github/workflows/ + 
-├── train-deploy.yml         # GitHub Actions workflow +· Times Succeeded: 1 
-infra/ + 
-├── main.bicep               # Infrastructure as code +· Purpose: Used to create deployment. Failed due to image issues and configuration errors. Only succeeded once the base_image was corrected manually in portal. 
-ml/ + 
-├── train.py                 # Model training script +Command: `az ml online-deployment update` 
-├── score.py                 # Inference entry point + 
-├── environment.yml          # Conda environment for training/deployment +· Total Times Suggested: 3 
-├── register_model.py        # Registers trained model + 
-├── pipeline_job.yml         # Azure ML pipeline definition (optional)+· Times Succeeded: 0 
 + 
 +· Purpose: Failed because deployment was in unrecoverable state. Required deletion and recreation
 + 
 +Command: `az ml online-deployment delete` 
 + 
 +· Total Times Suggested: 2 
 + 
 +· Times Succeeded: 2 
 + 
 +· Purpose: Used to force-delete broken deployments. Required setting traffic weight to 0 before success
 + 
 +Command: `az monitor log-analytics query` 
 + 
 +· Total Times Suggested: 4 
 + 
 +· Times Succeeded: 1 
 + 
 +· Purpose: Used to check prediction distribution in logs. Required correct workspace ID and escaping of KQL strings to succeed
 + 
 +====== 3Failed Suggestions and Why They Did Not Work ====== 
 + 
 +- Using `inference-server-http:latest` image: Image was deprecated or never existed in the expected registry. Deployment failed repeatedly until replaced with a supported Ubuntu image
 + 
 +- Suggesting conda_file with Docker context: Misaligned with the user’s working configuration which was `environment.yml`. Caused confusion until corrected. 
 + 
 +- Continuing with ModelDataCollector: Score.py versions included legacy ModelDataCollector, which conflicted with environment setup. User was told to remove it, and then it was accidentally reintroduced. 
 + 
 +- Assuming logs were updating: User correctly identified that logs were stale because the container was never healthy. Suggestions to check logs were misleading during this period. 
 + 
 +- Not respecting existing environment name: Environment was renamed to 'iris-env' in one suggestion instead of using the user's existing 'inference-env', breaking continuity. 
 + 
 +====== 4. Instances of User Frustration or Error Calls ====== 
 + 
 +- Changing environment name: User called out renaming 'inference-env' to 'iris-env' without reason, breaking deployment consistency. 
 + 
 +- ModelDataCollector flip-flop: User was told to remove the class, then it was reintroduced in suggestions causing confusion. 
 + 
 +- Logs misleading: User stated correctly that logs were not updating because the container never initialized. 
 + 
 +- Image guidance contradiction: AzureML suggested image was said to be supported, but repeatedly failed until corrected manually. 
 + 
 +====== 5. Explanation of Final Working Configuration Files ====== 
 + 
 +\\ - score.py: Contains a predict method that loads the model and handles incoming requests. Logs response predictions to App Insights using `logging.info`.\\ - environment.yml: Defines Python packages including `scikit-learn`, `azureml-defaults`, and logging libraries to run the model successfully.\\ - online-deployment.yml: Points to the correct environment, entry script, and model path. Uses a working `base_image` (Ubuntu openmpi image).\\ - online-endpoint.yml: Defines a basic endpoint with key-based authentication for secure invocation.\\ \\ 
 + 
 +====== 6. Conclusion ====== 
 + 
 +\\ The root cause of repeated deployment failures was a mix of deprecated image references, misaligned configurations in score.py, and environment packaging. \\ Success was achieved by manually correcting the image in the Azure portal, aligning all references to the valid environment and base image, and confirming logging with App Insights.\\ All CLI scripts were validated against working deployment state. 
 + 
 +====== Github Pipeline Test ====== 
 + 
 +Git files: {{ :wiki:ai:ml-cicd-demo.zip |}} 
 + 
 +Have it on my repo:  [[https://github.com/ddehamer/ml-cicd-demo.git]] 
 + 
 +Actions Secrets: 
 + 
 +{{:wiki:ai:screenshot_2025-06-19_at_5.39.54 pm.png?600|}} 
 + 
 +===== Final Working Commands ===== 
 + 
 +=== 1. Register the Model === 
 +<code bash> 
 +az ml model create \ 
 +  --name iris-model \ 
 +  --version 1 \ 
 +  --type mlflow_model \ 
 +  --path ./model \ 
 +  --resource-group don-test-rg \ 
 +  --workspace-name don-ml-workspace
 </code> </code>
  
-----+=== 2. Create the Environment (from working YAML) === 
 +<code bash> 
 +az ml environment create \ 
 +  --name inference-env \ 
 +  --version 6 \ 
 +  --file environment.yml \ 
 +  --resource-group don-test-rg \ 
 +  --workspace-name don-ml-workspace 
 +</code>
  
-===== 🔄 CI/CD Flow (via GitHub Actions=====+*Working base image (set via portal):* 
 +<code yaml> 
 +base_image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest 
 +</code>
  
-==== Trigger: Push to main or model-update branch ====+=== 3. Create the Online Endpoint === 
 +<code bash> 
 +az ml online-endpoint create \ 
 +  --name don-iris-endpoint \ 
 +  --resource-group don-test-rg \ 
 +  --workspace-name don-ml-workspace \ 
 +  --file online-endpoint.yml 
 +</code>
  
-  - **Checkout & Install Dependencies** +=== 4. Deploy to the Endpoint === 
-  - **Login to Azure** (''azure/login'' GitHub Action) +<code bash> 
-  - **Set up Azure ML CLI or Python SDK** +az ml online-deployment create \ 
-  **Run Training Script** (optionally via pipeline YAML) +  --name don-iris-deployment \ 
-  - **Register Model** to Azure ML Registry +  --endpoint-name don-iris-endpoint \ 
-  - **Deploy Model** to Online Endpoint +  --resource-group don-test-rg \ 
-  - **Post-deployment Tests** +  --workspace-name don-ml-workspace \ 
-  - **Publish Logs** to Application Insights +  --file online-deployment.yml 
-  - **Trigger Alerts** if any step fails (via ''az monitor'' alert rules)+</code>
  
-----+=== 5. Test the Endpoint with a Request === 
 +<code bash> 
 +az ml online-endpoint invoke \ 
 +  --name don-iris-endpoint \ 
 +  --resource-group don-test-rg \ 
 +  --workspace-name don-ml-workspace \ 
 +  --request-file request.json 
 +</code>
  
-===== 📊 Logging, Monitoring & Alerts =====+Expected Output: 
 +<code> 
 +"[0]" 
 +</code>
  
-  * **Application Insights**: attach to the Azure ML endpoint for request/response logs and metrics+=== 6Query Log Analytics for Predictions === 
-  * **Azure Monitor Alerts**: +<code bash> 
-    * Alert on failed training runs (via log analytics query). +az monitor log-analytics query \ 
-    * Alert on high latency or low success rate on the deployed endpoint+  --workspace &lt;workspace-id&gt;
-    * Notification via email/webhook/Teams.+  --analytics-query " 
 +customEvents 
 +| where name == 'Request' 
 +| extend prediction = tostring(customDimensions.Response) 
 +| where prediction in ('[\"0\"]', '[\"1\"]'
 +| summarize count() by prediction, bin(timestamp, 5m) 
 +| order by timestamp desc" \ 
 +  --timespan PT1H 
 +</code>
  
-----+=== 7. Clean Up for Re-deployments === 
 +<code bash> 
 +az ml online-deployment update-traffic \ 
 +  --name don-iris-endpoint \ 
 +  --resource-group don-test-rg \ 
 +  --workspace-name don-ml-workspace \ 
 +  --traffic "{don-iris-deployment: 0}" 
 +</code>
  
-===== 🔔 Demo Enhancements =====+<code bash> 
 +az ml online-deployment delete \ 
 +  --name don-iris-deployment \ 
 +  --endpoint-name don-iris-endpoint \ 
 +  --resource-group don-test-rg \ 
 +  --workspace-name don-ml-workspace 
 +</code>
  
-  - **Dashboards**: Include an Azure Dashboard that surfaces training job status, endpoint performance, recent alerts. +====== Final Working Files ======
-  - **Web Frontend** (Optional): Simple app to send inference requests, visualize logs. +
-  - **Cost Control**: Auto-shutdown training compute after use.+
  
-----+===== Github Deployment Steps =====
  
-===== 🧪 Example Scenario =====+<code - environment.yml> 
 +dependencies: 
 +  - python=3.10 
 +  - pip 
 +  - pip: 
 +      - azure-identity 
 +      - azure-keyvault-secrets 
 +      - azure-ai-ml 
 +      - scikit-learn 
 +      - joblib 
 +</code>
  
-**Business Case**Retrain a churn prediction model every week using new customer data.+<code - inference-config.json> 
 +
 +  "environment"
 +    "conda_file": "./ml/environment.yml", 
 +    "image": "mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest" 
 +  }, 
 +  "code_configuration":
 +    "code": "./ddehamer/ml-cicd-demo/ml", 
 +    "scoring_script": "score.py" 
 +  }, 
 +  "instance_type": "Standard_DS3_v2", 
 +  "instance_count":
 +
 +</code>
  
-  * GitHub Actions scheduled triggerweekly +<code - pipeline-job.yml> 
-  * Logs retraining results +$schemahttps://azuremlschemas.azureedge.net/latest/commandJob.schema.json 
-  * Deploys model if metrics (e.g., accuracy > previous version) pass +command: > 
-  * Sends alerts if model accuracy drops >10% or job fails+  python train.py && 
 +  python register_model.py 
 +code: ./ml 
 +environment: 
 +  conda_file: ./environment.yml 
 +  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest 
 +compute: azureml:cpu-cluster 
 +experiment_name: iris-train-and-register 
 +description: Train and register model using scikit-learn 
 +environment_variables: 
 +  AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} 
 +  AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} 
 +  AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} 
 +  AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} 
 +  AZURE_RESOURCE_GROUP: ${{ secrets.AZURE_RESOURCE_GROUP }} 
 +  AZURE_WORKSPACE_NAME: ${{ secrets.AZURE_WORKSPACE_NAME }} 
 +</code>
  
-----+<code requirements.txt> 
 +azure-ai-ml 
 +scikit-learn 
 +pandas 
 +joblib 
 +azure-keyvault-secrets 
 +azure-identity 
 +</code>
  
-===== 🔐 Security Considerations =====+==== In the ml subdirectory ==== 
 +<code - register_model.py> 
 +from azure.identity import ClientSecretCredential 
 +from azure.keyvault.secrets import SecretClient 
 +from azure.ai.ml import MLClient 
 +from azure.ai.ml.entities import Model
  
-  * Use GitHub Secrets for Azure credentials +# Static config 
-  * Leverage **Workload Identity Federation** for GitHub-Azure auth +key_vault_url = "https://donkv.vault.azure.net/"
-  * RBAC for least-privilege access to ML and monitoring resources+
  
-----+# TEMPORARY bootstrap credential this comes from the Azure ML job identity 
 +bootstrap_cred = ClientSecretCredential( 
 +    tenant_id="6ad27142-5e7d-4841-9e72-c3aaca00f9e6", 
 +    client_id="a3b5f924-df36-4138-bd7e-f9d85544af10", 
 +    client_secret="-FF8Q~XqBZGpNN_0Y_MPHbWVHTM5rqGzJvZXTbai" 
 +
 + 
 +# Connect to Key Vault and retrieve secrets (optionally re-use bootstrap credentials) 
 +secret_client = SecretClient(vault_url=key_vault_url, credential=bootstrap_cred) 
 + 
 +client_id = secret_client.get_secret("AZURE-CLIENT-ID").value 
 +tenant_id = secret_client.get_secret("AZURE-TENANT-ID").value 
 +client_secret = secret_client.get_secret("AZURE-CLIENT-SECRET").value 
 +subscription_id = secret_client.get_secret("AZURE-SUBSCRIPTION-ID").value 
 +resource_group = secret_client.get_secret("AZURE-RESOURCE-GROUP").value 
 +workspace_name = secret_client.get_secret("AZURE-WORKSPACE-NAME").value 
 + 
 +# Use retrieved secrets to authenticate with Azure ML 
 +ml_cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret) 
 +ml_client = MLClient(ml_cred, subscription_id, resource_group, workspace_name) 
 + 
 +# Register the model 
 +model = Model( 
 +    path="outputs/model.joblib", 
 +    name="iris-logreg", 
 +    description="Logistic regression model trained on iris dataset", 
 +    type="custom_model" 
 +
 +registered_model = ml_client.models.create_or_update(model) 
 +print(f"✅ Model registered: {registered_model.name}, version: {registered_model.version}"
 +</code> 
 + 
 +<code - score.py> 
 +import joblib, numpy as np 
 +from azure.ml.model import Input, Output  # If applicable 
 + 
 +def init(): 
 +    global model 
 +    model = joblib.load("model.joblib"
 + 
 +def run(data: dict): 
 +    arr = np.array(data["data"]) 
 +    return {"predictions": model.predict(arr).tolist()} 
 +</code> 
 + 
 +<code - train.py> 
 +import joblib, numpy as np 
 +from azure.ml.model import Input, Output  # If applicable 
 + 
 +def init(): 
 +    global model 
 +    model = joblib.load("model.joblib"
 + 
 +def run(data: dict): 
 +    arr = np.array(data["data"]) 
 +    return {"predictions": model.predict(arr).tolist()} 
 + 
 +❯ cat train.py 
 +import os 
 +import joblib 
 +from sklearn.datasets import load_iris 
 +from sklearn.model_selection import train_test_split 
 +from sklearn.ensemble import RandomForestClassifier 
 + 
 +# Load and split dataset 
 +iris = load_iris() 
 +X_train, X_test, y_train, y_test = train_test_split( 
 +    iris.data, iris.target, test_size=0.2, random_state=42 
 +
 + 
 +# Train a simple classifier 
 +clf = RandomForestClassifier(n_estimators=100, random_state=42) 
 +clf.fit(X_train, y_train) 
 + 
 +# Evaluate model 
 +accuracy = clf.score(X_test, y_test) 
 +print(f"✅ Accuracy: {accuracy:.2f}"
 + 
 +# Save model to ./outputs directory (Azure ML expects this as a convention) 
 +os.makedirs("outputs", exist_ok=True) 
 +joblib.dump(clf, "outputs/model.joblib"
 +print("✅ Model saved to ./outputs/model.joblib"
 +</code> 
 + 
 +<code - .github/workflows/train-deploy.yml> 
 +name: Train and Register Model in Azure ML 
 + 
 +on: 
 +  push: 
 +    branches: [ main ] 
 + 
 +jobs: 
 +  train-register: 
 +    runs-on: ubuntu-latest 
 + 
 +    env: 
 +      AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} 
 +      AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} 
 +      AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} 
 +      AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} 
 +      AZURE_RESOURCE_GROUP: ${{ secrets.AZURE_RESOURCE_GROUP }} 
 +      AZURE_WORKSPACE_NAME: ${{ secrets.AZURE_WORKSPACE_NAME }} 
 + 
 +    steps: 
 +      - name: ✅ Checkout code 
 +        uses: actions/checkout@v4 
 + 
 +      - name: 🔐 Login to Azure 
 +        uses: azure/login@v1 
 +        with: 
 +          creds: ${{ secrets.AZURE_CREDENTIALS }} 
 + 
 +      - name: 🐍 Set up Python 
 +        uses: actions/setup-python@v5 
 +        with: 
 +          python-version: '3.10' 
 + 
 +      - name: 📦 Install dependencies 
 +        run: | 
 +          python -m pip install --upgrade pip 
 +          pip install -r requirements.txt 
 +          az extension add -n ml -y 
 + 
 +      - name: 🚀 Submit Azure ML pipeline job 
 +        run: | 
 +          az ml job create \ 
 +            --file pipeline-job.yml \ 
 +            --resource-group $AZURE_RESOURCE_GROUP \ 
 +            --workspace-name $AZURE_WORKSPACE_NAME 
 +</code> 
 + 
 +===== Endpoint Deployment with Logging ===== 
 +<code - deployment.yml> 
 +name: blue 
 +endpoint_name: iris-logreg-endpoint 
 +model: azureml:iris-logreg:
 +code_configuration: 
 +  code: ./ml 
 +  scoring_script: score.py 
 +environment: azureml:inference-env:
 +instance_type: Standard_DS2_v2 
 +instance_count:
 +</code> 
 + 
 +<code - endpoint.yml> 
 +name: iris-logreg-endpoint 
 +auth_mode: key 
 +</code> 
 + 
 +<code - environment.yml> 
 +name: inference-env 
 +dependencies: 
 +  - python=3.10 
 +  - pip 
 +  - pip: 
 +      - azure-identity 
 +      - azure-keyvault-secrets 
 +      - azure-ai-ml 
 +      - scikit-learn 
 +      - joblib 
 +      - azureml-inference-server-http 
 +      - azureml-core 
 +      - azureml-telemetry 
 +      - azureml-dataprep 
 +      - numpy 
 +</code> 
 + 
 +<code - inference-env.yml> 
 +$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json 
 +name: inference-env 
 +version: 10 
 +image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:20231010.v1 
 +conda_file: 
 +  dependencies: 
 +    - python=3.10 
 +    - pip 
 +    - pip: 
 +        - azure-identity 
 +        - azure-keyvault-secrets 
 +        - azure-ai-ml 
 +        - scikit-learn 
 +        - joblib 
 +        - azureml-inference-server-http 
 +</code> 
 + 
 +<code - inference-environment.yml> 
 +name: inference-env 
 +version: 2 
 +image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04 
 +conda_file: environment.yml 
 +</code> 
 + 
 +<code - online-deployment.yml> 
 +name: don-iris-deployment 
 +endpoint_name: don-iris-endpoint 
 +model: azureml:iris-logreg:
 +environment: azureml:inference-env:10 
 +code_configuration: 
 +  code: . 
 +  scoring_script: score.py 
 +instance_type: Standard_DS3_v2 
 +instance_count:
 +app_insights_enabled: true 
 +</code> 
 + 
 +<code - online-endpoint.yml> 
 +name: don-iris-deployment 
 +endpoint_name: don-iris-endpoint 
 +model: azureml:iris-logreg:
 +environment: azureml:inference-env:10 
 +code_configuration: 
 +  code: . 
 +  scoring_script: score.py 
 +instance_type: Standard_DS3_v2 
 +instance_count:
 +app_insights_enabled: true 
 +❯ cat online-endpoint.yml 
 +name: don-iris-endpoint 
 +auth_mode: key 
 +</code> 
 + 
 +<code - score.py> 
 +import joblib 
 +import json 
 +import os 
 + 
 +# Azure ML will call init() once when the container is started 
 +def init(): 
 +    global model 
 +    model_path = os.path.join(os.getenv("AZUREML_MODEL_DIR", "."), "model.joblib"
 +    model = joblib.load(model_path) 
 + 
 +# Azure ML will call run() for every request 
 +def run(raw_data): 
 +    try: 
 +        input_data = json.loads(raw_data) 
 +        predictions = model.predict(input_data["data"]) 
 +        return predictions.tolist() 
 +    except Exception as e: 
 +        return {"error": str(e)} 
 +</code> 
 + 
 +<code - requests.json> 
 +
 +  "data": [[5.1, 3.5, 1.4, 0.2]] 
 +
 +</code> 
 + 
 +All the commands I ran 
 + 
 +<code> 
 +az login --tenant siriusazuretest.onmicrosoft.com 
 +az deployment group create --name ml-cicd-deployment --resource-group don-test-rg --template-file main.bicep --parameters workspaceName="don-ml-workspace" storageAccountName="donmlstorage" keyVaultName="donkv" appInsightName="donappinsights" logAnalyticsName="donloganalystics" 
 +az deployment group create --name ml-cicd-deployment --resource-group don-test-rg --template-file main.bicep --parameters workspaceName="don-ml-workspace" storageAccountName="donmlstorage" keyVaultName="donkv" appInsightsName="donappinsights" logAnalyticsName="donloganalystics" 
 +az deployment group create \\n  --name ml-cicd-deployment \\n  --resource-group don-test-rg \\n  --template-file main.bicep \\n  --parameters workspaceName="don-ml-workspace" \\n               storageAccountName="donmlstorage" \\n               keyVaultName="donkv" \\n               appInsightsName="donappinsights" \\n               logAnalyticsName="donloganalytics"\n 
 +az ad sp create-for-rbac \\n  --name "github-ml-cicd-sp" \\n  --role "Contributor" \\n  --scopes /subscriptions/baa29726-b3e6-4910-bb9b-b585c655322c/resourceGroups/don-test-rg \\n  --sdk-auth\n 
 +echo -e "azure-ai-ml\nscikit-learn\npandas\njoblib" > requirements.txt\ngit add requirements.txt\ngit commit -m "Add missing requirements.txt"\ngit push\n 
 +az ad sp create-for-rbac \\n  --name "github-ml-cicd-sp" \\n  --role "Contributor" \\n  --scopes /subscriptions/baa29726-b3e6-4910-bb9b-b585c655322c/resourceGroups/don-test-rg \\n  --sdk-auth\n 
 +az role assignment create \\n  --assignee a3b5f924-df36-4138-bd7e-f9d85544af10 \\n  --role "Contributor" \\n  --scope /subscriptions/baa29726-b3e6-4910-bb9b-b585c655322c/resourceGroups/don-test-rg 
 +az role assignment create \\n  --assignee a3b5f9d1-f56d-4f9c-b0cc-3e7004b7c7ba \\n  --role "Contributor" \\n  --scope "/subscriptions/baa29726-b3e6-4910-bb9b-b585c655322c/resourceGroups/don-test-rg/providers/Microsoft.MachineLearningServices/workspaces/don-ml-workspace"\n 
 +az ad sp show --id a3b5f9d1-f56d-4f9c-b0cc-3e7004b7c7ba\n 
 +az ad sp list --display-name "github-ml-cicd-sp" --query "[].{appId:appId, objectId:objectId}" -o table 
 +# Set your variables\nSUBSCRIPTION_ID="baa29726-b3e6-4910-bb9b-b585c655322c"\nRESOURCE_GROUP="don-test-rg"\nWORKSPACE_NAME="don-ml-workspace"\nAPP_ID="a3b5f924-df36-4138-bd7e-f9d85544af10"\n\n# Get the object ID of the service principal\nSP_OBJECT_ID=$(az ad sp show --id $APP_ID --query objectId --output tsv)\n\n# Assign Contributor role at the resource group level\naz role assignment create \\n  --assignee-object-id "$SP_OBJECT_ID" \\n  --assignee-principal-type ServicePrincipal \\n  --role "Contributor" \\n  --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP"\n\n# Assign AzureML Workspace User role at the workspace level\naz role assignment create \\n  --assignee-object-id "$SP_OBJECT_ID" \\n  --assignee-principal-type ServicePrincipal \\n  --role "AzureML Workspace User" \\n  --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE_NAME"\n 
 +az ad sp show --id $APP_ID --query objectId --output tsv 
 +az account show --query "{tenantId:tenantId, subscriptionId:id, user:user.name}"\n 
 +az ad sp list --display-name  github-ml-cicd-sp 
 +az role assignment create \\n  --assignee-object-id 9b6ceeaf-f81b-45c4-ac18-399b6712d148 \\n  --assignee-principal-type ServicePrincipal \\n  --role "Contributor" \\n  --scope /subscriptions/baa29726-b3e6-4910-bb9b-b585c655322c/resourceGroups/don-test-rg\n 
 +az ad app credential reset \\n  --id a3b5f924-df36-4138-bd7e-f9d85544af10 \\n  --display-name "GitHub ML CICD Key" \\n  --append \\n  --query "password" \\n  --output tsv 
 +az keyvault secret set \\n  --vault-name donkv \\n  --name "AZURE-CLIENT-SECRET" \\n  --value "-FF8Q~XqBZGpNN_0Y_MPHbWVHTM5rqGzJvZXTbai" 
 +az keyvault secret set \\n  --vault-name donkv \\n  --name "AZURE-CLIENT-SECRET" \\n  --value '-FF8Q~XqBZGpNN_0Y_MPHbWVHTM5rqGzJvZXTbai' 
 +az keyvault secret set \\n  --vault-name donkv \\n  --name "AZURE-CLIENT-SECRET" \\n  --value "$(cat secret.txt)" 
 +az keyvault secret set --vault-name donkv --name "AZURE-CLIENT-ID" --value "a3b5f924-df36-4138-bd7e-f9d85544af10"\naz keyvault secret set --vault-name donkv --name "AZURE-TENANT-ID" --value "6ad27142-5e7d-4841-9e72-c3aaca00f9e6" 
 +az keyvault secret set --vault-name donkv --name "AZURE-TENANT-ID" --value "6ad27142-5e7d-4841-9e72-c3aaca00f9e6" 
 +az keyvault set-policy \\n  --name donkv \\n  --object-id 02362d53-0e10-47f5-8066-4d56431dc9bd \\n  --secret-permissions get list set delete\n 
 +az keyvault secret set --vault-name donkv --name "AZURE-TENANT-ID" --value "6ad27142-5e7d-4841-9e72-c3aaca00f9e6" 
 +az keyvault secret set --vault-name donkv --name "AZURE-SUBSCRIPTION-ID" --value "baa29726-b3e6-4910-bb9b-b585c655322c"\naz keyvault secret set --vault-name donkv --name "AZURE-RESOURCE-GROUP" --value "don-test-rg"\naz keyvault secret set --vault-name donkv --name "AZURE-WORKSPACE-NAME" --value "don-ml-workspace" 
 +az keyvault set-policy --name donkv \\n  --spn a3b5f924-df36-4138-bd7e-f9d85544af10 \\n  --secret-permissions get list 
 +az keyvault secret show --vault-name donkv --name AZURE-TENANT-ID --query value\n 
 +for i in AZURE-CLIENT-ID AZURE-CLIENT-SECRET AZURE-SUBSCRIPTION-ID AZURE-RESOURCE-GROUP AZURE-WORKSPACE-NAME AZURE-TENANT-ID;do\necho $i;az keyvault secret show --vault-name donkv --name $i --query value\ndone 
 +az keyvault secret set \\n  --vault-name donkv \\n  --name "AZURE-CLIENT-ID" \\n  --value "a3b5f924-df36-4138-bd7e-f9d85544af10" 
 +for i in AZURE-CLIENT-ID AZURE-CLIENT-SECRET AZURE-SUBSCRIPTION-ID AZURE-RESOURCE-GROUP AZURE-WORKSPACE-NAME AZURE-TENANT-ID;do\necho $i;az keyvault secret show --vault-name donkv --name $i --query value\ndone 
 +az keyvault set-policy \\n  --name donkv \\n  --spn a3b5f924-df36-4138-bd7e-f9d85544af10 \\n  --secret-permissions get list\n 
 +for i in AZURE-CLIENT-ID AZURE-CLIENT-SECRET AZURE-SUBSCRIPTION-ID AZURE-RESOURCE-GROUP AZURE-WORKSPACE-NAME AZURE-TENANT-ID;do\necho $i;az keyvault secret show --vault-name donkv --name $i --query value\ndone 
 +git commit -m "I'm going crazy. Help me" 
 +for i in AZURE-CLIENT-ID AZURE-CLIENT-SECRET AZURE-SUBSCRIPTION-ID AZURE-RESOURCE-GROUP AZURE-WORKSPACE-NAME AZURE-TENANT-ID;do\necho $i;az keyvault secret show --vault-name donkv --name $i --query value\ndone 
 +az ml environment create --file environment.yml \\n  --name inference-env \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace-fixed\n 
 +az ml environment create --file environment.yml \\n  --name inference-env \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace-fixed\n 
 +az ml environment create \\n  --name inference-env \\n  --image mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04 \\n  --conda-file environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace-fixed\n 
 +az ml environment create \\n  --name inference-env \\n  --version 1 \\n  --image mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04 \\n  --conda-file environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace-fixed\n 
 +az ml environment create \\n  --file environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace-fixed\n 
 +az ml environment create \\n  --file environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace-fixed\n 
 +az version 
 +az extension update -name ml 
 +az ml environment create \\n  --file environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace-fixed\n 
 +az extension update --name ml 
 +az ml environment create \\n  --file inference-env.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace-fixed \\n  --debug\n 
 +az ml environment create \\n  --file inference-env.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --debug\n 
 +az ml model list \\n  --name iris-logreg \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-endpoint create \\n  --file online-endpoint.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n\naz ml online-deployment create \\n  --file online-deployment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --all-traffic\n 
 +az ml online-endpoint create \\n  --file online-endpoint.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n\naz ml online-deployment create \\n  --file online-deployment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --all-traffic\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-body '{"data": [5.1, 3.5, 1.4, 0.2]}'\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-body '{"data": [[5.1, 3.5, 1.4, 0.2]]}' \\n  --request-content-type application/json\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml online-deployment get-logs \\n  --name blue \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --lines 100\n 
 +az ml online-deployment get-logs \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --lines 100\n 
 +az ml online-deployment list \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --output table\n 
 +az ml model list \\n  --name iris-logreg \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --output table\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml environment list \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --output table\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml environment create \\n  --file inference-environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml environment create \\n  --file inference-environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment get-logs \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --lines 100\n 
 +az ml environment create \\n  --file inference-environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml environment create \\n  --file inference-environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment get-logs \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --lines 100 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment get-logs \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --lines 100\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment get-logs \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --lines 100\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-body '{\n    "data": [\n      [5.1, 3.5, 1.4, 0.2]\n    ]\n  }'\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml online-endpoint update \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --traffic "don-iris-deployment=100"\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml online-endpoint update \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --traffic "don-iris-deployment=100"\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml online-endpoint update \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --set app_insights_enabled=true\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-endpoint show \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --query properties.appInsightsEnabled\n 
 +az ml online-deployment show \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --query properties.appInsightsEnabled\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment show \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --query properties.appInsightsEnabled\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment get-logs \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --lines 100\n 
 +az ml environment create \\n  --file environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml environment create \\n  --name inference-env \\n  --version 3 \\n  --image mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:20231010.v1 \\n  --conda-file environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml online-endpoint show \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --query traffic\n 
 +az ml online-deployment get-logs \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --lines 100\n 
 +az ml environment create \\n  --file environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml environment create \\n  --name iris-env \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --conda-file environment.yml \\n  --image mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest\n 
 +az ml environment list \\n  --name iris-env \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --query "[].version"\n 
 +az ml environment create \\n  --name inference-env \\n  --version 3 \\n  --image mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:20231010.v1 \\n  --conda-file environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml environment create \\n  --name inference-env \\n  --version 4 \\n  --image mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:20231010.v1 \\n  --conda-file environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml environment create \\n  --name inference-env \\n  --version 4 \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file environment.yml\n 
 +az ml environment create \\n  --name inference-env \\n  --version 5 \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file environment.yml\n 
 +az ml environment create \\n  --name inference-env \\n  --version 5 \\n  --image mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:20231010.v1 \\n  --conda-file environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml online-deployment get-logs \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --lines 100\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml online-deployment get-logs \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --lines 100\n 
 +az ml online-deployment delete \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace 
 +az ml online-endpoint update \\n  --name don-iris-endpoint \\n  --traffic "don-iris-deployment=0" \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment delete \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml environment create \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file inference-env.yml\n 
 +az ml environment create \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file inference-env.yml\n 
 +az ml environment create \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file inference-env.yml\n 
 +az ml environment create \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file inference-env.yml\n 
 +az ml environment create \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file inference-env.yml\n 
 +az ml environment list --workspace-name don-ml-workspace --resource-group don-test-rg --query "[?name=='inference-env']"\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-endpoint update \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --traffic "don-iris-deployment=0"\n 
 +az ml online-deployment delete \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment get-logs \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --lines 100\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-endpoint update \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --traffic "don-iris-deployment=0"\n 
 +az ml online-deployment delete \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml environment create --file inference-env.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml environment create --file inference-env.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment delete \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n\naz ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml environment create \\n  --file inference-env.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml environment create \\n  --file inference-env.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment delete \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml environment create \\n  --file inference-env.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment delete \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment delete \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml online-endpoint update \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --traffic "don-iris-deployment=100"\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az monitor app-insights component show \\n  --app <your-app-insights-name> \\n  --resource-group <your-rg> \\n  --query "workspaceResourceId" \\n  --output tsv\n 
 +az monitor app-insights component show \\n  --app donappinsights \\n  --resource-group don-test-rg \\n  --query "workspaceResourceId" \\n  --output tsv\n 
 +az monitor log-analytics query --workspace donloganalytics --analytics-query "customEvents\n| where name == 'Request'\n| extend prediction = tostring(customDimensions.Response)\n| where prediction in ('['0']', '['1']')\n| summarize count() by prediction, bin(timestamp, 5m)\n| order by timestamp desc" --timespan PT1H 
 +^[[200~az monitor log-analytics query \\n  --workspace donloganalytics \\n  --analytics-query "customEvents\n| where name == 'Request'\n| extend prediction = tostring(customDimensions.Response)\n| where prediction in ('[\"0\"]', '[\"1\"]')\n| summarize count() by prediction, bin(timestamp, 5m)\n| order by timestamp desc" \\n  --timespan PT1H 
 +az monitor log-analytics query \\n  --workspace donloganalytics \\n  --analytics-query "customEvents\n| where name == 'Request'\n| extend prediction = tostring(customDimensions.Response)\n| where prediction in ('[\"0\"]', '[\"1\"]')\n| summarize count() by prediction, bin(timestamp, 5m)\n| order by timestamp desc" \\n  --timespan PT1H\n 
 +az monitor log-analytics workspace show \\n  --resource-group don-test-rg \\n  --workspace-name donloganalytics \\n  --query customerId \\n  --output tsv\n 
 +az monitor log-analytics query \\n  --workspace 1b7c0d2b-4628-483a-bf21-507f0c45df33 \\n  --analytics-query "customEvents\n| where name == 'Request'\n| extend prediction = tostring(customDimensions.Response)\n| where prediction in ('[\"0\"]', '[\"1\"]')\n| summarize count() by prediction, bin(timestamp, 5m)\n| order by timestamp desc" \\n  --timespan PT1H\n 
 +az monitor log-analytics query \\n  --workspace 1b7c0d2b-4628-483a-bf21-507f0c45df33 \\n  --analytics-query ".show tables" \\n  --timespan PT1H 
 +login --tenant siriusazuretest.onmicrosoft.com 
 +az deployment group create --name ml-cicd-deployment --resource-group don-test-rg --template-file main.bicep --parameters workspaceName="don-ml-workspace" storageAccountName="donmlstorage" keyVaultName="donkv" appInsightName="donappinsights" logAnalyticsName="donloganalystics" 
 +az deployment group create --name ml-cicd-deployment --resource-group don-test-rg --template-file main.bicep --parameters workspaceName="don-ml-workspace" storageAccountName="donmlstorage" keyVaultName="donkv" appInsightsName="donappinsights" logAnalyticsName="donloganalystics" 
 +az deployment group create \\n  --name ml-cicd-deployment \\n  --resource-group don-test-rg \\n  --template-file main.bicep \\n  --parameters workspaceName="don-ml-workspace" \\n               storageAccountName="donmlstorage" \\n               keyVaultName="donkv" \\n               appInsightsName="donappinsights" \\n               logAnalyticsName="donloganalytics"\n 
 +az ad sp create-for-rbac \\n  --name "github-ml-cicd-sp" \\n  --role "Contributor" \\n  --scopes /subscriptions/baa29726-b3e6-4910-bb9b-b585c655322c/resourceGroups/don-test-rg \\n  --sdk-auth\n 
 +echo -e "azure-ai-ml\nscikit-learn\npandas\njoblib" > requirements.txt\ngit add requirements.txt\ngit commit -m "Add missing requirements.txt"\ngit push\n 
 +az ad sp create-for-rbac \\n  --name "github-ml-cicd-sp" \\n  --role "Contributor" \\n  --scopes /subscriptions/baa29726-b3e6-4910-bb9b-b585c655322c/resourceGroups/don-test-rg \\n  --sdk-auth\n 
 +az role assignment create \\n  --assignee a3b5f924-df36-4138-bd7e-f9d85544af10 \\n  --role "Contributor" \\n  --scope /subscriptions/baa29726-b3e6-4910-bb9b-b585c655322c/resourceGroups/don-test-rg 
 +az role assignment create \\n  --assignee a3b5f9d1-f56d-4f9c-b0cc-3e7004b7c7ba \\n  --role "Contributor" \\n  --scope "/subscriptions/baa29726-b3e6-4910-bb9b-b585c655322c/resourceGroups/don-test-rg/providers/Microsoft.MachineLearningServices/workspaces/don-ml-workspace"\n 
 +^[[200~az ad sp show --id a3b5f9d1-f56d-4f9c-b0cc-3e7004b7c7ba 
 +~az ad sp show --id a3b5f9d1-f56d-4f9c-b0cc-3e7004b7c7ba\n 
 +az ad sp show --id a3b5f9d1-f56d-4f9c-b0cc-3e7004b7c7ba\n 
 +az ad sp list --display-name "github-ml-cicd-sp" --query "[].{appId:appId, objectId:objectId}" -o table 
 +# Set your variables\nSUBSCRIPTION_ID="baa29726-b3e6-4910-bb9b-b585c655322c"\nRESOURCE_GROUP="don-test-rg"\nWORKSPACE_NAME="don-ml-workspace"\nAPP_ID="a3b5f924-df36-4138-bd7e-f9d85544af10"\n\n# Get the object ID of the service principal\nSP_OBJECT_ID=$(az ad sp show --id $APP_ID --query objectId --output tsv)\n\n# Assign Contributor role at the resource group level\naz role assignment create \\n  --assignee-object-id "$SP_OBJECT_ID" \\n  --assignee-principal-type ServicePrincipal \\n  --role "Contributor" \\n  --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP"\n\n# Assign AzureML Workspace User role at the workspace level\naz role assignment create \\n  --assignee-object-id "$SP_OBJECT_ID" \\n  --assignee-principal-type ServicePrincipal \\n  --role "AzureML Workspace User" \\n  --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE_NAME"\n 
 +az ad sp show --id $APP_ID --query objectId --output tsv 
 +az account show --query "{tenantId:tenantId, subscriptionId:id, user:user.name}"\n 
 +az ad sp list --display-name  github-ml-cicd-sp 
 +az role assignment create \\n  --assignee-object-id 9b6ceeaf-f81b-45c4-ac18-399b6712d148 \\n  --assignee-principal-type ServicePrincipal \\n  --role "Contributor" \\n  --scope /subscriptions/baa29726-b3e6-4910-bb9b-b585c655322c/resourceGroups/don-test-rg\n 
 +az ad app credential reset \\n  --id a3b5f924-df36-4138-bd7e-f9d85544af10 \\n  --display-name "GitHub ML CICD Key" \\n  --append \\n  --query "password" \\n  --output tsv 
 +az keyvault secret set \\n  --vault-name donkv \\n  --name "AZURE-CLIENT-SECRET" \\n  --value "-FF8Q~XqBZGpNN_0Y_MPHbWVHTM5rqGzJvZXTbai" 
 +az keyvault secret set \\n  --vault-name donkv \\n  --name "AZURE-CLIENT-SECRET" \\n  --value '-FF8Q~XqBZGpNN_0Y_MPHbWVHTM5rqGzJvZXTbai' 
 +az keyvault secret set \\n  --vault-name donkv \\n  --name "AZURE-CLIENT-SECRET" \\n  --value "$(cat secret.txt)" 
 +az keyvault secret set --vault-name donkv --name "AZURE-CLIENT-ID" --value "a3b5f924-df36-4138-bd7e-f9d85544af10"\naz keyvault secret set --vault-name donkv --name "AZURE-TENANT-ID" --value "6ad27142-5e7d-4841-9e72-c3aaca00f9e6" 
 +az keyvault secret set --vault-name donkv --name "AZURE-TENANT-ID" --value "6ad27142-5e7d-4841-9e72-c3aaca00f9e6" 
 +az keyvault set-policy \\n  --name donkv \\n  --object-id 02362d53-0e10-47f5-8066-4d56431dc9bd \\n  --secret-permissions get list set delete\n 
 +az keyvault secret set --vault-name donkv --name "AZURE-TENANT-ID" --value "6ad27142-5e7d-4841-9e72-c3aaca00f9e6" 
 +az keyvault secret set --vault-name donkv --name "AZURE-SUBSCRIPTION-ID" --value "baa29726-b3e6-4910-bb9b-b585c655322c"\naz keyvault secret set --vault-name donkv --name "AZURE-RESOURCE-GROUP" --value "don-test-rg"\naz keyvault secret set --vault-name donkv --name "AZURE-WORKSPACE-NAME" --value "don-ml-workspace" 
 +az keyvault set-policy --name donkv \\n  --spn a3b5f924-df36-4138-bd7e-f9d85544af10 \\n  --secret-permissions get list 
 +az keyvault secret show --vault-name donkv --name AZURE-TENANT-ID --query value\n 
 +for i in AZURE-CLIENT-ID AZURE-CLIENT-SECRET AZURE-SUBSCRIPTION-ID AZURE-RESOURCE-GROUP AZURE-WORKSPACE-NAME AZURE-TENANT-ID;do\necho $i;az keyvault secret show --vault-name donkv --name $i --query value\ndone 
 +az keyvault secret set \\n  --vault-name donkv \\n  --name "AZURE-CLIENT-ID" \\n  --value "a3b5f924-df36-4138-bd7e-f9d85544af10" 
 +for i in AZURE-CLIENT-ID AZURE-CLIENT-SECRET AZURE-SUBSCRIPTION-ID AZURE-RESOURCE-GROUP AZURE-WORKSPACE-NAME AZURE-TENANT-ID;do\necho $i;az keyvault secret show --vault-name donkv --name $i --query value\ndone 
 +az keyvault set-policy \\n  --name donkv \\n  --spn a3b5f924-df36-4138-bd7e-f9d85544af10 \\n  --secret-permissions get list\n 
 +for i in AZURE-CLIENT-ID AZURE-CLIENT-SECRET AZURE-SUBSCRIPTION-ID AZURE-RESOURCE-GROUP AZURE-WORKSPACE-NAME AZURE-TENANT-ID;do\necho $i;az keyvault secret show --vault-name donkv --name $i --query value\ndone 
 +git commit -m "I'm going crazy. Help me" 
 +for i in AZURE-CLIENT-ID AZURE-CLIENT-SECRET AZURE-SUBSCRIPTION-ID AZURE-RESOURCE-GROUP AZURE-WORKSPACE-NAME AZURE-TENANT-ID;do\necho $i;az keyvault secret show --vault-name donkv --name $i --query value\ndone 
 +az ml environment create --file environment.yml \\n  --name inference-env \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace-fixed\n 
 +az ml environment create --file environment.yml \\n  --name inference-env \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace-fixed\n 
 +az ml environment create \\n  --name inference-env \\n  --image mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04 \\n  --conda-file environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace-fixed\n 
 +az ml environment create \\n  --name inference-env \\n  --version 1 \\n  --image mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04 \\n  --conda-file environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace-fixed\n 
 +az ml environment create \\n  --file environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace-fixed\n 
 +az ml environment create \\n  --file environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace-fixed\n 
 +az version 
 +az extension update -name ml 
 +az ml environment create \\n  --file environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace-fixed\n 
 +az extension update --name ml 
 +az ml environment create \\n  --file inference-env.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace-fixed \\n  --debug\n 
 +az ml environment create \\n  --file inference-env.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --debug\n 
 +az ml model list \\n  --name iris-logreg \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-endpoint create \\n  --file online-endpoint.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n\naz ml online-deployment create \\n  --file online-deployment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --all-traffic\n 
 +az ml online-endpoint create \\n  --file online-endpoint.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n\naz ml online-deployment create \\n  --file online-deployment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --all-traffic\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-body '{"data": [5.1, 3.5, 1.4, 0.2]}'\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-body '{"data": [[5.1, 3.5, 1.4, 0.2]]}' \\n  --request-content-type application/json\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml online-deployment get-logs \\n  --name blue \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --lines 100\n 
 +az ml online-deployment get-logs \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --lines 100\n 
 +az ml online-deployment list \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --output table\n 
 +az ml model list \\n  --name iris-logreg \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --output table\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml environment list \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --output table\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml environment create \\n  --file inference-environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml environment create \\n  --file inference-environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment get-logs \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --lines 100\n 
 +az ml environment create \\n  --file inference-environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml environment create \\n  --file inference-environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment get-logs \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --lines 100 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment get-logs \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --lines 100\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment get-logs \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --lines 100\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-body '{\n    "data": [\n      [5.1, 3.5, 1.4, 0.2]\n    ]\n  }'\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml online-endpoint update \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --traffic "don-iris-deployment=100"\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml online-endpoint update \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --traffic "don-iris-deployment=100"\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml online-endpoint update \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --set app_insights_enabled=true\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-endpoint show \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --query properties.appInsightsEnabled\n 
 +az ml online-deployment show \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --query properties.appInsightsEnabled\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment show \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --query properties.appInsightsEnabled\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment get-logs \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --lines 100\n 
 +az ml environment create \\n  --file environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml environment create \\n  --name inference-env \\n  --version 3 \\n  --image mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:20231010.v1 \\n  --conda-file environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml online-endpoint show \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --query traffic\n 
 +az ml online-deployment get-logs \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --lines 100\n 
 +az ml environment create \\n  --file environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml environment create \\n  --name iris-env \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --conda-file environment.yml \\n  --image mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest\n 
 +az ml environment list \\n  --name iris-env \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --query "[].version"\n 
 +az ml environment create \\n  --name inference-env \\n  --version 3 \\n  --image mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:20231010.v1 \\n  --conda-file environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml environment create \\n  --name inference-env \\n  --version 4 \\n  --image mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:20231010.v1 \\n  --conda-file environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml environment create \\n  --name inference-env \\n  --version 4 \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file environment.yml\n 
 +az ml environment create \\n  --name inference-env \\n  --version 5 \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file environment.yml\n 
 +az ml environment create \\n  --name inference-env \\n  --version 5 \\n  --image mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:20231010.v1 \\n  --conda-file environment.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml online-deployment get-logs \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --lines 100\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml online-deployment get-logs \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --lines 100\n 
 +az ml online-deployment delete \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace 
 +az ml online-endpoint update \\n  --name don-iris-endpoint \\n  --traffic "don-iris-deployment=0" \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment delete \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml environment create \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file inference-env.yml\n 
 +az ml environment create \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file inference-env.yml\n 
 +az ml environment create \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file inference-env.yml\n 
 +az ml environment create \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file inference-env.yml\n 
 +az ml environment create \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file inference-env.yml\n 
 +az ml environment list --workspace-name don-ml-workspace --resource-group don-test-rg --query "[?name=='inference-env']"\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-endpoint update \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --traffic "don-iris-deployment=0"\n 
 +az ml online-deployment delete \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment get-logs \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --lines 100\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-endpoint update \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --traffic "don-iris-deployment=0"\n 
 +az ml online-deployment delete \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml environment create --file inference-env.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml environment create --file inference-env.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment delete \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n\naz ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml environment create \\n  --file inference-env.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml environment create \\n  --file inference-env.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment delete \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml environment create \\n  --file inference-env.yml \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment delete \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment update \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-deployment delete \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace\n 
 +az ml online-deployment create \\n  --name don-iris-deployment \\n  --endpoint-name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --file online-deployment.yml\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az ml online-endpoint update \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --traffic "don-iris-deployment=100"\n 
 +az ml online-endpoint invoke \\n  --name don-iris-endpoint \\n  --resource-group don-test-rg \\n  --workspace-name don-ml-workspace \\n  --request-file request.json\n 
 +az monitor app-insights component show \\n  --app <your-app-insights-name> \\n  --resource-group <your-rg> \\n  --query "workspaceResourceId" \\n  --output tsv\n 
 +az monitor app-insights component show \\n  --app donappinsights \\n  --resource-group don-test-rg \\n  --query "workspaceResourceId" \\n  --output tsv\n 
 +az monitor log-analytics query --workspace donloganalytics --analytics-query "customEvents\n| where name == 'Request'\n| extend prediction = tostring(customDimensions.Response)\n| where prediction in ('['0']', '['1']')\n| summarize count() by prediction, bin(timestamp, 5m)\n| order by timestamp desc" --timespan PT1H 
 +^[[200~az monitor log-analytics query \\n  --workspace donloganalytics \\n  --analytics-query "customEvents\n| where name == 'Request'\n| extend prediction = tostring(customDimensions.Response)\n| where prediction in ('[\"0\"]', '[\"1\"]')\n| summarize count() by prediction, bin(timestamp, 5m)\n| order by timestamp desc" \\n  --timespan PT1H 
 +az monitor log-analytics query \\n  --workspace donloganalytics \\n  --analytics-query "customEvents\n| where name == 'Request'\n| extend prediction = tostring(customDimensions.Response)\n| where prediction in ('[\"0\"]', '[\"1\"]')\n| summarize count() by prediction, bin(timestamp, 5m)\n| order by timestamp desc" \\n  --timespan PT1H\n 
 +az monitor log-analytics workspace show \\n  --resource-group don-test-rg \\n  --workspace-name donloganalytics \\n  --query customerId \\n  --output tsv\n 
 +az monitor log-analytics query \\n  --workspace 1b7c0d2b-4628-483a-bf21-507f0c45df33 \\n  --analytics-query "customEvents\n| where name == 'Request'\n| extend prediction = tostring(customDimensions.Response)\n| where prediction in ('[\"0\"]', '[\"1\"]')\n| summarize count() by prediction, bin(timestamp, 5m)\n| order by timestamp desc" \\n  --timespan PT1H\n 
 +az monitor log-analytics query \\n  --workspace 1b7c0d2b-4628-483a-bf21-507f0c45df33 \\n  --analytics-query ".show tables" \\n  --timespan PT1H 
 +</code>
  
-===== ✅ Success Criteria =====+[[ai_knowledge|AI Knowledge]]
  
-  * CI/CD pipeline runs end-to-end on commit 
-  * Azure infrastructure deployed from code 
-  * Model available at a public or private endpoint 
-  * Logs visible in App Insights 
-  * Alerts trigger on defined failure conditions 
  
  
wiki/ai/github-actions-azure-pipeline.1750173176.txt.gz · Last modified: by ddehamer