====== 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. [[https://dzone.com/articles/top-10-best-practices-for-jenkins-pipeline|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]] 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: * **parallel** expect map as argument. [[https://www.cloudbees.com/blog/parallelism-and-distributed-builds-jenkins]] * [[https://jenkins.io/doc/pipeline/tour/hello-world/|Creating your first Pipeline]] [[https://jenkins.io/doc/pipeline/examples/]] [[https://www.blazemeter.com/blog/how-to-use-the-jenkins-scripted-pipeline]] [[https://wiki.jenkins.io/display/JENKINS/Distributed+builds|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==== 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]] [[https://jenkins.io/blog/2017/10/02/pipeline-templates-with-shared-libraries/|Share a standard Pipeline across multiple projects with Shared Libraries]] [[https://automatingguy.com/2017/12/29/jenkins-pipelines-shared-libraries/|Exploring Jenkins Pipelines: Shared Libraries]] [[https://jenkins.io/doc/book/pipeline/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** - ?