Dans Jenkins Pipeline, comment puis-je copier les artefacts d'une build précédente vers la build actuelle? Je veux faire cela même si la version précédente a échoué.

0
Craig Rodrigues 27 janv. 2019 à 00:29

3 réponses

Meilleure réponse

Stuart Rowe m'a également recommandé sur le Pipeline Authoring Sig Gitter channel que j'ai regardé le plugin Copy Artifact, mais m'a également donné un échantillon Syntaxe du pipeline Jenkins à utiliser.

Sur la base des conseils qu'il a donnés, j'ai trouvé cet exemple de Pipeline plus complet qui copie les artefacts de la construction précédente dans la construction actuelle, que la construction précédente ait réussi ou échoué.

pipeline {
    agent any;

    stages {
        stage("Zeroth stage") {
            steps {
                script {
                    if (currentBuild.previousBuild) {
                        try {
                            copyArtifacts(projectName: currentBuild.projectName,
                                          selector: specific("${currentBuild.previousBuild.number}"))
                            def previousFile = readFile(file: "usefulfile.txt")
                            echo("The current build is ${currentBuild.number}")
                            echo("The previous build artifact was: ${previousFile}")
                        } catch(err) {
                            // ignore error
                        }
                    }
                }
            }
        }

        stage("First stage") {
            steps {
                echo("Hello")
                writeFile(file: "usefulfile.txt", text: "This file ${env.BUILD_NUMBER} is useful, need to archive it.")
                archiveArtifacts(artifacts: 'usefulfile.txt')
            }
        }

        stage("Error") {
            steps {
                error("Failed")
            }
        }
    }
}
3
Craig Rodrigues 27 janv. 2019 à 22:47

Supposons que vous souhaitiez un seul fichier de la version précédente, vous pouvez même utiliser curl pour placer le fichier dans l'espace de travail avant l'invocation mvn.

stage('Copy csv') {
            steps {
                   sh "mkdir -p ${env.WORKSPACE}/dump"
                    sh "curl http://<jenkins-url>:<port>/job/<job-folder>/job/<job-name>/job/<release>/lastSuccessfulBuild/artifact/dump/sample.csv/*view*/ -o ${env.WORKSPACE}/dump/sample.csv"
            }
        }    

Merci, Ashish

0
ashish 21 févr. 2019 à 07:11

Vous pouvez utiliser Copier le plug-in Artifact

Pour la configuration, visitez https://wiki.jenkins.io/display/JENKINS/Copy + Artefact + Plugin

0
Subhash 27 janv. 2019 à 07:03