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

Jenkins流水线执行报错‘unexpected token: String’,请求协助解决

问题解决:Jenkins流水线语法错误及逻辑修正

错误原因分析

你遇到的unexpected token: String错误核心原因有两个:

  • Groovy的for-in循环不需要显式指定变量类型(如String),这是Java语法,Groovy不支持这种写法。
  • package是Groovy的关键字,不能用作循环变量名,会触发语法解析错误。
  • 额外逻辑问题:当输入单个包名时,packages是字符串类型,直接循环会遍历每个字符,而非作为单个包处理,导致后续逻辑错误。

修正步骤

  1. 调整循环语法与变量名:移除变量类型声明,将package改为合法变量名(如pkg)。
  2. 统一变量类型:无论输入单个还是多个包名,都将packages转为数组类型,确保循环逻辑一致。
  3. 修正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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:12:52