You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jenkins与Groovy修改package.json版本报错的解决咨询

问题:Jenkins Pipeline修改package.json的version值时写入报错

报错信息

org.kohsuke.stapler.NoStaplerConstructorException: There's no @DataBoundConstructor on any constructor of class java.lang.String
    at org.kohsuke.stapler.ClassDescriptor.loadConstructorParamNames(ClassDescriptor.java:288)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.<init>(DescribableModel.java:153)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:474)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.injectSetters(DescribableModel.java:429)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:331)
    at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:305)
    at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:196)
    at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:124)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:47)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.methodCall(DefaultInvoker.java:20)
Caused: java.lang.IllegalArgumentException: Could not instantiate {file={name=demo, version=0.0.0-alpha.0, dependencies={@testing-library/jest-dom=^5.16.5, @testing-library/react=^13.4.0, @testing-library/user-event=^13.5.0, react=^18.2.0, react-dom=^18.2.0, react-scripts=5.0.1, web-vitals=^2.1.4}, scripts={start=react-scripts start, build=react-scripts build, test=react-scripts test, eject=react-scripts eject, sonar-scanner=node_modules/sonar-scanner/bin/sonar-scanner}, eslintConfig={extends=[react-app, react-app/jest]}, browserslist={production=[>0.2%, not dead, not op_mini all], development=[last 1 chrome version, last 1 firefox version, last 1 safari version]}, description=## Available Scripts, main=index.js, repository={type=git, url=git+ssh://git@gitlab.com/***.git}, keywords=[**, Demo, UI], publishConfig={registry=http://****/repository/npm-private/}}} for org.jenkinsci.plugins.pipeline.utility.steps.json.WriteJSONStep
    at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:334)
    at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:305)
    at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:196)
    at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:124)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:47)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)

现有Groovy代码

def updateProjectPackage(params) {
    packageFile = readJSON(file: 'package.json')
    //params.appVersion = 0.0.0-alpha.0
    packageFile.version = params.appVersion
    writeJSON file: packageFile
}

原始package.json内容

{
  "name": "demo",
  "version": "0.1.0"
}

解决方案

错误原因

调用writeJSON时参数传错:writeJSON的file参数需要接收文件路径字符串,但你把读取到的JSON对象(packageFile)传给了file参数,导致Jenkins无法解析参数类型,抛出异常。

修正后的代码

def updateProjectPackage(params) {
    def packageFile = readJSON(file: 'package.json')
    packageFile.version = params.appVersion
    // 正确传入参数:file指定路径,json指定要写入的对象,可选pretty参数格式化输出
    writeJSON file: 'package.json', json: packageFile, pretty: 2
}

说明

  • file: 'package.json':指定要写入的文件路径
  • json: packageFile:指定要写入的JSON对象
  • pretty: 2:可选参数,让生成的JSON文件带缩进,提升可读性

内容的提问来源于stack exchange,提问作者kernel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 04:46:12