如何使用声明性管道从已执行作业中复制工件?

时间:2017-04-28 09:59:18

标签: jenkins jenkins-pipeline

我的管道脚本如下所示:

pipeline {
    agent {
        label 'my-pc'
    }

    stages {
        stage ('Build') {
            steps {
                build job: 'myjob', parameters: [string(name: 'BRANCH', value: 'master')]
            }
            post {
                always {
                    sh 'echo TODO: copy artifacts here'
                }
            }
        }

    }
}

我想复制 myjob 生成的工件。我怎么能这样做?

Jenkins文档页面"Recording tests and artifacts"有一条不适用于我的管道的指令(在我的例子中,工件由一个单独的作业生成)。

2 个答案:

答案 0 :(得分:3)

您可以使用Copy Artifact plugin然后将其与step步骤一起使用,这样可以像Freestyle作业一样调用构建器或后构建操作。请参阅作业的管道语法并查阅Snippet Generator。 (https://[jenkins-url]/[path-to-your-job]/pipeline-syntax/

这是将所有工件从作业myjob复制到当前管道作业工作区的方法:

pipeline {
    agent {
        label 'my-pc'
    }

    stages {
        stage ('Build') {
            steps {
                build job: 'myjob', parameters: [string(name: 'BRANCH', value: 'master')]
            }
            post {
                always {
                    step([
                        $class: 'CopyArtifact',
                        filter: '*',
                        projectName: 'myjob',
                        selector: [
                            $class: 'StatusBuildSelector',
                            stable: false
                        ]])
                }
            }
        }
    }
}

答案 1 :(得分:1)

比Travenin和Vadim Kotov上面写的语法更简单。它是在插件的1.39版中引入的。您可以使用以下命令复制上次成功运行myJob的所有工件:

pipeline {
    // pipeline code

    steps {
        copyArtifacts(filter:'*', projectName: 'myJob', selector: lastSuccessful())
    }

    // pipeline code
}

此语法适用于脚本管道和声明性管道。在Copy Artifact Plugin Wiki页面上查看copyArtifacts函数的可用参数。