MyName
MyName

Reputation: 382

Azure pipeline defaults to wrong agent

I have the following problem: I have specified a pipeline yaml which runs on a self-hosted agent for the first stage. For the second stage I haven't declared an agent. It should default to a Microsoft-hosted agent (and does for all other pipelines with the same syntax and use-case). However, when initializing the agent at execution time, the chosen agent is of the self-hosted variety. I've tried creating a fork, deleting the repo and re-initializing it. Both to no avail. When I specify an agent for the stage, like so (as described in this ms documentation):

pool:
  vmImage: 'ubuntu-latest'

I get the following message: There was a resource authorization issue: "The pipeline is not valid. Could not find a pool with name Azure Pipelines. The pool does not exist or has not been authorized for use. For authorization details, refer to https://aka.ms/yamlauthz." When I click authorize resources, I get the message that it was successful. However, the authorization issue keeps returning.

azure-pipeline.yaml

resources:
  repositories:
    - repository: templates
      type: git
      name: azure-devops-reusable-tasks

variables:
  - group: mijnverzekeringsvoorwaarden-api-service_ONT # for deployments (build scripts only target ONT)
  - template: add-variable-branch-name.yml@templates

name: 1.0.0$(branchName)-$(Build.BuildId)

stages:
  - stage: Build
    displayName: Build
    jobs:
      - job: Build
        displayName: Build
        pool:
          name: Default
          demands: companyName.Docker
        steps:
          - template: maven.yml@templates
          - publish: $(System.DefaultWorkingDirectory)
            artifact: mijnverzekeringsvoorwaarden-api-service
          - template: publish-surefire-test-results.yml@templates
          - template: publish-jacoco-code-coverage.yml@templates
          - template: git-set-version-tag.yml@templates

  - stage: Scan
    dependsOn: Build
    jobs:
      - job: Scan
        displayName: Dependency scan
        steps:
          - template: owasp-scan.yml@templates

And this is the template in question being called for the second stage. The one that is supposed to run on a MS-hosted machine:

owasp-scan.yml@templates

steps:
  - download: current
  - task: dependency-check-build-task@6
    displayName: Owasp dependency check
    inputs:
        projectName: $(Build.Repository.Name)
        scanPath: $(Pipeline.Workspace)
        format: 'HTML'

Any insight as to why it is defaulting to the wrong pool for this particular pipeline?

Update: Added a screen shot of the agent pools and agents in the microsoft hosted pool. Tried referencing the agent pool with the name given in the screenshot, like so:

pool:
  name: 'Hosted Ubuntu 1604'
  vmImage: 'ubuntu-latest'

This gives the following error: ##[error]No agent found in pool Hosted Ubuntu 1604 which satisfies the following demand: ubuntu-latest. All demands: ubuntu-latest, Agent.Version -gtVersion 2.188.2

When using:

pool:
  name: 'Hosted Ubuntu 1604'
  vmImage: 'Hosted Ubuntu 1604 2'

I get: Encountered error(s) while parsing pipeline YAML: /azure-pipelines.yml (Line: 37, Col: 20): Invalid demand 'Hosted Ubuntu 1604 2'. The demand should be in the format '<NAME>' to test existence, and '<NAME> -equals <VALUE>' to test for a specific value. For example, 'VISUALSTUDIO' or 'agent.os -equals Windows_NT'.

Agent pool

Agents in MS hosted pool

Update 2: I compared projects. Another project did have the Azure Pipelines agent pool. I approved this project (the one which has the issue) to also have access to this pool. When I explicitly define it in the yaml, it uses this (cloud hosted) pool. However, when I provide no pool information it keeps defaulting to the self-hosted variant. To re-iterate, this only happens for this particular pipeline.

Upvotes: 0

Views: 2477

Answers (2)

MyName
MyName

Reputation: 382

The problem has been circumvented. When explicitly defining the agent from the agent pool, with correct nomenclature, it does pick an agent from this pool. However, this does not explain why this behavior is exhibited for this pipeline, while all other pipelines pick an agent from the same pool without defining this. These default to this (the same) pool.

In this specific case the hack is defining the pool like so:

pool:
  name: 'Hosted Ubuntu 1604'

Upvotes: 0

Leo Liu
Leo Liu

Reputation: 76928

Any insight as to why it is defaulting to the wrong pool for this particular pipeline?

You could try to change the value in the Default agent pool for YAML to Azure Pipelines in the UI:

enter image description here

enter image description here

Upvotes: 2

Related Questions