2016-06-22 17 views
5

Sto lavorando all'implementazione di un lavoro di costruzione utilizzando Jenkins Multibranch Pipelines. La fase finale sta caricando l'output di build su Artifactory.Come impostare Artifactory discardOldBuilds su true in un Jenkinsfile?

Quando si configura un lavoro autonomo tramite l'interfaccia, esiste un'opzione per "Rifiutare vecchie build da Artifactory" che mi consente di conservare solo lo stesso numero di build specificato nell'impostazione "Numero massimo di build da mantenere".

La fase di upload nel mio Jenkinsfile è configurato in questo modo: https://wiki.jenkins-ci.org/display/JENKINS/Artifactory+-+Working+With+the+Pipeline+Jenkins+Plugin

... e ho anche il seguente nella mia Jenkinsfile che fa pulizia le generazioni nello spazio di lavoro Jenkins:

properties([[$class: 'BuildDiscarderProperty', strategy: [$class: 'LogRotator', numToKeepStr: '10']]]) 

Come posso impostare discardOldBuilds su true nel mio Jenkinsfile così posso anche ripulire le build memorizzate in Artifactory?

risposta

4

Questo è stato risolto nell'ultimo plugin Artifactory Jenkins.

Come per la documentazione, per innescare la ritenzione generazione quando la pubblicazione di accumulo di informazioni per Artifactory, utilizzare il seguente metodo:

buildInfo retention maxBuilds: 10 
buildInfo retention maxDays: 7 
// deleteBuildArtifacts is false by default. 

buildInfo retention maxBuilds: 10, maxDays: 7, doNotDiscardBuilds: ["3", "4"], deleteBuildArtifacts: true 
+0

Posso chiedere cosa significa "3,4" in "doNotDiscardBuilds: [" 3 "," 4 "]' – uncletall

+1

Significa che le build numerate # 3 e # 4 in Jenkins non verranno scartate. Questo non verrà aggiunto al maxBuilds, quindi se hai maxBuilds impostato su 10, manterrà le build # 3, # 4 e le ultime 8. – rasebo

3

Into JenkinsFile https://github.com/jenkinsci/jenkins/blob/master/Jenkinsfile ufficiale è:

properties([[$class: 'jenkins.model.BuildDiscarderProperty', strategy: 
      [$class: 'LogRotator', numToKeepStr: '50', artifactNumToKeepStr: '20'] 
      ]]) 

Un esempio di uso personale con il plugin github e Jenkins gasdotto multiramo:

#!groovy 

node { 

    try { 
    properties([ 
     [ 
     $class: 'jenkins.model.BuildDiscarderProperty', 
     strategy: [ 
      $class: 'LogRotator', 
      numToKeepStr: '10' 
      ] 
     ], 
     [ 
     $class: 'GithubProjectProperty', 
     displayName: '', 
     projectUrlStr: 'https://github.com/xxxxxxx/xxxxx-xxxx/' 
     ] 
    ]) 

    env.JAVA_HOME = tool 'JDK8' 
    def mvnHome = tool 'Maven' 

    stage 'Clean Workspace' 
     deleteDir() 


    stage 'Git Checkout Source' 
     checkout scm 


    stage 'Build Maven Module' 
     sh "${mvnHome}/bin/mvn clean install -DskipTests=true -DskipITs=true -U" 


    stage 'Unit Test Maven Module' 
     sh "${mvnHome}/bin/mvn test -DskipTests=false -DskipITs=true" 


    stage 'Integration Test Maven Module' 
     sh "${mvnHome}/bin/mvn verify -DskipTests=true -DskipITs=false" 


    stage 'Nexus Deploy Artifact' 
     sh "${mvnHome}/bin/mvn deploy:deploy -Pnexus-deploy" 


    stage 'Trigger Job xxxxxx-xxxxxx /master' 
     build job: 'xxxxxx-xxxxxx/master', propagate: false, wait: false 



    stage 'Send Success Email' 
     mail from: '[email protected]', 
      to: '[email protected]', 
      subject: "[JENKINS] ${env.JOB_NAME} - Build # ${env.BUILD_NUMBER} - [SUCCESS]!", 
      body: "${env.JOB_NAME} - Build # ${env.BUILD_NUMBER} - SUCCESS!" 

    } 
    catch (Exception ex) { 
    mail from: '[email protected]', 
     to: '[email protected]', 
     subject: "FAILURE - [JENKINS] ${env.JOB_NAME} - Build # ${env.BUILD_NUMBER} - [FAILURE]!", 
     body: "${env.JOB_NAME} - Build # ${env.BUILD_NUMBER} - FAILURE (${ex.message})!" 
    throw ex 
    } 

} 

Nel mio Sonatype Nexus, ho creato un compito di ripulire il artefatti. enter image description here

Non uso 'Artifactory', ma credo che sia possibile creare un task interno per cancellarlo.

È inoltre possibile rimuovere manualmente, nel caso di utilizzo Maven, è possibile seguire questo esempio:

How do you deal with maven-3 timestamped snapshots efficiently?

Spero che ho aiutato.

+1

provato, non funziona, e non sono sicuro che è un'opzione per il plugin Artifactory. Sfortunatamente, finora sembra che questo sia un limite su come viene implementato il DSL Artificial per Pipeline Multibranch. – rasebo

+0

Sto usando e funziona per me. Inserirò un esempio di uso personale. – frekele

3

Triggering Artifactory È previsto che la conservazione della build da uno script Pipeline venga supportata nella prossima versione di Jenkins Artifactory Plugin. Vedi questo numero: https://www.jfrog.com/jira/browse/HAP-796

+0

Grazie per le informazioni, in attesa di aggiornamento, quindi. – rasebo