c++ Azure DevOps YAML自托管代理管道生成在定位自代理时卡住

u0njafvf  于 2022-12-20  发布在  其他
关注(0)|答案(4)|浏览(170)

**操作:**我尝试在自托管的windows计算机上配置和运行简单的c++ azure管道。我对这一切都很陌生。我运行了下面的脚本。
**预期:**查看构建任务、显示任务和清理任务。查看问候语。
**结果:**错误,脚本找不到我的生成代理。

##[warning]An image label with the label Weltgeist does not exist.
,##[error]The remote provider was unable to process the request.
Pool: Azure Pipelines
Image: Weltgeist
Started: Today at 10:16 p.m.
Duration: 14m 23s

信息和测试:

1.我的自托管代理名称是Weltgeist,它是默认代理www.example.com的一部分pools.it是一台Windows计算机,上面有所有g++、mingw和其他相关工具。
1.我在本地尝试了我的构建任务,没有任何问题。
1.我尝试使用azure 'ubuntu-latest'代理完成构建任务,没有任何问题。
1.我按照这些规范创建了自托管代理。我是azure repo. https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/v2-windows?view=azure-devops的所有者
如何正确配置自托管代理的池ymal参数?我是否需要在服务器端或Azure存储库配置上执行其他步骤?是否有其他想法说明问题所在?

# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml

trigger:
- master

pool:
  vmImage: 'Weltgeist' #Testing with self-hosted agent

steps:
- script: |
    mkdir ./build
    g++ -g ./src/hello-world.cpp -o ./build/hello-world.exe
  displayName: 'Run a build script'

- script: |
    ./build/hello-world.exe
  displayName: 'Run Display task'

- script: |
    rm -r build
  displayName: 'Clean task'

(更新)解决方案:
Thx,在按照下面的答案更新它并阅读更多的池ymal定义之后,它可以工作了。注意,我修改了其他几行,使它可以在我的环境中工作。

trigger:
- master

pool:
  name: Default
  demands:
   - agent.name -equals Weltgeist

steps:
- script: |
    mkdir build
    g++ -o ./build/hello-world.exe ./src/hello-world.cpp
  displayName: 'Run a build script'

- script: |
    cd build
    hello-world.exe
    cd ..
  displayName: 'Run Display task'

- script: |
    rm -r build
  displayName: 'Clean task'
toe95027

toe950271#

我对Default感到困惑,因为组织中已经有一个名为Default的管道。
详细说明此处提供的答案。

pool:
  name: NameOfYourPool
  demands:
   - agent.name -equals NameOfYourAgent

这是您可以在DevOps中找到这些信息的屏幕。

mi7gmzs6

mi7gmzs62#

由于您使用的是自托管代理,因此可以使用以下格式:

pool:
  name: Default
  demands:
   - agent.name -equals Weltgeist

那么它应该像预期的那样工作。
您可以参考有关POOL Definition in Yaml的文档。

r6l8ljro

r6l8ljro3#

我也遇到过同样的问题,用"name"替换pool下的vmImage对我很有效。
触发器:

  • 主控

pool:name:'Weltgeist'#使用自托管代理进行测试

p5cysglq

p5cysglq4#

另外请注意,如果您的代理仅出现在“Azure Pipelines”池中,而未出现在任何其他池中,则该代理可能已被配置为“Environment”资源,无法用作构建步骤的一部分。我花了很长时间尝试使用自托管VM进行构建步骤,考虑到引用VM的正确方法是从Pipelines〉Enviroments区域创建VM资源:

该代理将被正确创建并在“Azure Pipelines”池中可见,但在任何其他池中都不可用,这意味着它无法在用于设置构建所用服务器的yaml中引用。

我能够解决这个问题,方法是使用.\config.cmd remove在我的自托管虚拟机上注销代理,然后在没有--environment --environmentname "<name>"的情况下运行./config,这是在上述注册脚本中提供的(如“Add resouce”屏幕截图所示)
奇怪的是,注册脚本比代理池中显示的“新建代理”表单更快地注册代理:

必要的文件被拉到服务器(无需先下载),并自动生成生存期为3小时的PAT。

相关问题