How can I use the Jenkins Copy Artifacts Plugin from within the pipelines (jenkinsfile)?

sorin picture sorin · Apr 25, 2016 · Viewed 63.8k times · Source

I am trying to find an example of using the Jenkins Copy Artifacts Plugin from within Jenkins pipelines (workflows).

Can anyone point to a sample Groovy code that is using it?

Answer

Nelson G. picture Nelson G. · Oct 4, 2017

With a declarative Jenkinsfile, you can use following pipeline:

pipeline {
    agent any
    stages {
        stage ('push artifact') {
            steps {
                sh 'mkdir archive'
                sh 'echo test > archive/test.txt'
                zip zipFile: 'test.zip', archive: false, dir: 'archive'
                archiveArtifacts artifacts: 'test.zip', fingerprint: true
            }
        }

        stage('pull artifact') {
            steps {
                copyArtifacts filter: 'test.zip', fingerprintArtifacts: true, projectName: '${JOB_NAME}', selector: specific('${BUILD_NUMBER}')
                unzip zipFile: 'test.zip', dir: './archive_new'
                sh 'cat archive_new/test.txt'
            }
        }
    }
}

Before version 1.39 of the CopyArtifact, you must replace second stage with following (thanks @Yeroc) :

stage('pull artifact') {
    steps {
        step([  $class: 'CopyArtifact',
                filter: 'test.zip',
                fingerprintArtifacts: true,
                projectName: '${JOB_NAME}',
                selector: [$class: 'SpecificBuildSelector', buildNumber: '${BUILD_NUMBER}']
        ])
        unzip zipFile: 'test.zip', dir: './archive_new'
        sh 'cat archive_new/test.txt'
    }
}

With CopyArtifact, I use '${JOB_NAME}' as project name which is the current running project.

Default selector used by CopyArtifact use last successful project build number, never current one (because it's not yet successful, or not). With SpecificBuildSelector you can choose '${BUILD_NUMBER}' which contains current running project build number.

This pipeline works with parallel stages and can manage huge files (I'm using a 300Mb file, it not works with stash/unstash)

This pipeline works perfectly with my Jenkins 2.74, provided you have all needed plugins