Jenkins

Pipeline

  • is main Jenkins plugin which act as main build engine (from Jenkins 2.0)
  • replay feature let to run job with modified by hand Jenkinsfile

Scripted pipeline

It is possible to write Jenkinsfile's as Groovy scripts (advanced) or using Declarative Pipeline Syntax.

Top 10 Best Practices for Jenkins Pipeline https://www.blazemeter.com/blog/how-to-use-the-jenkins-scripted-pipeline https://jenkins.io/doc/book/pipeline/syntax/#scripted-pipeline

jenkinsfile
node {
    stage("a") {
    }
    stage("b") {
    }
    stage("c") {
        parallel (
            'taskA': { stage("1") { }},
            'taskB': { stage("2") { }},
        )
    }
    stage("archive") {
        archiveArtifacts artifacts: 'out_*/*.*'
        archiveArtifacts artifacts: 'contiki/tools/cc2538-bsl/cc2538-bsl.py'    
    }
}

NOTE:

Creating your first Pipeline https://jenkins.io/doc/pipeline/examples/ https://www.blazemeter.com/blog/how-to-use-the-jenkins-scripted-pipeline Distributed builds

archiveArtifacts

archiveArtifacts:

  • Directory//*.* → All the files recursively under Directory * /*.* → all the files in the workspace
  • /*.xml → all xml files in your workspace. * Directory//*.xml → All the xml files recursively under Directory
archiveArtifacts artifacts: 'file.extension'''
archiveArtifacts artifacts: 'teste.js'
archiveArtifacts artifacts: '*.js'
archiveArtifacts artifacts: 'teste.js', onlyIfSuccessful: true

Declarative Pipeline

Jenkinsfile
pipeline {
    agent any
    stages {
        stage('Download') {
            steps {
                sh 'make config'
                sh 'echo "artifact file" > generatedFile.txt'
            }
        }
    }
    post {
        always {
            archiveArtifacts artifacts: 'generatedFile.txt', onlyIfSuccessful: true
        }
    }    
}

Global Pipeline Libraries

You may also declare whether scripts need to explicitly request that library (detailed below), or if it is present by default. Furthermore, if you specify a version in Jenkins configuration, you can block scripts from selecting a different version.

https://jenkins.io/doc/book/pipeline/shared-libraries/

https://stackoverflow.com/questions/38695237/create-resusable-jenkins-pipeline-script Share a standard Pipeline across multiple projects with Shared Libraries Exploring Jenkins Pipelines: Shared Libraries Extending with Shared Libraries https://cleverbuilder.com/articles/jenkins-shared-library/

Workspace

/workspace/project@script is checked out on Master only to get Jenkinsfile - it can be safely deleted /workspace/project@2 - folder where build is performed (can be on slave) /workspace/project@tmp - ?