1. 程式人生 > >Devops關鍵工具及技術(二)—Jenkins2.0 Pipeline

Devops關鍵工具及技術(二)—Jenkins2.0 Pipeline

在上一篇文章Devops關鍵工具及技術(一)—Jenkins 容器化中,我們實現了Jenkins的容器化,並利用Jenkins的Docker外掛實現Slave容器雲。並使用了基本的pipeline。這篇文章我們將會介紹Jenkins2.0的Pipeline。

Pipeline

Jenkins2.0中最大的一個特性就是Pipeline,實際使用中Pipeline已經超越了我們對jenkins本身的理解,可能在之前我們大多數把Jenkins當做是一個持續整合的工具。但是在Jenkins2.0中,Jenkins完成了CI到CD的華麗轉身,而且因為Jenkins的開放性,隨著一些測試plugin的加入,CT持續測試也可以在Jenkins Pipeline上實現。以及多節點的組合式任務,使得Jenkins可以實現複雜的釋出流程。 如下圖Jenkins官方的一個CD模型流程圖。 在這裡插入圖片描述

Pipeline主要由三部分組成。Node、Stage、Step。

  • Node

我們可以將Node稱為是節點或者Agent。節點可以執行某一階段(Stage)、某幾階段(Stage)乃至整個Pipeline,就看我們Pipeline中在哪裡去定義Node。我們可以將Node作為Jenkins Master的Slave 節點來分擔Master節點的構建以及執行負載。也可以將Node當做測試、部署的專用節點。比如我們可以增加一個Ansible節點用來做自動化部署,增加 一個Jmeter節點用來做效能測試。

  • Stage

我們可以將Stage稱為階段,每一個Stage為Pipeline中的一個小部分,而每個Stage中最小部分為Step。比如一個簡單的持續整合Pipeline。我們可以分為兩個Stage,第一個是git clone code,把最新程式碼拉下來,第二個為Mvn Install,即利用Maven進行程式碼編譯構建。

  • Step 我們可以把Step稱為步驟,一個或者多個Step將會組成一個Stage,Step是Pipeline組成的最小單位。一個Step可以很簡單,比如echo “hello”。也可以很複雜,比如sh‘’ “docker build -t jenkins:master .”。

Pipeline有兩種型別:宣告式和指令碼式。

  • 宣告式Pipeline
pipeline {
    agent any   //定義使用哪個Node進行Job的執行
    stages {
        stage('Build') {   //定義Build的stage
            steps {    //定義Build的stage下面的所有step
                // 
            }
        }
        stage('Test') { 
            steps {
                // 
            }
        }
        stage('Deploy') { 
            steps {
                // 
            }
        }
    }
}
  • 指令碼式Pipeline
node {    // //定義使用哪個Node進行Job的執行與宣告式中的Agent等同。
    stage('Build') { //定義Build的stage
        //           //定義Build的stage下面的所有step
    }
    stage('Test') { 
        // 
    }
    stage('Deploy') { 
        // 
    }
}

我們寫pipeline過程中,往往會不熟悉一些Pipeline到底該怎麼寫。不過Jenkins裡面給提供了我們快速嚮導的功能。 在這裡插入圖片描述 在這裡插入圖片描述

另外Pipeline可以直接在Jenkins的Console裡面進行編寫,也可以以Jenkinsfile的形式放到原始碼庫中,這樣可以對Jenkinsfile也進行分支管理以及不同版本的管理。對應程式碼庫的Jenkinsfile方式如下圖 在這裡插入圖片描述

更多Pipeline的用法以及說明,可以參考Jenkins官方文件