执行多个http请求,然后在Azure DevOps服务器任务中等待

问题描述 投票:0回答:1

我正在编写一个 Azure DevOps 扩展,其中我想创建一个服务器任务来执行几个 http 请求并等待来自外部源的完成事件。我的问题是服务器任务选项几乎没有记录,所以这对我来说变成了一个猜测和尝试的游戏。

我使用以下两个资源来了解我可以做什么:

我还检查了几个带有服务器任务的公共扩展:

尽管有迹象表明我想要实现的目标是可能的,但到目前为止我的尝试都没有成功。

作为起点,我在我的 task.json 中使用类似的东西:

"execution": {
  "HttpRequestChain": {
    "Execute": [
      {
        "RequestInputs": {
          "EndpointUrl": "first-url"
          "Method": "first-method",
          "Headers": "first-headers",
          "Body": "first-body",
          "Expression": "first-condition-expression"
        },
        "ExecutionOptions": {
          "OutputVariables": "first-outputs",
          "SkipSectionExpression": "first-skip-expression"
        }
      }

      .
      .
      .

      {
        "RequestInputs": {
          "EndpointUrl": "last-url"
          "Method": "last-method",
          "Headers": "last-headers",
          "Body": "last-body",
          "Expression": "last-condition-expression"
        },
        "ExecutionOptions": {
          "OutputVariables": "last-outputs",
          "SkipSectionExpression": "last-skip-expression"
        }
      }
    ]
  }
}

首先,我尝试将

"WaitForCompletion": "true"
添加到最后一个
RequestInputs
部分,如 HttpRequest 下的 servertaskauthoring.md 和 CreateAndQueryChangeRequestV2/task.json 中所示。

据我所知,它没有做任何事情,并且还发现了以下社区问题其相关的 Github 问题,上面写着:

“waitForCompletion”选项目前在设计上不适用于 HttpChainRequest 任务。

所以我改变了我的方法,想添加一个预执行部分,将我的任务分为两部分,准备部分和等待部分。

"prejobexecution": {
  "HttpRequestChain": {
    "Execute": [
      {
        "RequestInputs": {
          "EndpointUrl": "first-url"
          "Method": "first-method",
          "Headers": "first-headers",
          "Body": "first-body",
          "Expression": "first-condition-expression"
        },
        "ExecutionOptions": {
          "OutputVariables": "first-outputs",
          "SkipSectionExpression": "first-skip-expression"
        }
      }

      .
      .
      .

    ]
  }
}
"execution": {
  "HttpRequest": {
    "Execute": {
      {
        "EndpointUrl": "last-url"
        "Method": "last-method",
        "Headers": "last-headers",
        "Body": "last-body",
        "Expression": "last-condition-expression",
        "WaitForCompletion": "true"
      }
    }
  }
}

在这种情况下,prejobexecution部分没有出现,只有执行被添加到管道运行中。我猜想服务器任务不支持 prejobexecution,但我找不到任何资源明确指出这一点。

目前,我开始尝试两个单独的服务器任务,一个使用

HttpRequestChain
无需等待,另一个使用
HttpRequest
等待。我还没有尝试过,但无论结果如何,我觉得将所有内容都集中在一项任务中更容易使用/设置,而且更优雅。

因此我想知道是否可以实现,如果可以的话如何实现。此外,如果有人可以与我分享有关服务器任务或为什么我之前的尝试不成功的完整文档,那将是一个巨大的帮助。

azure-devops azure-pipelines-build-task azure-devops-extensions azure-pipelines-tasks
1个回答
0
投票

按照您的期望

创建一个服务器任务来执行几个 http 请求并等待来自外部源的完成事件。

您可以考虑使用延迟任务来解决此问题,这是无代理作业支持的任务之一。

此外,下面这些任务的源代码供您参考,可能有助于构建您自己的扩展任务。

azure-pipelines-tasks/Tasks/DelayV1 at master · microsoft/azure-pipelines-tasks · GitHub;

azure-pipelines-tasks/Tasks/InvokeRestApiV1 at master · microsoft/azure-pipelines-tasks · GitHub.

© www.soinside.com 2019 - 2024. All rights reserved.