如何从管道内使用Jenkins Copy Artifacts插件(jenkinsfile)?

问题描述:

我想找到一个Jenkins管道(工作流)中使用Jenkins Copy Artifacts插件的例子。如何从管道内使用Jenkins Copy Artifacts插件(jenkinsfile)?

任何人都可以指出一个正在使用它的示例Groovy代码?

如果版本是不是在同一个管道运行,您可以使用直接CopyArtifact插件,这里是例子:https://www.cloudbees.com/blog/copying-artifacts-between-builds-jenkins-workflow和示例代码:

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 
} 

如果您使用的是你的主人的奴隶,你想对方你可以使用藏匿/ unstash之间复制文物,例如:

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' 
} 

您可以在这个链接看到这个例子

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

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 

尝试使用复制神器插件

凭借声明Jenkinsfile,您可以使用以下管道:

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' 
      } 
     } 
    } 
} 

使用CopyArtifact,我使用'$ {JOB_NAME}'作为当前正在运行的项目的项目名称。

CopyArtifact使用的默认选择器使用上次成功的项目内部版本号,从不是当前版本号(因为它尚未成功或不成功)。用SpecificBuildSelector您可以选择'$ {BUILD_NUMBER}',其中包含当前正在运行的项目内部版本号。

这条管道可与平行的阶段,能够管理庞大的文件(我使用的是300MB的文件,它不工作与藏匿/ unstash)

这条管道与我詹金斯2.74完美的作品,只要你有所有需要的插件

+0

你碰巧知道这个步骤([$ class:'CopyArtifact',语法记录吗?我想我记得它是由Snippet生成器生成的,现在找不到它..我特别想知道如何使用参数化构建选择器。 – inger

+0

我看到一个例子[here](https://wiki.jenkins.io/dis播放/ JENKINS /复制+神器+插件)。关于'SpecificBuildSelector',我通过分析[插件代码](https://github.com/jenkinsci/copyartifact-plugin/tree/copyartifact-1.38.1/src/main/java/hudson/plugins/copyartifact)来猜测它。 –