0

我的设置如下我已经托管了代理,作为第一个作业从作为 docker 容器启动的自托管代理复制文件

托管管道由管道“运行”休息 API 触发:
https ://docs.microsoft.com/en-us/rest/api/azure/devops/pipelines/runs/run%20pipeline?view=azure-devops-rest -6.0

这就是身体现在的样子:

"resources": {
        "repositories:": {
            "self": {
                "refName": "refs/heads/my_branch"
            }
        }
    }

它工作得很好。
现在托管管道的一部分如下所示:

- job: self_hosted_connect
  timeoutInMinutes: 10
  pool: Default
  steps:
  - task: CopyFiles@2
    inputs:
      SourceFolder: '/home/copy_dir'
      Contents: '**'
      TargetFolder: '$(build.artifactstagingdirectory)'

另外,工作很棒。

我的问题是:

  1. 我喜欢在“运行”rest API 中发送另一个包含 SourceFolder 路径的参数,以便 CopyFiles 任务将是动态的并且没有硬编码 SourceFolder 路径

  2. 当我从 docker 运行自托管代理时,我如何告诉自托管代理将目录包含在其工作目录之外?所以管道不会因错误而失败:

    #[错误]未处理:未找到源文件夹:/home/copy_dir

更新 我将请求更新为:

{
    "resources": {
        "repositories:": {
            "self": {
                "refName": "refs/heads/my_branch"
            }
        }
    },
    "templateParameters": {
        "Folderpath":"{/home/foo/my_dir}"
    }
}

但我收到一个错误:

{
    "$id": "1",
    "innerException": null,
    "message": "Unexpected parameter 'Folderpath'",
    "typeName": "Microsoft.Azure.Pipelines.WebApi.PipelineValidationException, Microsoft.Azure.Pipelines.WebApi",
    "typeKey": "PipelineValidationException",
    "errorCode": 0,
    "eventId": 3000
}
4

1 回答 1

1

在“运行”rest API 中发送另一个包含 SourceFolder 路径的参数我们可以在管道中使用运行时参数。

YAML 示例:

parameters:
- name: Folderpath
  displayName: 'configure Folder path'
  type: string
  default: {SourceFolder path}

steps:
- task: CopyFiles@2
  inputs:
    SourceFolder: '${{ parameters.Folderpath}}'
    Contents: '**'
    TargetFolder: '$(build.artifactstagingdirectory)'

请求网址:

POST https://dev.azure.com/{organization}/{project}/_apis/pipelines/{pipelineId}/runs?api-version=6.0-preview.1

请求正文:

{
    "resources":{
        "repositories":{
            "self":{"refName":"refs/heads/{my_branch}"
            }
         }
    },
    "templateParameters": {
        "Folderpath":"{SourceFolder path}"
        }
}

我如何告诉自托管代理将目录包含在其工作目录之外?

我们可以复制本地文件夹或 azure DevOps预定义变量来定义源文件夹。

更新1

我们应该在 YAML 构建中定义参数,如果没有,我们将得到错误 Unexpected parameter 'Folderpath'"

在此处输入图像描述

更新 2

因为我喜欢从磁盘上的真实路径(我在请求中传递的路径)中获取自托管 docker 运行的路径,而不是相对于 docker 工作目录,所以现在它给了我这个错误:

[error]Unhandled: Not found SourceFolder: /azp/agent/_work/1/s/{/home/copy_dir}  
 

其中 /azp 是 docker 工作目录

我从这个链接配置了 docker:
https ://docs.microsoft.com/en-us/azure/devops/pipelines/agents/docker?view=azure-devops

于 2020-09-04T08:06:34.820 回答