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

后端 未结 4 2033
醉酒成梦
醉酒成梦 2020-12-01 11:36

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

相关标签:
4条回答
  • 2020-12-01 12:26

    If builds are not running in the same pipeline you can use direct CopyArtifact plugin, here is example: https://www.cloudbees.com/blog/copying-artifacts-between-builds-jenkins-workflow and example code:

    node {
       // setup env..
       // copy the deployment unit from another Job...
       step ([$class: 'CopyArtifact',
              projectName: 'webapp_build',
              filter: 'target/orders.war']);
       // deploy 'target/orders.war' to an app host
    }
    
    0 讨论(0)
  • 2020-12-01 12:27
    name = "/" + "${env.JOB_NAME}"
    def archiveName = 'relNum'
    try {
        step($class: 'hudson.plugins.copyartifact.CopyArtifact', projectName: name, filter: archiveName)
    } catch (none) {
        echo 'No artifact to copy from ' + name + ' with name relNum'
        writeFile file: archiveName, text: '3'
    }
    
    def content = readFile(archiveName).trim()
    echo 'value archived: ' + content
    

    try that using copy artifact plugin

    0 讨论(0)
  • 2020-12-01 12:35

    If you are using slaves in your master and you want to copy artifacts between each other you can use stash/unstash, for example:

    stage 'build'
    node{
       git 'https://github.com/cloudbees/todo-api.git'
       stash includes: 'pom.xml', name: 'pom'
    }
    
    stage name: 'test', concurrency: 3
    node {
       unstash 'pom'
       sh 'cat pom.xml' 
    }
    

    You can see this example in this link:

    https://dzone.com/refcardz/continuous-delivery-with-jenkins-workflow

    0 讨论(0)
  • 2020-12-01 12:36

    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

    0 讨论(0)
提交回复
热议问题