Jenkins Pipeline Job with file parameter

2019-01-11 18:23发布

问题:

I'm putting together a Jenkins pipeline job which will take a file parameter. I can trigger the job and point it at a file however I can't find where the file has ended up (In an ordinary freestyle job it would be in the workspace).

Where has the uploaded file gone? Or do file parameters not currently work with pipelines?

回答1:

There is currently an issue with pipeline and file parameter (https://issues.jenkins-ci.org/browse/JENKINS-27413).



回答2:

Solved it the following way:

node {
    deleteDir()
    stage("upload") {
        def inputFile = input message: 'Upload file', parameters: [file(name: 'data.zip')]
        new hudson.FilePath(new File("$workspace/data.zip")).copyFrom(inputFile)
        inputFile.delete()
    }
    stage("checkout") {
        echo fileExists('data.zip').toString()

    }
}

I know the solution is not that beautiful because the pipeline gets interrupted for the upload but it works.

Further the "copyFrom" is necessary, because the input stores the "data.zip" in the jobs directory and not in the workspace (don't know why)



回答3:

I tried using the solution provided by @Christoph Forster , but the input File was not getting copied anywhere in the workspace . So I used the workaround as provided in https://bitbucket.org/janvrany/jenkins-27413-workaround-library/src/6b7dada8ea37?at=default

The library provides a new library - unstashParam - that saves the file build parameter into a workspace. Works fine with text and yaml file .



回答4:

Found a WA (Strictly for text based file input) We can use Jenkins multi-line string parameter and ask user to paste file contents to it. And in our pipeline, write contents of this parameter using pipeline step writeFile, as :

stage('File Param WA') {
          writeFile file: 'demo.yaml', text: params.DEMO_YAML
}