使用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
相关产品推荐
相关产品推荐

