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

匿名 (未验证) 提交于 2019-12-03 01:25:01

问题:

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?

回答1:

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 } 


回答2:

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



回答3:

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 {                 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



回答4:

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



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!