Jenkinsfile(文件参数)仅返回上传的文件名(文件未保存在工作区中)

问题描述 投票:0回答:2

我正在尝试使用文件参数,该参数不会将文件保存在管道项目的工作区中,它返回已上传的文件名(不是完整路径,只有文件名)

pipeline {
    agent any
    parameters {
        file(name:'FILE', description: 'upload excel file')
    }

    stages {
        stage('upload') {
            steps {
                script {
                    echo "Parameter file: ${params}" // output: Parameter file: [:]
                    echo "file name: ${FILE}" // file name: uploaded_file.xlsx
                    def workspace = pwd()
                    def fullPath = workspace + "\\" + FILE
                    if (fileExists(fullPath)) {
                        echo "File exists"
                    } else {
                        echo "File does not exist" // this will be run as fullPath has no such file.
                    }
                }
            }
        }
    }
}

只是为了让您知道

params.FILE
为空,并且
FILE
包含文件名。 现在,如果我尝试使用
readFile(FILE)
它的工作并返回文件的内容(没有完整路径,因为 FILE 只是文件名)。 因此,有一个很好的解决方案将文件保存在工作区中。 我知道我们可以使用文件参数插件,但尝试使用文件参数来实现(如果可能)。 有什么解释
readFile
是如何工作的吗?

jenkins jenkins-plugins jenkins-groovy jenkins-cli
2个回答
0
投票

似乎文件参数在管道中未按预期工作,而仅在自由式作业中工作。您可以在这里找到有关此主题的更多信息:

带有文件参数的 Jenkins 管道作业

或这里:

https://issues.jenkins.io/browse/JENKINS-27413

关于readFile,你可以在Jenkins Docs中找到描述:

https://www.jenkins.io/doc/pipeline/steps/workflow-basic-steps/#readfile-read-file-from-workspace

简而言之,它正在读取相对于工作空间的文件内容。因此,如果上传的文件驻留在工作区根目录中,例如,这应该有效:

filecontents = readFile file: "filename.txt"
echo "${filecontents}"

0
投票

你找到解决方案了吗?我有相同的用例,获取文件用户输入并将相同的文件上传到某个位置。但是文件丢失了

© www.soinside.com 2019 - 2024. All rights reserved.