创建后找不到代理池

时间:2019-08-08 00:41:31

标签: azure azure-pipelines

我正在尝试在特定的代理程序池上运行本地化的构建。

这个想法是我分两个阶段运行管道。

第一阶段运行Ansible剧本,该剧本在Azure DevOps中创建代理池,在Azure虚拟网络中置备VM,安装代理,在此新创建的池上注册代理,并授权所有管道使用该池。这是因为需要在不同的虚拟网络上运行Ansible剧本,而VSTS需要连接到正确的代理。

第二阶段使用新创建的池来查找代理,并在实际所需的虚拟网络中运行另一台Ansible Playbook。

问题在于第二阶段失败并显示以下错误:

“管道无效。找不到ID为0的池。该池不存在或尚未被授权使用。有关授权的详细信息,请参阅https://aka.ms/yamlauthz。”

这基本上就是我正在做的事情:

阶段1:

  displayName: Environment Preparation
  jobs:
  - job: Prepare_Customer_Environment
    displayName: Prepare Target Environment
    variables:
    - group: Azure-Ansible-Variables
    pool:
     name: 'Infrastructure-Agents'
    workspace:
     clean: all 
    steps:
    - task: Ansible@0
      displayName: Prepare Target Environment for Deployment
      inputs: 
       SUBSCRIPTION_ID: $(SUBSCRIPTION-ID)
       failOnStderr: false
       playbookPathOnAgentMachine: '$(Build.Repository.LocalPath)/ansible/playbooks/environment.yml' 

第二阶段:

- stage: Environment_Provisioning
  displayName: Environment Provisioning
  jobs:
  - job: Update_Customer_Environment
    displayName: Update Target Environment
    variables:
    - group: Azure-Ansible-Variables
    pool:
     name: $(environment)-$(env_id)
    workspace:
     clean: all 
    steps:

该池的名称正确,我已经对其进行了10次检查。

在Ansible中,我使用REST API调用创建池:

- name: VSTS Agent Specific Configuration | Create the Agent Pool
  register: create_pool_result
  uri:
   url: "https://company.visualstudio.com/_apis/distributedtask/pools?api-version=5.0-preview.1"
   method: POST
   body_format: json
   body: {"name": "{{ hostvars['localhost']['resource_group'] }}","autoProvision": true}
   status_code: 
   - 200
   - 409
   headers:
    Authorization: "Bearer {{ hostvars['localhost']['current_bearer_token_3'] }}"   

我在这里授权使用它:

- name: VSTS Agent Specific Configuration | Authorise Agent Pool for all Pipelines
  register: authorise_pool_result
  uri:
   url: "https://dev.azure.com/Company/Project/_apis/build/authorizedresources?api-version=5.0-preview"
   method: PATCH
   body_format: json
   body: [{"name": "{{ hostvars['localhost']['resource_group'] }}","type": "queue","id": "{{ current_agent_pool_queue }}","authorized": true}]
   status_code: 
   - 200
   headers:
    Authorization: "Bearer {{ hostvars['localhost']['current_bearer_token_3'] }}"   

所有这些都有效,但是第二阶段找不到池。我认为这是因为yaml文件是在创建池之前加载的,然后我会尝试查找它认为不存在的资源。

有没有一种方法可以重新加载定义/构建文件?还是通过任何方式获得服务以查找即时创建的资源?

谢谢。

0 个答案:

没有答案