调用 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.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 次,但突然我超时一两次,五次,没有任何改变它再次工作...
您能否提供直接调用 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);
}
我有一个使用包 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.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 次,但突然我超时一两次,五次,没有任何改变它再次工作...
您能否提供直接调用 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);
}