Можно ли создать пул агентов с автономными агентами, который возвращается к Azure Pipelines в случае, если автономные агенты недоступны?
Я попытался найти ответ на этот вопрос и покопался в Azure DevOps. Кажется, это невозможно.
Нет, это невозможно. Вам необходимо изменить пул агентов, чтобы переключиться с размещенного на локальном размещении и обратно.
Для этого перед назначением агента конвейер должен знать, есть ли какой-либо простаивающий агент в локальном пуле агентов. Для этого у вас может быть тест для вызова запроса REST API в задаче конвейера безагентных заданий InvokeRESTAPI@1
, чтобы проверить, назначены ли агентам в пуле агентов запросы, а затем определить запуск последующего задания в MS- размещенный или самостоятельный пул агентов.
parameters:
- name: agentIds
type: object
default:
- 465
- 547
variables:
system.debug: true
orgName: ${{split(variables['System.CollectionUri'], 'https://dev.azure.com/')[1] }}
poolId: 1 # Default
stages:
- stage: StageCheck
jobs:
- job: AgentlessJob
pool: server
steps:
- ${{each agentId in parameters.agentIds}}:
- task: InvokeRESTAPI@1
inputs:
connectionType: 'connectedServiceName'
serviceConnection: 'AzureDevOpsServices'
method: 'GET'
headers: |
{
"Content-Type":"application/json",
"Authorization": "Bearer $(system.AccessToken)"
}
urlSuffix: '/$(orgName)/_apis/distributedtask/pools/$(poolId)/agents/${{agentId}}?includeAssignedRequest=true&api-version=7.1-preview.1'
waitForCompletion: 'false'
successCriteria: 'eq(root.assignedRequest.reservedAgent.id, ${{agentId}})'
continueOnError: true
- stage: StageOnSelfhostedAgentPool
dependsOn: StageCheck
condition: eq(dependencies.StageCheck.result, 'SucceededWithIssues')
variables:
stageDependencies: $[convertToJson(stageDependencies)]
jobs:
- job: AgentJob
pool: Default
steps:
- script: |
echo "Detected idle agents in the Default self-hosted agent pool"
echo "$(stageDependencies)"
displayName: Run agent job in Default self-hosted agent pool
- stage: StageOnMShostedAgentPool
dependsOn: StageCheck
condition: eq(dependencies.StageCheck.result, 'Succeeded')
variables:
stageDependencies: $[convertToJson(stageDependencies)]
jobs:
- job: AgentJob
pool:
vmImage: ubuntu-latest
steps:
- script: |
echo "No idle agents in the Default self-hosted agent pool"
echo "$(stageDependencies)"
displayName: Run agent job in MS-hosted agent pool
Кроме того, вы, вероятно, сможете ознакомиться с функциями Управляемых пулов DevOps и Пулов агентов VMSS, которые могут вам подойти.
Привет @Kjensen, доброго дня тебе. Есть ли у вас возможность просмотреть ответы ниже? Вообще говоря, пул агентов конвейера выбирается во время компиляции конвейера, и мы не можем изменить оркестровку во время работы конвейера. Мой ответ на оценку состояния задания без агента во время выполнения конвейера и выполнение различных этапов — это просто возможный вариант для справки. Надеюсь, информация поможет решить ваш вопрос в этом посте. Спасибо и желаю продуктивной недели.