我有一个用于 Azure Pipelines 的自托管构建代理池。
我的构建服务器托管在 AWS 中,我使用 ASG,它使用 SQS 队列在需要构建作业时进行扩展。如果不需要作业 - 我会将规模缩小到零。
我遇到的问题是我同时运行 Windows 和 Linux 代理。我已经根据操作系统为各种任务实现了pipelines.yml文件,其中包含条件。即
- task: AWSPowerShellModuleScript@1
displayName: Deploy Stack
inputs:
workingDirectory: $(Build.SourcesDirectory)/stack
awsCredentials: my-creds
regionName: $(region)
scriptType: inline
inlineScript: cdk deploy --require-approval never
condition: eq(variables['Agent.OS'], 'Windows')
- task: AWSShellScript@1
displayName: Deploy Stack
inputs:
awsCredentials: my-creds
regionName: $(region)
scriptType: inline
inlineScript: |
aws cloudformation deploy --my-stack --template-file template.yml \
--capabilities CAPABILITY_NAMED_IAM
condition: eq(variables['Agent.OS'], 'Linux')
问题是,如果没有代理满足所有需求,我的构建就会立即失败。对我来说,这个代理恰好是“sh”。
如果一段时间内没有运行任何作业并且 ASG 已终止所有实例,则实例将需要几分钟才能启动并向 Azure Dev Ops 注册。
我尝试使用
timeoutInMinutes: 15
在工作中 - 但仍然失败:
##[error]No agent found in pool MYPOOL which satisfies the following demand: sh. All demands: DotNetFramework, sh, Agent.Version -gtVersion 2.163.1
有没有办法忽略此错误或等待一段时间直到代理可用?