jenkins聲明式流水線

pipeline最簡結構

pipeline{
    agent any
    stages{
        stage('build'){
            steps{
                echo "我是一個最簡結構,缺一不可"
            }
        }
    }
}
  • pipeline:代表整條流水線,包含整條流水線的邏輯
  • agent:指定流水線的執行器 (在節點上)和工作區
  • stages:封裝了用于定義流水線主體和邏輯的所有單個階段定義
    • 至少包含一個stage
  • stage:代表流水線的階段,每個階段都必須有名稱
  • steps:封裝一組DSL步驟
    • 至少包含一個步驟

pipeline代碼塊

image-20190606153031994.png

agent

  • 指定整個流水線或者一個特定的階段在哪里運行
    • agent any:該流水線或階段可以運行在任何一個定義好的代理節點上
    • agent none:在頂端時,代表不設置一個全局的代理節點,同時也代表,如有必要,需要為單個階段指定一個代理節點
    • agent { label "<label>" }:表明該流水線或階段可以運行在任何一個具有<label>標簽的代理節點上
    • agent {docker '<image>'}:docker節點,這個在后續學習中繼續補充

environment

  • 用于設置環境變量,可定義在stage或pipeline部分

  • 在流水線代碼頂部定義的環境,將使流水線所有的步驟都可以訪問變量

  • 在一個階段中定義的環境,只能在這個階段范圍內訪問變量

    pipeline{
        environment{
             FIRSTNAME = "san"
             LASTNAME = "zhang"
             USERNAME = "${LASTNAME}${FIRSTNAME}"
        }
        agent any
        stages{
            stage('build'){
                steps{
                    echo "我的名字${USERNAME}"
                }
            }
        }
    }
    
  • 憑證與環境變量

    • 學完憑證功能后,再補充

tools

  • 可定義在pipeline或stage部分

  • 會自動下載下載并安裝我們指定的工具,并將其加入PATH變量中

  • 在全局工具配置(Global Tool Configuration)界面配置工具版本,必須是選擇了自動安裝


    image-20190606165944537.png
pipeline{
    agent any
    tools{
        maven 'maven3-6'
    }
    stages{
        stage('build'){
            steps{
                sh 'mvn clean test install'
                echo "tools命令自動安裝maven"
            }
        }
    }
}

options

  • 用于配置jenkins pipeline本身的選項

  • 指定一些屬性和值,這些預定義的選項可以應用到整個流水線

  • 這些屬性一般都可以在jenkins web表單進行基本的配置


    image-20190606173114352.png
  • 可以定義在stages或pipeline部分

保留歷史構建記錄的數量
  • 保留指定數量的流水線數量,包含控制臺輸出以及制品
options{
    buildDiscarder(logRotator(numToKeepStr:'10'))
}
指定從版本庫中檢出源碼時的檢出目錄
  • 拉取代碼時,默認檢出到工作空間的根目錄

  • 此選項可以指定檢出到工作空間的子目錄中

    options{
        checkoutToSubdirectory('zimulu')
    }
    
不允許并發構建
  • 阻止jenkins開始并發執行同一個流水線

  • 在某些pipeline存在槍占資源或調用沖突的場景下,此選項非常有用

    options{
        disableConcurrentBuilds()
    }
    
重試次數
  • 如果流水線執行失敗,重試運行整個流水線,重試的次數為指定的數量

  • 當使用retry選項時,options可以被放在stage塊中

    options{
        retry(2)
    }
    
超時
  • 設置一個超時時間,如果超過該時間,整個流水線終止

  • 當使用retry選項時,options可以被放在stage塊中

  • unit:SECONDS、MINUTES、HOURS

    options{
        timeout(time:15, unit:'MINUTES')
    }
    
讓每個stage都分別運行在一個新的容器中
  • 當agent為docker或dockerfiles時,指定在同一個jenkins節點上,每個stage都分別運行在一個新的容器中

  • 不設置的話,是所有的stage都運行在同一個容器中

    options{
        newContainerPerStage()
    }
    
添加時間戳到控制臺輸出中
  • 這個選項需要安裝timestamper插件

  • 該選項會全局應用到整個流水線中執行

    options{
        timestamper()          
    }
    
其他,后期完善
  • skipDefaultCheckout
  • skipStagesAfterUnstable
