Конвейер Jenkins - файл не найден, исключение - PullRequest
0 голосов
/ 21 марта 2020

Я получаю файл не исключение в jenkins, хотя файл доступен в ожидаемом месте. То, что я пытаюсь сделать здесь, это получить последний зафиксированный файл и сохранить его в переменной filescommitted, передав его в качестве входных данных для чтения файла JSON. Кажется, значение переменной передается, но не удается найти файл в этом месте.

Ошибка:

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"

Это не работает для следующих случаев. Может кто-нибудь сказать мне, в чем проблема, пожалуйста?

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)
             }
}

Полный вывод на консоль jenkins:

[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.

1 Ответ

1 голос
/ 21 марта 2020

Похоже, что в конце содержания filesCommitted есть посторонний разрыв строки.

Попробуйте:

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

def projects = readJSON file: filesCommitted

Обычно хорошей привычкой является добавление trim() к шагу sh при использовании returnStdout:true. Это удалит все лишние пробелы до и после возвращенной строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...