Jenkins Pipeline支持两种语法,一种Declarative Pipeline(声明式),一种Scripted Pipeline(脚本式)。 声明式的Pipeline限制用户使用严格的预选定义的结构,是一种声明式的编程模型,对比脚本式的Pipeline学习起来更加简单;脚本式的Pipeline限制比较少,结构和语法的限制由Groovy本身决定,是一种命令式的编程模型。
关于Pipeline的语法在编写Pipeline的过程中,查看这里 Pipeline Syntax 就够了。
编写第一个Declarative Pipeline:
pipeline { agent { label 'jenkins-slave' } stages { stage('build') { steps { sh 'echo hello' } } } }
运行多个Step的Pipeline:
pipeline { agent { label 'jenkins-slave' } stages { stage('build') { steps { sh 'echo step1' sh ''' echo step2-1 echo step2-2 ''' } } } }
retry和timeout wrap step:
pipeline { agent { label 'jenkins-slave' } stages { stage('build') { steps { retry(3) { sh 'echo deploy' } timeout(time: 5, unit: 'SECONDS') { sh 'echo healthcheck' sh 'sleep 4' } } } } }
post完成:
pipeline { agent { label 'jenkins-slave' } stages { stage('Test') { steps { sh 'echo "Fail!"; exit 1' } } } post { always { echo 'This will always run' } success { echo 'This will run only if successful' } failure { echo 'This will run only if failed' } unstable { echo 'This will run only if the run was marked as unstable' } changed { echo 'This will run only if the state of the Pipeline has changed' echo 'For example, if the Pipeline was previously failing but is now successful' } } }
设置环境变量:
pipeline { agent { label 'jenkins-slave' } environment { DISABLE_AUTH = 'true' DB_ENGINE = 'sqlite' } stages { stage('Build') { steps { sh 'printenv' } } } }
将credentials设置为环境变量值:
pipeline { agent { label 'jenkins-slave' } environment { SONAR_LOGIN = credentials('sonarLogin') } stages { stage('Build') { steps { sh 'printenv' } } } }
清理和通知:
pipeline { agent { label 'jenkins-slave' } stages { stage('build') { steps { timeout(time: 1, unit: 'SECONDS') { sh 'sleep 2' } } } } post { failure { mail to: 'team@example.com', subject: "Failed Pipeline: ${currentBuild.fullDisplayName}", body: "Something is wrong with ${env.BUILD_URL}" } } }