Scott
Scott

Reputation: 97

Using service containers in Azure DevOps pipelines

I'm trying to use service containers within Azure DevOps pipelines

The agent is an ubuntu host

I would like to have the agent run a powershell container and a playwright container

The doc for this is not very verbose

So far I have this in my main 'azure-pipelines.yml'

trigger: none
pr: none

resources:
  containers:
    - container: playwright
      image: mcr.microsoft.com/playwright:v1.29.0-focal
    - container: pwsh
      image: mcr.microsoft.com/powershell

pool:
  vmImage: "ubuntu-latest"

services:
  playwright: playwright
  pwsh: pwsh

stages:
  - stage: dev
    displayName: dev
    jobs:
      - template: templates/test.yml

And this in my 'template/test.yml' file

- job: run_tests
  displayName: Test
  pool:
    vmImage: ubuntu-latest
  steps:
    - powershell: |
        Write-Host "This is powershell"
      target:
        container: pwsh
    - script: yarn test:integration:ci
      displayName: "Run tests"
      env:
        environment: dev
        CI: true
      target:
        container: playwright

Azure pipelines does not like this. It is failing with:

/.azure/azure-pipelines.yml (Line: 18, Col: 1): Unexpected value 'stages'

when I try to run the pipeline. I thought stages: was the first part of a pipeline? (but I am very new to Azure pipelines so my understanding might be way off)

Could anyone help to clarify why/where I am screwing up at all please?

Thanks

Upvotes: 0

Views: 792

Answers (1)

pnkjkmr469
pnkjkmr469

Reputation: 345

Make the following changes to your yaml files.

azure-pipelines.yml

trigger: none
pr: none

pool:
  vmImage: ubuntu-latest
  

resources:
  containers:
  - container: playwright
    image: mcr.microsoft.com/playwright:v1.29.0-focal
  - container: pwsh
    image: mcr.microsoft.com/powershell


stages:
- stage: dev
  displayName: dev
  jobs:
  - template: templates/test.yml

template.yml

jobs:
- job: run_tests
  displayName: Test

  pool:
    vmImage: ubuntu-latest

  services:
    playwright: playwright
    pwsh: pwsh

  steps:
    - powershell: |
        Write-Host "This is powershell"
      target:
        container: pwsh
    - script: yarn test:integration:ci
      displayName: "Run tests"
      env:
        environment: dev
        CI: true
      target:
        container: playwright

Reason why you were getting the error (/.azure/azure-pipelines.yml (Line: 18, Col: 1): Unexpected value 'stages') is because of the property services. According to the example in service containers documentation, the property services is defined in the root level of the yaml because the example did not use any stage or jobs.

Since you are using stages and jobs in your yaml pipeline, the services property should be nested within your job.

Hence, I have moved the services to the template.yml file. You can check which property is allowed under a stage or job using this YAML schema documentation

Reference: https://learn.microsoft.com/en-us/azure/devops/pipelines/yaml-schema/jobs-job-container?view=azure-pipelines

Upvotes: 2

Related Questions