5

I am working on implementing a build job using Jenkins Multibranch Pipelines. The final stage is uploading the build output to Artifactory.

When configuring a standalone job via the interface, there is an option to "Discard old builds from Artifactory" which allows me to only keep the same number of builds as specified in "Max # of builds to keep" setting.

The upload stage in my Jenkinsfile is configured like this: https://wiki.jenkins-ci.org/display/JENKINS/Artifactory+-+Working+With+the+Pipeline+Jenkins+Plugin

... and I also have the following in my Jenkinsfile which does clean-up the builds in the Jenkins workspace:

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

How can I set discardOldBuilds to true in my Jenkinsfile so I can also clean-up the builds stored in Artifactory?

rasebo
  • 957
  • 1
  • 13
  • 21

3 Answers3

4

Into official JenkinsFile https://github.com/jenkinsci/jenkins/blob/master/Jenkinsfile has:

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

A example of own use with github plugin and jenkins multibranch pipeline:

#!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: 'noreply-jenkins@xxxxxxx.io',
           to: 'tools@xxxxxxx.io',
           subject: "[JENKINS] ${env.JOB_NAME} - Build # ${env.BUILD_NUMBER} - [SUCCESS]!",
           body: "${env.JOB_NAME} - Build # ${env.BUILD_NUMBER} - SUCCESS!"

  }
  catch (Exception ex) {
    mail from: 'noreply-jenkins@xxxxxxx.io',
         to: 'tools@xxxxxxx.io',
         subject: "FAILURE - [JENKINS] ${env.JOB_NAME} - Build # ${env.BUILD_NUMBER} - [FAILURE]!",
         body: "${env.JOB_NAME} - Build # ${env.BUILD_NUMBER} - FAILURE (${ex.message})!"
    throw ex
  }

}

In my Sonatype Nexus, I created a task to clean up the artifacts. enter image description here

I do not use 'Artifactory', but I believe you can create an internal task to clear it.

You can also manually remove, in the case of maven use, you can follow this example:

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

I hope I helped you.

Community
  • 1
  • 1
frekele
  • 644
  • 6
  • 13
  • 1
    Tried it, doesn't work, and I am not sure that is an option for the Artifactory plugin. Unfortunately, so far it looks like this is a limitation on how the Artifactory DSL for Multibranch Pipelines is implemented. – rasebo Jul 01 '16 at 13:06
  • I'm using and it works for me. I will insert an example of own use. – frekele Jul 03 '16 at 04:12
4

This has been fixed in the latest Artifactory Jenkins plugin.

As per the documentation, to trigger build retention when publishing build-info to Artifactory, use the following method:

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

buildInfo retention maxBuilds: 10, maxDays: 7, doNotDiscardBuilds: ["3", "4"], deleteBuildArtifacts: true
rasebo
  • 957
  • 1
  • 13
  • 21
  • May I ask what the `3,4` means in `doNotDiscardBuilds: ["3", "4"]` – uncletall Aug 26 '17 at 13:21
  • 1
    It means that the builds numbered #3 and #4 in Jenkins will not be discarded. This will not be added to the maxBuilds, so if you have maxBuilds set to 10, it will keep builds #3, #4 and the latest 8. – rasebo Aug 29 '17 at 09:41
3

Triggering Artifactory Build retention from a Pipeline script is planned to be supported in the coming release of the Jenkins Artifactory Plugin. See this issue: https://www.jfrog.com/jira/browse/HAP-796

Eyal Ben Moshe
  • 2,400
  • 12
  • 15