我有一个nodejs,它使用包azure-。我的api正在调用azure,在每次调用时都会抛出使用PAT的包来获取令牌。我发布了天蓝色的版本,获得了释放状态,.
它工作得很好,但在某些请求下,我得到了一个超时:
错误:连接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.com和azure.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次,但突然间我暂停了1,2,5次,没有任何改变,它又起作用了.
您能给出一个直接调用azure操作的示例,以获得发布信息或排队查询相关信息吗?或者参考大小,我没有发现任何nodejs调用。
非常感谢
发布于 2019-09-12 17:00:44
从评论和@Hugh Lin - MSFT的回答来看,看起来Azure-DevOps-Node-Api有一个问题,@Mattious要求使用API而不是instead库。下面的代码片段通过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);
}发布于 2019-09-10 10:34:17
下面是具有相同超时问题的类似的问题。
可能导致问题的一件事是,如果代理能够以多快的速度消耗数据(而且开发机器比宿主代理更快地吸收数据,那么就会出现I/O瓶颈)。您可能已经接近超时,然后瓶颈会将其推到边缘。这是一个在这个问题上的贡献者的想法,但不确定。
作为一种解决方法,您可以尝试设置一个更高的超时,并查看这是否修复了它。
https://stackoverflow.com/questions/57851529
复制相似问题