简体   繁体   中英

Copy file from Jenkins master to slave in Pipeline

I have some windows slave at my Jenkins so I need to copy file to them in pipeline. I heard about Copy To Slave and Copy Artifact plugins, but they doesn't have pipeline syntax manual. So I don't know how to use them in pipeline.

Direct copy doesn't work.

def inputFile = input message: 'Upload file', parameters: [file(name: 'parameters.xml')]
new hudson.FilePath(new File("${ENV:WORKSPACE}\\parameters.xml")).copyFrom(inputFile)

This code returns and error:

Caused: java.io.IOException: Failed to copy /var/lib/jenkins/jobs/_dev/jobs/(TEST)job/builds/107/parameters.xml to d:\Jenkins\workspace\_dev\(TEST)job\parameters.xml

Is there any way to copy file from master to slave in Jenkins Pipeline?

As I understand copyFrom is executed on your Windows node, therefore the source path is not accessible.

I think you want to look into the stash / unstash steps ( Jenkins Pipeline: Basic Steps ), which work across different nodes. Also this example might be helpful.

Pipeline DSL context runs on master node even that your write node('someAgentName') in your pipeline.

  • Try to use stash/unstash , but it is bad for large files.
  • Try External Workspace Manager Plugin . It has pipelines steps and good for large files.
  • Try to use an intermediate storage. archive() and sh("wget $url") will be helpful.

If the requirement is to copy an executable to the test slave and to publish the test results, this is easy to do without the Copy to Slave plugin.

A shared folder should be created on each test slave (normal Windows shared folder).

After build: Build script copies the executable to the shared directory on each slave. A simple batch script using copy command is sufficient for this.

stage ('Copy to slaves') {
    steps {
        bat 'call "copy-to-slave.bat"'
    }
}

During test: The test script copies the executable to another directory and runs it.

After test: Post-build action "Publish Robot Framework test results" can be used to report the test results. It is not necessary to copy the test result files back to the master first.

I recommend on Pipeline: Phoenix AutoTest plugin

Jenkins plugin website: https://plugins.jenkins.io/phoenix-autotest/#documentation

GitHub repository of plugin: https://github.com/jenkinsci/phoenix-autotest-plugin

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM