azurepipelines/e2e_test/e2etest.yaml (196 lines of code) (raw):
# E2E test pipeline - performs end-to-end tests on the following platforms
# - Ubuntu 20.04
resources:
containers:
- container: ubuntu
image: ubuntu:20.04
repositories:
- repository: 1ESPipelineTemplates
type: git
name: 1ESPipelineTemplates/1ESPipelineTemplates
ref: refs/tags/release
parameters:
- name: SKIP_TEARDOWN
displayName: "Leave test infrastructure in-place"
type: boolean
default: false
- name: TEST_ARTIFACTS_UPLOADCONTAINER
displayName: "The name of the container to upload the test artifacts"
type: string
default: "gen1-test-artifacts"
variables:
SKIP_TEARDOWN: ${{ parameters.SKIP_TEARDOWN }}
E2E_WORKING_DIR: $(Build.SourcesDirectory)/azurepipelines/e2e_test
Adu_Arm_Service_Connection: "adu_subscr_servc_connection"
Test_Vm_Ssh_PublicKey: ""
Test_Vm_Ssh_PrivateKeyFile: "adu_e2e_test_ssh_key"
Test_Vm_Ssh_PublicKeyFile: "adu_e2e_test_ssh_key.pub"
Test_VmAdmin: "azureuser"
Test_ResourceGroupname: "e2e-rg-$(Build.BuildId)" # Composed of e2e-rg-$(Build.BuildId)
Test_VmName: "e2e-vm-$(Build.BuildId)" # Composed of e2e-vm-$(Build.BuildId)
Test_InfraDeploymentName: "e2e-deployment-$(Build.BuildId)" #Composed of e2e-deployment-$(Build.BuildId)
Test_VmHostname: "" # Set after the VM is created
Test_Location: "westus3"
Test_DeviceName: "ubuntu-2004-x509-test-device"
Test_Distro: "ubuntu-20.04"
Test_Arch: "amd64"
Test_ArtifactUploadContainer: "gen1-debian-packages"
Test_Artifacts_Folder: "adu-client-ubuntu-2004-amd64"
Test_DeviceGroup: "gen1-test-devices"
Test_DeploymentId: "aptdeployment-$(Build.BuildId)"
Test_UpdateName: "Virtual"
Test_UpdateProvider: "Contoso1"
Test_UpdateVersion: "1.0.2"
name: "E2E Automated Test Run"
extends:
template: v1/1ES.Unofficial.PipelineTemplate.yml@1ESPipelineTemplates
parameters:
pool:
name: aduc_1es_client_pool
os: linux
sdl:
sourceAnalysisPool:
name: 1es_hosted_pool_windows
os: windows
suppression:
suppressionFile: $(Build.SourcesDirectory)\guardian\SDL\.gdnsuppress
customBuildTags:
- ES365AIMigrationTooling
stages:
- stage: PerformNativeBuilds
displayName: Builds all the native architecture builds
jobs:
- job: BuildUbuntu_2004_AMD64
displayName: Building the Device Update Package for Ubuntu 20.04 AMD64
continueOnError: False
pool: aduc_1es_client_pool
steps:
- template: /azurepipelines/build/templates/adu-native-build-steps.yml@self
parameters:
targetOs: ubuntu2004
targetArch: amd64
- stage: PublishPackageUnderTest
displayName: Publish the Package under Test to the Storage
jobs:
- job: PublishUbuntu2004_AMD64_Package
displayName: Publish the Ubuntu 20.04 AMD64 Package to the Storage
continueOnError: False
pool: aduc_1es_client_pool
steps:
- task: DownloadPipelineArtifact@2
displayName: "Download DeviceUpdate Package from pipeline"
inputs:
source: "current"
project: "adu-linux-client"
pipeline: "Azure.adu-private-preview.e2e-test"
itemPattern: "*ubuntu2004-amd64*/*.deb"
path: $(Build.ArtifactStagingDirectory)
- bash: |
ls -al $(Build.ArtifactStagingDirectory)
pPath=$(find $(Build.ArtifactStagingDirectory) -type f -name '*.deb')
echo "##vso[task.setvariable variable=packagePath;isOutput=true]$pPath"
echo "Path to package is $pPath"
displayName: "Get the path to the package under test"
name: pathToPackageUnderTest
- task: AzureCLI@2
displayName: "Publish the Ubuntu 20.04 AMD64 Package to the Storage"
inputs:
azureSubscription: $(Adu_Arm_Service_Connection)
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
echo "Publishing the Ubuntu 20.04 AMD64 Package to the Storage"
az storage blob upload --auth-mode login --account-name $(AZURE_STORAGE_ACCOUNT_NAME) --container-name $(Test_ArtifactUploadContainer) --file $(pathToPackageUnderTest.packagePath) --name deviceupdate-$(Build.BuildId).deb --no-progress
failOnStandardError: true
- bash: |
echo "The Package under Test is $(pathToPackageUnderTest.packagePath)"
echo "Uploaded to storage as deviceupdate-$(Build.BuildId).deb"
echo "##vso[task.setvariable variable=packageUnderTest;isOutput=true]deviceupdate-$(Build.BuildId).deb"
displayName: "Display the Package under Test"
name: package_under_test_publisher
- stage: InitializeTestInfra
displayName: Initializes the Infrastructure for the Automated Tests
variables:
Test_PackageUnderTestName: $[ stageDependencies.PublishPackageUnderTest.PublishUbuntu2004_AMD64_Package.outputs['package_under_test_publisher.packageUnderTest'] ]
pool: aduc_1es_client_pool
jobs:
- job: SetupUbuntu2004_AMD64_VM
displayName: "Setting up VM for Ubuntu 20.04 AMD64 Test VM"
timeoutInMinutes: 360
cancelTimeoutInMinutes: 360
pool: aduc_1es_client_pool
steps:
- task: DownloadSecureFile@1
displayName: "Download the SSH Key for the VM"
name: public_vm_key
inputs:
secureFile: $(Test_Vm_Ssh_PublicKeyFile)
retryCount: 3
retryIntervalInSeconds: 5
- task: DownloadSecureFile@1
displayName: "Download the SSH Key for the VM"
name: private_vm_key
inputs:
secureFile: $(Test_Vm_Ssh_PrivateKeyFile)
retryCount: 3
retryIntervalInSeconds: 5
- bash: |
curl -s http://ipinfo.io/json | jq '.ip'
displayName: "Get the Public IP Address of the Agent"
- bash: |
key_contents=$(cat $(public_vm_key.secureFilePath))
echo "##vso[task.setvariable variable=Test_Vm_Ssh_PublicKey;isOutput=true;]$key_contents"
displayName: "Set the VM SSH Key variable for reading into the Azure VM Template"
name: set_ssh_key
workingDirectory: $(Agent.TempDirectory)
- bash: |
echo "The Test_InfraDeploymentName is $(Test_InfraDeploymentName)"
displayName: "Display the Infra Deployment's Name"
- task: AzureCLI@2
displayName: "Create the RG for the E2E Test Infrastructure"
inputs:
azureSubscription: $(Adu_Arm_Service_Connection)
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
echo "Creating the RG for Test Infrastructure"
az group create --name $(Test_ResourceGroupname) --location $(Test_Location)
failOnStandardError: true
- task: AzureCLI@2
displayName: "Create the Ubuntu 20.04 VM for the E2E Test"
inputs:
azureSubscription: $(Adu_Arm_Service_Connection)
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
echo "Creating the VM for Test"
az deployment group create --name $(Test_InfraDeploymentName) --resource-group "$(Test_ResourceGroupname)" --template-file ./azurepipelines/e2e_test/templates/az_vm.template.json --parameters adminUsername="$(Test_VmAdmin)" adminKey="$(set_ssh_key.Test_Vm_Ssh_PublicKey)" adminPassword="$(VM_ADMIN_PASS)" vmName="$(Test_VmName)" vmSize=Standard_DS1_v2 location=$(Test_Location) msi_resource_id="$(MSI_RESOURCE_ID)" msi_client_id="$(MSI_CLIENT_ID)" duSetupScriptFileUri="$(VM_SETUP_SCRIPT_URI)" duSetupScriptFileName="$(VM_SETUP_SCRIPT_FILE_NAME)" duSetupScriptFileArgs="--distro $(Test_Distro) --architecture $(Test_Arch) -s $(AZURE_STORAGE_ACCOUNT_NAME) -p $(Test_PackageUnderTestName)"
failOnStandardError: true
- task: AzureCLI@2
displayName: "Get the Public Hostname of the VM"
inputs:
azureSubscription: $(Adu_Arm_Service_Connection)
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
echo "Getting the Public IP Address of the VM"
hostname=$(az deployment group show -g $(Test_ResourceGroupname) -n $(Test_InfraDeploymentName) --query properties.outputs.hostname.value)
echo "##vso[task.setvariable variable=Test_VmHostname]$hostname"
failOnStandardError: true
- task: AzureCLI@2
displayName: "Attempt an update to the VM"
inputs:
azureSubscription: $(Adu_Arm_Service_Connection)
scriptType: bash
scriptLocation: scriptPath
scriptPath: "$(E2E_WORKING_DIR)/scripts/start_and_check_deployment.sh"
arguments: -g "$(Test_DeviceGroup)" -d "$(Test_DeploymentId)" -a "$(ADU_ACCOUNT_NAME)" -i "$(ADU_INSTANCE_ID)" -n "$(Test_UpdateName)" -p "$(Test_UpdateProvider)" -v "$(Test_UpdateVersion)"
failOnStandardError: false
continueOnError: false
- task: AzureCLI@2
displayName: "Cleanup the Test Infrastructure"
inputs:
azureSubscription: $(Adu_Arm_Service_Connection)
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
az group delete --name $(Test_ResourceGroupname) --yes
failOnStandardError: true