代码之家  ›  专栏  ›  技术社区  ›  JDBennett

防止Azure管道构建失败:在满足需求的池中找不到代理

  •  1
  • JDBennett  · 技术社区  · 9 月前

    我有一个用于Azure管道的自托管构建代理池。

    我的构建服务器托管在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
    

    是否可以忽略此错误或允许一段时间,直到代理可用?

    1 回复  |  直到 9 月前
        1
  •  1
  •   Rui Jarimba    9 月前

    我的构建服务器托管在AWS中,我使用ASG,它使用SQS队列在需要构建作业时向外扩展。如果不需要工作,我会缩减到零。

    您必须确保代理池中至少有一个可用的生成代理,否则生成将立即失败。

    为了允许扩展到零并按需创建代理,请考虑添加一个离线/禁用的虚拟代理。这将防止 no agent found 错误。

    Dummy agent

    推荐文章