Execute test in Azure Devops
This is the next part of the follwing blog post : Testing your infra my easy way
In this part, you will learn how to :
- Configure Azure Cli Devops
- Create a Azure SPN
- Create an Azure Pipeline using the Az Cli
- Create a service endpoint for Azure Devops using the Az Cli
- Create a Simple Pipeline to execute Gherkin test and publish the result into Azure Devops.
1. Azure Devops CLI
Get a Personal Access Token here : https://dev.azure.com/<YourOrganisation>/_usersSettings/tokens
az extension add --name azure-devops
az devops login
# paste your PAT
az login
# with the sam
az account set -s <YOUR SUB>
az devops configure --defaults 'organization=https://dev.azure.com/etiennedeneuve'
az devops project create --name GherkinTest
# Store the repo git url to configure the repo locally, you will need a SSH Key for that.
$repo=$(az repos list --project GherkinTest --query [].sshUrl -o tsv)
2. Configure the repo locally
cd ~/GherkinTest
git init
git remote add origin $repo
git add .
git commit -m 'inital commit'
git push origin master
3. Create the pipeline
az pipelines create --name "GherkinTest"
Answer the questions like :
This command is in preview. It may be changed/removed in a future release.
Which template do you want to use for this pipeline?
[1] Starter pipeline
[2] Android
[3] Ant
[4] ASP.NET
[5] ASP.NET Core
[6] .NET Core Function App to Windows on Azure
[7] ASP.NET Core (.NET Framework)
Please enter a choice [Default choice(1)]: Starter pipeline
Do you want to view/edit the template yaml before proceeding?
Please enter a choice [Default choice(1)]: Continue with generated yaml
Files to be added to your repository (1)
1) azure-pipelines.yml
How do you want to commit the files to the repository?
Please enter a choice [Default choice(1)]: Create a new branch for this commit and start a pull request.
Enter new branch name to create: features/cicd
Checking in file azure-pipelines.yml in the Azure repo c279436a-e2f4-4e01-8f41-a30f660f7515
Created a Pull Request - https://dev.azure.com/etiennedeneuve/6874897d-6d09-412e-b73b-4b2966c04b64/_apis/git/repositories/c279436a-e2f4-4e01-8f41-a30f660f7515/pullRequests/1
Successfully created a pipeline with Name: GherkinTest, Id: 25.
{
"agentSpecification": null,
"buildNumber": "20200214.1",
"buildNumberRevision": 1,
"controller": null
}
4. Create the Service Endpoint for Azure RM Subscription
First we need to create a SPN in Azure AD :
az ad sp create-for-rbac --name AzureDevops
Changing "AzureDevops" to a valid URI of "http://AzureDevops", which is the required format used for service principal names
Creating a role assignment under the scope of "/subscriptions/1417c648-XXXX"
{
"appId": "41176fe8-XXXXX",
"displayName": "AzureDevops",
"name": "http://AzureDevops",
"password": "7eaeb380-XXXXX",
"tenant": "06329ce4-XXXX"
}
Take note of the appId, Name, Password and Tenant.
Now, list your subscriptions :
az account show
{
"environmentName": "AzureCloud",
"id": "1417c648-XXXXX",
"isDefault": true,
"name": "Microsoft XXXX",
"state": "Enabled",
"tenantId": "06329ce4-XXXX",
"user": {
"name": "etienne@deneuve.xyz",
"type": "user"
}
}
Take note of the Id, Name, and Tenant.
And then create the service endpoint in Azure DevOps :
az devops service-endpoint azurerm create --name 'Azure MVP' `
>> --azure-rm-tenant-id "YourTenantId" `
>> --azure-rm-service-principal-id "AppID" `
>> --azure-rm-subscription-id "SubID" `
>> --azure-rm-subscription-name "Name of the Sub"
Azure RM service principal key: "Password"
Confirm Azure RM service principal key: "Password"
{
"administratorsGroup": null,
< shortened >
"type": "azurerm",
"url": "https://management.azure.com/"
}
5. Configure the pipeline
Now, checkout to the newly created branch :
# change branch
git checkout features/cicd
# get latests info from remote
git pull
# open code in the current folder
code .
Add the following snippet into azure-pipelines.yml
:
# ./azure-pipelines.yml
# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml
trigger:
- master
pool:
vmImage: "windows-latest"
steps:
- task: AzurePowerShell@5
inputs:
azurePowerShellVersion: LatestVersion
azureSubscription: "Azure MVP"
Inline: |
Install-Module -Name Pester -Force
ScriptType: InlineScript
pwsh: true
workingDirectory: $(Build.Repository.LocalPath)
displayName: "Install Pester"
- task: AzurePowerShell@5
inputs:
azurePowerShellVersion: LatestVersion
azureSubscription: "Azure MVP"
Inline: |
Invoke-Gherkin -OutputFile result.xml -OutputFormat NUnitXml
ScriptType: InlineScript
pwsh: true
workingDirectory: $(Build.Repository.LocalPath)
displayName: "Launch Test"
- task: PublishTestResults@2
inputs:
buildConfiguration: Azure
buildPlatform: Azure
publishRunAttachments: true
testResultsFiles: result.xml
testResultsFormat: NUnit
testRunTitle: ValidateAzure
Commit the file :
git add azure-pipelines.yaml
git commit -m 'feat: add cicd for tests'
git push origin features/cicd
Go in your Azure Devops project, select your new pipeline, and go in Tests, you should have something like my public repo :
Et Voila!