Jenkins pipeline jenkinsfile的兩種寫作方式聲明式和腳本式


Jenkins pipeline jenkinsfile的兩種寫作方式,聲明式和腳本式。

為什么需要pipeline?

在多年前Jenkins成為最流行的持續集成服務器的Jenkins 1.x時代,所有的新功能都是通過安裝插件來增強,所有的配置都是通過網頁界面來實現的。

在Jenkins邁入2.x的時代,為了跟隨時代的步伐(everything is code),Jenkins引入了配置及代碼的概念。用代碼來表示流程是為了版本控制和自動化的方便,使得配置跟源代碼一樣可重現,更加容易地支持多分支開發部署。 具體地來說,就是Jenkins引入了pipeline的概念,可以使用groovy來編寫Jenkinsfile。

為什么兩種實現pipeline的方式呢?

真的是看戲的不嫌事大,同一功能兩種實現,很多用戶也會被搞迷吧。下面咱們就來捋一捋這個發展過程。
Jenkins是使用Java實現的,所以在很早的時候就引入了groovy作為DSL,管理員可以使用groovy來實現一些自動化和高級的管理功能。因為groovy引擎已經集成到Jenkins,所以在pipeline一開始很自然就使用groovy來編寫Jenkinsfile。

但是groovy畢竟是一種語言,對於沒有太多編程經驗的小白這個學習曲線有點太陡峭。這個時候聲明式的pipeline就出現了,主要是為了降低入門的難度。

作為Jenkins用戶該如何選擇呢?

  • 聲明式pipeline鼓勵聲明式編程模型,比較適合沒有編程經驗的初學者。
  • 腳本式pipeline,是基於groovy的DSL語言實現的,為Jenkins用戶提供了大量的靈活性性和可擴展性。
  • 聲明式pipeline會得到越來越多的官方支持,可以使用Visual Pipeline Editor來編輯和驗證聲明式pipeline。
  • 如果實在是聲明式語法還沒有支持的功能,還可以在聲明式里直接調用腳本。

所以推薦新手從聲明式pipeline開始。

聲明式pipeline:
https://jenkins.io/doc/book/pipeline/syntax/#declarative-pipeline
腳本式pipeline:
https://jenkins.io/doc/book/pipeline/syntax/#scripted-pipeline

下面我們分別來個例子來初步感受下,看看你更喜歡哪種?

聲明式pipeline

pipeline {
    agent any
    stages {
        stage('Example Build') {
            steps {
                echo 'Hello World'
            }
        }
        stage('Example Deploy') {
            when {
                branch 'production'
                environment name: 'DEPLOY_TO', value: 'production'
            }
            steps {
                echo 'Deploying'
            }
        }
    }
}

腳本式pipeline

node {
    stage('Example') {
        if (env.BRANCH_NAME == 'master') {
            echo 'I only execute on the master branch'
        } else {
            echo 'I execute elsewhere'
        }
    }
}

聲明式pipeline里調用腳本式語法

pipeline {
    agent any
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'

                script {
                    def browsers = ['chrome', 'firefox']
                    for (int i = 0; i < browsers.size(); ++i) {
                        echo "Testing the ${browsers[i]} browser"
                    }
                }
            }
        }
    }
}

參考:

https://stackoverflow.com/questions/43484979/jenkins-scripted-pipeline-or-declarative-pipeline
https://medium.com/@brianrthompson/scripted-vs-declarative-pipelines-which-to-choose-c6af403f1e97


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM