web-dev-qa-db-ja.com

パイプライン(jenkinsfile)内からJenkins Copy Artifactsプラグインを使用するにはどうすればよいですか?

Jenkinsパイプライン(ワークフロー)内からJenkins Copy Artifactsプラグインを使用する例を見つけようとしています。

誰でもそれを使用しているサンプルGroovyコードを指すことができますか?

23
sorin

ビルドが同じパイプラインで実行されていない場合、直接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
}
25
krynio

宣言的な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 {
                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'
            }
        }
    }
}

CopyArtifactのバージョン1.39より前は、2番目のステージを次のように置き換える必要があります(@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'
    }
}

CopyArtifactでは、現在実行中のプロジェクトであるプロジェクト名として「$ {JOB_NAME}」を使用します。

CopyArtifactが使用するデフォルトセレクターは、最後に成功したプロジェクトビルド番号を使用し、現在のプロジェクトビルド番号は使用しません(まだ成功していないか、そうでないため)。 SpecificBuildSelectorを使用すると、現在実行中のプロジェクトビルド番号を含む「$ {BUILD_NUMBER}」を選択できます。

このパイプラインは並列ステージで機能し、巨大なファイルを管理できます(私は300Mbファイルを使用していますが、stash/unstashでは機能しません)

このパイプラインは、必要なプラグインがすべて揃っていれば、私のJenkins 2.74と完全に連携します

29
Nelson G.

マスターでスレーブを使用しており、相互にアーティファクトをコピーする場合は、stash/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

23
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

コピーアーティファクトプラグインを使用してそれを試してください

1
Ross Beazley