【问题标题】:Timeout when calling azure-devops-api调用 azure-devops-api 时超时
【发布时间】:2019-09-09 09:46:25
【问题描述】:

我有一个使用包 azure-devops-node-api 的 nodejs api。我的 api 调用 azure-devops throw the package 使用 PAT 在每次调用时获取令牌。我在 azure devops 上发布版本,获取发布状态,...

它运行良好,但在某些请求下我得到了超时:

错误:连接 ETIMEDOUT 13.107.42.18:443

我重试相同的查询,我得到的信息没有任何超时。

有人有一个想法,根本原因,......如何解决这个问题。

提前致谢

这里是获取发布状态的调用示例。

首先我有一种方法可以根据路径获取连接令牌:

public async azureDevOpsConnectWebApi(): Promise<vm.WebApi> {
    this._authentificationHandler = vm.getPersonalAccessTokenHandler(this.PAT);

    let option = null;
    // Force the non usage of proxy in local environment
    if (InfraPortalConfig.ENVIRONMENT === InfraPortalConstant.LOCAL_ENVIRONMENT) {
        option = {
            allowRetries: true,
            maxRetries: 20,
            proxy: {
                proxyUrl: '',
                proxyUsername: '',
                proxyPassword: '',
                proxyBypassHosts: [
                    'visualstudio\.com',
                    'azure\.com'
                ],
            },
            ignoreSslError: true
        };
    }
    this._vstsWebApiConnect = new vm.WebApi(this.AZURE_DEV_OPS_URL, this._authentificationHandler, option);
    return this._vstsWebApiConnect;
}`

在本地,我在代理后面。所以我将属性设置为绕过visualstudio.comazure.com 的代理。

我还有另一种获取token并调用api获取release的方法:

 public async getRelease(projectName: string, releaseDefinitionId: number): Promise<releaseInterface.Release> {
    const _self = this;
    try {
        const vstsWebApiConnect: vm.WebApi = await AzureDevOpsHelper.getInstance().azureDevOpsConnectWebApi();
        const releaseApiConnect: releaseApi.IReleaseApi = await vstsWebApiConnect.getReleaseApi();
        const release: releaseInterface.Release = await releaseApiConnect.getRelease(projectName, releaseDefinitionId);
        return release;
    } catch (error) {
        LogUtils.Instance.error(`** AzureDevOpsReleaseHelper - getRelease ${projectName} - ${releaseDefinitionId}: ${error}`);
        throw error;
    }
}

它工作了 10 次,但突然我超时了 2、5 次,没有任何改变它又可以工作了......

您能否提供一个直接调用 azure dev ops 以获取发布信息或排队发布的示例? 或者参考尺寸,我没有找到nodejs调用的任何东西。

非常感谢

【问题讨论】:

  • 有这个问题,看起来有时node-API工作完美,有时无缘无故失败,我最终使用了更可靠的标准API。只是为了好奇,你能发布给你带来麻烦的代码吗?
  • 感谢您的回复。我用代码示例编辑了我的第一篇文章。有直接调用api的例子吗? :)
  • 是的..就像一个想法,同样的问题。我建议使用 API,如果您需要帮助,请联系我。
  • 感谢您提供链接以获取 nodejs 中调用 azure devops api 的示例。我需要获得释放并排队。识别将通过 PAT 令牌完成。感谢您的支持
  • 您想按名称获取版本并对其进行队列化吗?

标签: azure-devops azure-devops-rest-api


【解决方案1】:

来自 cmets 和 @Hugh Lin 的总结 - MSFT 的回答,看起来 Azure-DevOps-Node-Api 存在问题,@Mattious 要求使用 API 而不是 node-API 库。 以下代码 sn-p 使用 PAT 连接到 azure-DevOps api 并获取所有构建:

const axios = require("axios");

const PAT  = 'YOUR PAT'
const azureDevOpsURL = 'azureDevOpsURL'

const hash = Buffer.from(`:${PAT}`).toString("base64");
const Basic = "Basic " + hash;
try {
    axios
    .get(`${azureDevOpsURL}/_apis/build/builds?api-version=5.1`, {
        headers: {
        "Content-Type": "application/json",
        Authorization: Basic
        }
    }).then(r=>console.log(r.data))
} catch (error) {
    console.log(error.message);
}

【讨论】:

    【解决方案2】:

    这是一个类似的issue,具有相同的超时问题。

    可能导致问题的一件事是,代理使用数据的速度是否存在 I/O 瓶颈(并且您的开发机器比托管代理更快地吸收数据)。您可能接近超时,然后该瓶颈会将其推到边缘。这是本期投稿人的想法,但不确定。

    作为一种解决方法,您可以尝试设置更高的超时时间并查看是否可以解决问题。

    【讨论】:

    • 我试图增加标头中的套接字超时,但它什么也没改变。这是增加的正确参数吗?
    猜你喜欢
    • 2020-10-07
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多