Azure Pipelines执行OpenAPI Generator命令遇504及TypeError问题
Azure Pipelines中OpenAPI Generator间歇性失败问题排查与解决
问题根源
你的命令间歇性失败有两个关联原因:
- 主因:网络网关超时(504)
OpenAPI Generator CLI默认会在运行时请求官方仓库查询版本信息,Azure Pipelines代理的网络偶发延迟导致请求超时,返回AWS ELB的504响应,触发后续错误。 - 次生错误:CLI错误处理逻辑bug
当收到504这类非流式响应时,CLI的错误处理代码尝试调用error.response.data.on('data'),但此时response.data并非流对象(可能是字符串或Buffer),因此抛出TypeError: error.response.data.on is not a function。
执行命令
openapi-generator-cli generate -g csharp-netcore --additional-properties=prependFormOrBodyParameters=true,targetFramework=net6.0,packageName=Microservice.Sdk -o out -i $(swaggerLocation)/$(appName).v1.json --skip-validate-spec
报错信息
server awselb/2.0
content-type text/html
content-length 132
connection close
/opt/hostedtoolcache/node/16.19.0/x64/lib/node_modules/@openapitools/openapi-generator-cli/main.js:1045 error.response.data.on('data', data => this.logger.log(data.toString('utf8'))); ^ TypeError: error.response.data.on is not a function at VersionManagerService.printResponseError (/opt/hostedtoolcache/node/16.19.0/x64/lib/node_modules/@openapitools/openapi-generator-cli/main.js:1045:33) at /opt/hostedtoolcache/node/16.19.0/x64/lib/node_modules/@openapitools/openapi-generator-cli/main.js:924:18 at /opt/hostedtoolcache/node/16.19.0/x64/lib/node_modules/@openapitools/openapi-generator-cli/node_modules/rxjs/dist/cjs/internal/operators/catchError.js:13:51 at OperatorSubscriber._this._error (/opt/hostedtoolcache/node/16.19.0/x64/lib/node_modules/@openapitools/openapi-generator-cli/node_modules/rxjs/dist/cjs/internal/operators/OperatorSubscriber.js:43:21) at OperatorSubscriber.Subscriber.error (/opt/hostedtoolcache/node/16.19.0/x64/lib/node_modules/@openapitools/openapi-generator-cli/node_modules/rxjs/dist/cjs/internal/Subscriber.js:60:18) at OperatorSubscriber.Subscriber._error (/opt/hostedtoolcache/node/16.19.0/x64/lib/node_modules/@openapitools/openapi-generator-cli/node_modules/rxjs/dist/cjs/internal/Subscriber.js:84:30) at OperatorSubscriber.Subscriber.error (/opt/hostedtoolcache/node/16.19.0/x64/lib/node_modules/@openapitools/openapi-generator-cli/node_modules/rxjs/dist/cjs/internal/Subscriber.js:60:18) at OperatorSubscriber.Subscriber._error (/opt/hostedtoolcache/node/16.19.0/x64/lib/node_modules/@openapitools/openapi-generator-cli/node_modules/rxjs/dist/cjs/internal/Subscriber.js:84:30) at OperatorSubscriber.Subscriber.error (/opt/hostedtoolcache/node/16.19.0/x64/lib/node_modules/@openapitools/openapi-generator-cli/node_modules/rxjs/dist/cjs/internal/Subscriber.js:60:18) at OperatorSubscriber.Subscriber._error (/opt/hostedtoolcache/node/16.19.0/x64/lib/node_modules/@openapitools/openapi-generator-cli/node_modules/rxjs/dist/cjs/internal/Subscriber.js:84:30)
解决方案
1. 固定Generator版本,跳过版本查询
在命令中添加--generator-version参数指定具体版本,避免CLI发起网络请求查询版本:
openapi-generator-cli generate --generator-version 6.6.0 -g csharp-netcore --additional-properties=prependFormOrBodyParameters=true,targetFramework=net6.0,packageName=Microservice.Sdk -o out -i $(swaggerLocation)/$(appName).v1.json --skip-validate-spec
选择你之前稳定运行的版本号即可
2. 在Azure Pipelines中添加步骤重试
针对该script步骤配置重试,应对偶发网络问题:
steps: - script: "openapi-generator-cli generate ..." displayName: "Generate SDK" retryCount: 3 retryIntervalInSeconds: 10
3. 离线运行Generator(彻底规避网络依赖)
提前下载OpenAPI Generator的jar包到Pipeline代理,直接用Java运行,完全跳过网络请求:
java -jar openapi-generator-cli-6.6.0.jar generate -g csharp-netcore --additional-properties=prependFormOrBodyParameters=true,targetFramework=net6.0,packageName=Microservice.Sdk -o out -i $(swaggerLocation)/$(appName).v1.json --skip-validate-spec
4. 降级CLI版本修复错误处理bug
该TypeError是特定版本@openapitools/openapi-generator-cli的bug,降级到2.6.0版本可规避:
npm install -g @openapitools/openapi-generator-cli@2.6.0
内容的提问来源于stack exchange,提问作者sharma
相关产品推荐
相关产品推荐

