wake-up-neo.net

Artefakt innerhalb einer Jenkins-Pipeline kopieren

Ich habe einen Jenkins-Pipeline-Job, der ein Artefakt in seiner ersten Phase archiviert. Ich muss dieses Artefakt dann in einer anderen Phase des Pipeline-Builds kopieren

node {
  stage 'Stage 1 of build'
  // Run tests, if successful archive the artifact
  archiveArtifacts artifacts: 'build/test.js', excludes: null
 stage 'Stage 2 of build'
 // want to copy artifact from stage 1 of the build
 step([$class: 'CopyArtifact', filter: 'build/test.js', fingerprintArtifacts: true, flatten: true, projectName: 'echo-develop-js-pipeline', selector: [$class: 'WorkspaceSelector'], target: './client/public/vendor/echo/'])
}

Damit bekomme ich einen unable to find a build for artifact copy

Wenn das Artefakt erstellt wurde, wird es hier gespeichert:

http://localhost:8181/view/Echo JS Develop/job/echo-develop-js-pipeline/233/artifact/build/test.js

Wie kann ich von einem Pipeline-Job aus auf das erstellte Artefakt zugreifen?

6
Richlewis

Überlegte es hier, also können Sie mit der var $ {BUILD_NUMBER} auf Artefakte von der aktuellen Pipeline aus zugreifen

step([$class: 'CopyArtifact', filter: 'build/test.js', fingerprintArtifacts: true, flatten: true, projectName: 'echo-develop-js-pipeline', selector: [$class: 'SpecificBuildSelector', buildNumber: '${BUILD_NUMBER}'], target: './client/public/vendor/echo/'])
6
Richlewis

Ich brauchte dies kürzlich, und keine der anderen Lösungen hier hat genau das gemacht, was ich wollte, weil ich muss mehrere Parameterfilter verwenden für meine Auswahl verwenden. Ich habe das "Run Selector Plugin" zusätzlich zum direkten Aufruf des "Copy Artifact Plugin" verwendet:

Schritt 1: Wählen Sie die benötigte Build-Nummer aus.

prereq_build = selectRun filter: parameters("TARGET_OS=${TARGET_OS},GIT_BRANCH_NAME=${GIT_BRANCH_NAME}"), job: 'prereq_rpms', selector: status('STABLE'), verbose: true

Zweiter Schritt: Kopieren (aktualisiert 2017-11: Unterstützung der systemeigenen Pipeline jetzt!).

        copyArtifacts(
          projectName: 'prereq_rpms',
          filter: '**/*.rpm',
          fingerprintArtifacts: true,
          target: 'prereq',
          flatten: true,
          selector: specific(prereq_build.getId())
        )
5

Im Pipeline-Plugin gibt es eine neue Funktion namens "stash", "unstash" anstelle von Artefakten.

Artefakt: Archive sind für eine längerfristige Dateispeicherung konzipiert (z. B. Binärdateien aus Builds). Artefakt erfordert mehr Speicherplatz und Ressourcenverwaltung. 

Stash: Speichert eine Gruppe von Dateien und verwendet sie später im selben Build, im Allgemeinen auf einem anderen Knoten/Arbeitsbereich. Stash- und Unstash-Schritte sind für die Verwendung mit kleinen Dateien konzipiert. Stash/Unstash kann innerhalb einer Pipeline verwendet werden, indem dem Stash lediglich ein Name zugewiesen wird und nur lokal funktioniert.

Hier ist ein gutes Beispiel für Stash/Unstash: Tutorial

2
lakshmi kumar