Jenkins管道-未找到文件异常

时间:2020-03-21 01:25:02

标签: json groovy jenkins-pipeline jenkins-groovy

尽管文件在预期位置可用,但我在jenkins中得到的文件也不例外。 我在这里试图做的是,获取最新的提交文件并存储在filescommitted变量中,然后将其作为输入传递给readJSON文件。似乎传递了变量值,但无法在该位置找到文件。

错误:

zsh

仅当我对文件名进行硬编码时,它才有效

java.io.FileNotFoundException: /appl/JenkinsSlave/workspace/SDA_WIP_development/RA agent/java-infra-war-tomcat-piaas.json
 does not exist.

在以下情况下不起作用。有人可以给我打电话什么问题吗?

readJSON file: "java-infra-war-tomcat-piaas.json"

Jenkins管道脚本:

readJSON file: filesCommitted
readJSON file: "${env.WORKSPACE}/${filesCommitted}"
readJSON file: "${WORKSPACE}/${filesCommitted}"

完整的jenkins控制台输出:

import groovy.json.JsonSlurper
        import groovy.json.*
        import groovy.json.JsonBuilder

        node('java'){
            def gitURL = Git_URL as String
            def branchName = Branch as String
            def GitHubCredentialsId = GitHub_Credentials_Id as String
            def filesCommitted

            stage('Clean')
            {
              deleteDir()   
            }

            stage('SCM')
            {
                git branch: branchName, credentialsId: GitHubCredentialsId, url: gitURL
                filesCommitted = sh(script:'git diff --name-only HEAD^', returnStdout:true)
                def files = sh(script: "find . -name '*.json'", returnStdout:true)    
                println ("new files commited:" + filesCommitted)
                println ("all files commited:" + files)
                sh "pwd"
                sh "ls"
            }

            stage('Add agents in RA'){
                //def infra_file = unstashParam "infrafile"
                //println(infra_file)
                println(env.WORKSPACE)
                println (filesCommitted)
                def projects = readJSON file: "${env.WORKSPACE}/${filesCommitted}"
                println(projects)
             }
}

1 个答案:

答案 0 :(得分:1)

filesCommitted内容的末尾似乎有多余的换行符。

尝试一下:

filesCommitted = sh(script:'git diff --name-only HEAD^', returnStdout:true).trim()

def projects = readJSON file: filesCommitted

使用trim()时,通常将sh添加到returnStdout:true步骤中是一个好习惯。这将删除返回的字符串前后的所有多余空格。

相关问题