pipeline{
    agent any
    options{
        buildDiscarder(logRotator(numToKeepStr:'10'))
    }
    stages{
        stage('build'){
            steps{
                echo "保留最近十次的構建"
            }
        }
    }
}

triggers

  • 這些觸發器并不適用于多分支流水線、Github組織或者Bitbuchet團隊/項目等類型的任務
  • 需要手動觸發一次任務,讓jenkins加載后,trigger指令才會生效
cron
  • 定時執行

  • MINUTE:一小時內的分鐘,0~59

  • HOUR:一天內的小時,0~23

  • DOM:一個月的某一天,0~31

  • MONTH:月份,1~12

  • DOW:星期幾,0~7,0和7代表星期天

  • *:匹配所有值

  • */<value>:表示每隔<value>

    • */10 * * * * :每10min執行一次
  • M-N:匹配M到N之間的值

  • M-N/X 或者 */X:指定在M-N范圍內,每隔X執行一次,步長

  • A,B,······,Z:使用逗號枚舉多個值

  • H:代表隨機值

    • H 1 * * *:1點的0-59分內隨機
    • H(0,30) * * * *:每小時的0-30分內隨機
    • H H(0-7) * * *:0點到7:59之間的某個時間點
    • H符號在某個范圍上的隨機值,對于指個項目,他是固定的
    • H/15 * * * *:每15min(可能是:07、:22、:37、52)
    • H(0-29)/10 * * * *:前半個小時,每隔10min執行一次(:03、:13、:23)
    • 45 9-16/2 * * 1-5:每個工作日(周一到周五)從9:45開始到15:45結束,每隔兩個小時執行一次
    • H H 1,15 1-11 *:除12月外,每個月的第1天、第15天執行一次
// 從周一到周五上午8點開始執行流水線
triggers{
    cron('0 8 * * 1-5')
}
pollSCM
  • 定期輪詢代碼倉庫是否有變化,有變化則執行
  • 設置時間的規則與cron一致
// 每分鐘判斷一次代碼是否有變化
triggers{
    pollSCM('*/1 * * * *')
}
upstream
  • 由上游任務觸發

    triggers{
        upstream(upstreamProjects:'job1,job2',threshold:hudson.model.Result.SUCCESS)
    }
    
  • job1,job2都是任務名

  • upstreamProjects:接收任務,用,隔開

  • threshold:上游任務的執行結果是什么值時觸發

  • hudson.model.Result是一個枚舉,包含以下值

    • ABORTED:任務被手動終止
    • FAILURE:構建失敗
    • SUCCESS:構建成功
    • UNSTABLE:存在一些錯誤,但不至于構建失敗
    • NOT_BUILT:在多階段構建時,前面階段的問題導致后面階段無法執行

parameters

參數化pipeline是指可以通過傳參來決定pipeline的行為

參數化讓寫pipeline就像寫函數,可重用

  • 只能放在pipeline塊下

  • 三個參數

    • defaultValue:默認值
    • description:參數的描述信息
    • name:參數名
  • 引用

    params.name

  • 多種參數類型

  • string,字符串類型

    parameters{
        string(name:'DEPLOY_ENV',defaultValue:'staging',description:'string')
    }
    
    image-20190613142009863.png
    • 等同于


      image-20190613142141172.png
  • text,多行文本類型,換行使用 \n

    parameters{
        text(name:'DEPLOY_TEXT',defaultValue:'文本一\n文本二\n文本三',description:'text')
    }
    
    image-20190613142300193.png
  • booleanParam,布爾類型

    parameters{
        booleanParam(name:'DEBUG_BUILD',defaultValue:'true',description:'booleanParam')
    }
    
    image-20190613142348006.png
  • choice,選擇參數類型,使用 \n 來分隔多個選項

    parameters{
        choice(name:'CHOICES',choices:'dev\ntest\nstaging',description:'請選擇部署環境')
    }
    
    image-20190613142736693.png
  • file,文件類型,用戶可上傳文件—不推薦使用

    parameters{
        file(fileLocation:'',defaultValue:'select the file to upload')
    }
    

?

  • password:密碼類型
    parameters{
        password(name:'PASSWORD',defaultValue:'SECRET',description:'password')
    }
    
    image-20190613142848211.png
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374