====== 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** - ?