Jenkins的pipeline

說明

再官網文檔上有說明pipeline的工做流程,具體能夠參考pipeline文檔語法文檔。 這裏將pipeline的生命週期圖貼出來 imgnode

咱們暫時不會用到完整的流程,只摘取有用的部分,完成最小的流程便可,下面是我舉的幾個實際例子git

通常流程

node {
    dir('/home/share/node/falcon') {
        stage("git") {
            sh "git fetch origin"
            sh "git checkout -f origin/master"
        }
        stage("cpm install") {
            sh "cnpm install"
        }
        stage("build") {
            sh "npm run build"
        }
        stage("restart server") {
            sh '''
            pm_result=`pm2 ls`
            if [[ $pm_result =~ `pwd` ]]
            then
              echo "`pwd` exists, restart"
              pm2 delete app.js
              pm2 start app.js --name `pwd`
              exit 0
            else
              pm2 start app.js --name `pwd`
            fi
            '''
        }
    }
}

例子中用到了幾個方法npm

  • dir() 更換執行目錄,jenkins默認的執行目錄在環境設置中設置,默認是/,若是咱們使用的是multibranch pipeline的話,它會在jenkins的安裝目錄下找到workspace進行pipeline操做,目前來講,太麻煩了,因此就直接在腳本中設置好執行目錄
  • stage() 方法是階段的名稱,這個是徹底自定義的,至關於給構建流程中的某些步驟稱爲一個階段,好比git操做階段、安裝依賴階段、編譯階段、發佈階段,具體效果能夠到 構建 章節看
  • sh 後接的就是命令行操做了,若是隻有一行,那麼用''或者用""包裹起來,若是有多行的話,用'''包裹

條件判斷

在構建項目時,咱們能夠寫一些條件,例如在一個新的服務器上進行完整的安裝時,咱們能夠不經過命令行進行git clone把項目拉下來,能夠經過判斷目標目錄是否有項目,而後決定咱們是git clone 仍是 git fetch originapi

node {
    dir('/home/share/www') {
        stage('Git') {
            if(fileExists('openapi')) {
                dir('/home/share/www/openapi') {
                    sh 'git fetch origin'
                    sh 'git checkout master'
                    sh 'git pull'
                }
            } else {
                sh 'git clone git@git.coding.net:flashtd1/DPOpenAPI.git openapi'
            }
        }
    }
}

交互流程

在進行版本切換的時候,須要手動輸入一些內容,好比分支名稱,commit名稱等,因此須要用戶輸入變量,下面舉個例子數組

node {
    stage('Git') {
        def branch = input message: 'input branch name for this job', ok: 'ok', parameters: [string(defaultValue: 'master', description: 'branch name', name: 'branch')]

        echo branch
    }
}

執行上述例子,會出現以下狀況 img 當輸入後,會獲得以下結果 img服務器

若是一次性想輸入多個參數,能夠在parameters數組中添加更多的變量,以下面的例子app

node {
    stage('Git') {
        def input_result = input message: 'input branch name for this job', ok: 'ok', parameters: [string(defaultValue: 'master', description: 'branch name', name: 'branch'), string(defaultValue: '', description: 'commit to switch', name: 'commit')]

        echo input_result.branch
        echo input_result.commit
    }
}

除了用.的形式,也能夠用['branch']這樣的形式,若是要在sh中使用變量,能夠寫做fetch

node {
    stage('Git') {
        def input_result = input message: 'input branch name for this job', ok: 'ok', parameters: [string(defaultValue: 'master', description: 'branch name', name: 'branch'), string(defaultValue: '', description: 'commit to switch', name: 'commit')]

        sh "echo ${input_result.branch}"
        sh "echo ${input_result.commit}"
    }
}

注意sh後的是"",否則會出現錯誤ui

這裏只舉了簡單的字符串輸入的狀況,其實還有不少能夠輸入的類型,不過文檔裏並無寫的很詳細。這裏介紹一下Jenkins的語法生成器,一些插件生成腳本的語句均可以在這裏調出來this

在Pipeline編輯的輸入框下,有一個Pipeline Syntax超連接 img紅色標記的下拉框中能夠找到已經安裝了插件的支持編寫腳本的選項列表,這裏用input來舉例 imgimg 按照提示填完後,能夠點擊下面的Generate Pipeline Script按鈕生成腳本 img生成的腳本就能夠複製到本身的腳本里啦

相關文章
相關標籤/搜索