调用 azure-devops 时超时-api

Timeout when calling azure-devops-api

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

它工作得很好,但在某些请求下我得到了超时:

Error: connect 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.

的代理

我有另一种获取令牌并调用 api 获取发布的方法:

 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 次,但突然我超时一两次,五次,没有任何改变它再次工作...

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

非常感谢

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

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

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

来自评论和@Hugh Lin - MSFT 回答的总结,看起来 Azure-DevOps-Node-Api 存在问题,@Mattious 要求使用 API 而不是节点-API 库。 以下代码片段使用 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);
}