Jenkins流水线执行报错‘unexpected token: String’,请求协助解决
问题解决:Jenkins流水线语法错误及逻辑修正
错误原因分析
你遇到的unexpected token: String错误核心原因有两个:
- Groovy的for-in循环不需要显式指定变量类型(如
String),这是Java语法,Groovy不支持这种写法。 package是Groovy的关键字,不能用作循环变量名,会触发语法解析错误。- 额外逻辑问题:当输入单个包名时,
packages是字符串类型,直接循环会遍历每个字符,而非作为单个包处理,导致后续逻辑错误。
修正步骤
- 调整循环语法与变量名:移除变量类型声明,将
package改为合法变量名(如pkg)。 - 统一变量类型:无论输入单个还是多个包名,都将
packages转为数组类型,确保循环逻辑一致。 - 修正Artifactory curl命令的语法错误:原命令中引号拼接有误,需调整引号位置避免执行失败。
修正后的完整代码
pipeline { agent none parameters { string(name: 'PACKAGE_NAME', defaultValue: '', description: 'please provide aem package name') } environment { ARTIFACTORY_CREDENTIALS = credentials('artifactory') JIRA_JENKINS = credentials('ops-jira') } stages { stage('upload package') { agent { label 'ec2' } steps { script { withCredentials([usernamePassword(credentialsId: '<my cred id>', passwordVariable: 'admin_pw', usernameVariable: 'admin_user')]) { try { def packages = [] if(PACKAGE_NAME.contains(",")) { echo "Package contains multiple files" packages = PACKAGE_NAME.split(',') }else { echo "Package contains single file" packages << PACKAGE_NAME // 转为数组类型 } for(pkg in packages) { // 修正循环语法与变量名 def trimmedPkg = pkg.trim() // 处理包名中可能存在的空格 echo "Package name - ${trimmedPkg}" sh "curl -O -v -k -u ${admin_user}:${admin_pw} https://<myinstancename>/etc/packages/my_packages/${trimmedPkg} > ${trimmedPkg}_downloaded_logs" archiveArtifacts artifacts: '*.zip', followSymlinks: false // 修正Artifactory命令的引号拼接错误 sh "curl -X PUT -u '${ARTIFACTORY_CREDENTIALS_USR}:${ARTIFACTORY_CREDENTIALS_PSW}' -T ${trimmedPkg} 'https://<myartifactoryurl>/${trimmedPkg}/${BUILD_NUMBER}/'" echo "[MNR] - Deployment to Package completed" } }catch(Exception e) { echo "Error in deployment - ${e}" currentBuild.result = 'STABLE' } } } } } }
额外优化说明
- 添加
trimmedPkg = pkg.trim()处理多包名输入时,逗号后可能带有的空格问题。 - 将初始
packages定义为空数组,确保类型统一,避免非数组类型的循环遍历错误。 - 修正了Artifactory curl命令中用户名密码拼接的引号错误,原代码多余的引号会导致命令执行失败。
内容的提问来源于stack exchange,提问作者Aakash16
相关产品推荐
相关产品推荐

