首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jenkins管道-文件未找到异常

Jenkins管道-文件未找到异常
EN

Stack Overflow用户
提问于 2020-03-21 01:25:02
回答 1查看 1.6K关注 0票数 0

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

错误:

代码语言:javascript
复制
java.io.FileNotFoundException: /appl/JenkinsSlave/workspace/SDA_WIP_development/RA agent/java-infra-war-tomcat-piaas.json
 does not exist.

只有当我硬编码文件名时,它才能工作。

代码语言:javascript
复制
readJSON file: "java-infra-war-tomcat-piaas.json"

以下情况不适用。有人能告诉我有什么问题吗?

代码语言:javascript
复制
readJSON file: filesCommitted
readJSON file: "${env.WORKSPACE}/${filesCommitted}"
readJSON file: "${WORKSPACE}/${filesCommitted}"

Jenkins管道脚本:

代码语言:javascript
复制
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)
             }
}

完成jenkins控制台输出:

代码语言:javascript
复制
[Pipeline] sh
+ git diff --name-only 'HEAD^'
[Pipeline] sh
+ find . -name '*.json'
[Pipeline] echo
new files commited:java-infra-war-tomcat-piaas.json

[Pipeline] echo
all files commited:./java-infra-ear-jboss-piaas.json
./java-infra-war-tomcat-piaas.json
./java-infra-war-tomcat-piaas_demo.json
./angular-infra-zip-iis-piaas.json
./dotnet-infra-zip-iis-piaas.json

[Pipeline] sh
+ pwd
/appl/JenkinsSlave/workspace/SDA_WIP_development/RA agent
[Pipeline] sh
+ ls
angular-infra-zip-iis-piaas.json
dotnet-infra-zip-iis-piaas.json
java-infra-ear-jboss-piaas.json
java-infra-war-tomcat-piaas_demo.json
java-infra-war-tomcat-piaas.json
README.md
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Add agents in RA)
[Pipeline] echo
java-infra-war-tomcat-piaas.json

[Pipeline] readJSON
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
java.io.FileNotFoundException: /appl/JenkinsSlave/workspace/SDA_WIP_development/RA agent/java-infra-war-tomcat-piaas.json
 does not exist.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-21 10:54:12

看起来,在filesCommitted内容的末尾有一个无关的行间隔。

试试这个:

代码语言:javascript
复制
filesCommitted = sh(script:'git diff --name-only HEAD^', returnStdout:true).trim()

def projects = readJSON file: filesCommitted

在使用trim()时,向sh步骤中添加一个returnStdout:true通常是一个好习惯。这将在返回字符串之前和之后移除任何无关的空格。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60783611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档