jenkins聲明式流水線

pipeline最簡結(jié)構(gòu)

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

pipeline代碼塊

image-20190606153031994.png

agent

  • 指定整個(gè)流水線或者一個(gè)特定的階段在哪里運(yùn)行
    • agent any:該流水線或階段可以運(yùn)行在任何一個(gè)定義好的代理節(jié)點(diǎn)上
    • agent none:在頂端時(shí),代表不設(shè)置一個(gè)全局的代理節(jié)點(diǎn),同時(shí)也代表,如有必要,需要為單個(gè)階段指定一個(gè)代理節(jié)點(diǎn)
    • agent { label "<label>" }:表明該流水線或階段可以運(yùn)行在任何一個(gè)具有<label>標(biāo)簽的代理節(jié)點(diǎn)上
    • agent {docker '<image>'}:docker節(jié)點(diǎn),這個(gè)在后續(xù)學(xué)習(xí)中繼續(xù)補(bǔ)充

environment

  • 用于設(shè)置環(huán)境變量,可定義在stage或pipeline部分

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

  • 在一個(gè)階段中定義的環(huán)境,只能在這個(gè)階段范圍內(nèi)訪問變量

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

    • 學(xué)完憑證功能后,再補(bǔ)充

tools

  • 可定義在pipeline或stage部分

  • 會(huì)自動(dòng)下載下載并安裝我們指定的工具,并將其加入PATH變量中

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


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

options

  • 用于配置jenkins pipeline本身的選項(xiàng)

  • 指定一些屬性和值,這些預(yù)定義的選項(xiàng)可以應(yīng)用到整個(gè)流水線

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


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

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

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

    options{
        checkoutToSubdirectory('zimulu')
    }
    
不允許并發(fā)構(gòu)建
  • 阻止jenkins開始并發(fā)執(zhí)行同一個(gè)流水線

  • 在某些pipeline存在槍占資源或調(diào)用沖突的場(chǎng)景下,此選項(xiàng)非常有用

    options{
        disableConcurrentBuilds()
    }
    
重試次數(shù)
  • 如果流水線執(zhí)行失敗,重試運(yùn)行整個(gè)流水線,重試的次數(shù)為指定的數(shù)量

  • 當(dāng)使用retry選項(xiàng)時(shí),options可以被放在stage塊中

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

  • 當(dāng)使用retry選項(xiàng)時(shí),options可以被放在stage塊中

  • unit:SECONDS、MINUTES、HOURS

    options{
        timeout(time:15, unit:'MINUTES')
    }
    
讓每個(gè)stage都分別運(yùn)行在一個(gè)新的容器中
  • 當(dāng)agent為docker或dockerfiles時(shí),指定在同一個(gè)jenkins節(jié)點(diǎn)上,每個(gè)stage都分別運(yùn)行在一個(gè)新的容器中

  • 不設(shè)置的話,是所有的stage都運(yùn)行在同一個(gè)容器中

    options{
        newContainerPerStage()
    }
    
添加時(shí)間戳到控制臺(tái)輸出中
  • 這個(gè)選項(xiàng)需要安裝timestamper插件

  • 該選項(xiàng)會(huì)全局應(yīng)用到整個(gè)流水線中執(zhí)行

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

triggers

  • 這些觸發(fā)器并不適用于多分支流水線、Github組織或者Bitbuchet團(tuán)隊(duì)/項(xiàng)目等類型的任務(wù)
  • 需要手動(dòng)觸發(fā)一次任務(wù),讓jenkins加載后,trigger指令才會(huì)生效
cron
  • 定時(shí)執(zhí)行

  • MINUTE:一小時(shí)內(nèi)的分鐘,0~59

  • HOUR:一天內(nèi)的小時(shí),0~23

  • DOM:一個(gè)月的某一天,0~31

  • MONTH:月份,1~12

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

  • *:匹配所有值

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

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

  • M-N/X 或者 */X:指定在M-N范圍內(nèi),每隔X執(zhí)行一次,步長

  • A,B,······,Z:使用逗號(hào)枚舉多個(gè)值

  • H:代表隨機(jī)值

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

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

  • upstreamProjects:接收任務(wù),用,隔開

  • threshold:上游任務(wù)的執(zhí)行結(jié)果是什么值時(shí)觸發(fā)

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

    • ABORTED:任務(wù)被手動(dòng)終止
    • FAILURE:構(gòu)建失敗
    • SUCCESS:構(gòu)建成功
    • UNSTABLE:存在一些錯(cuò)誤,但不至于構(gòu)建失敗
    • NOT_BUILT:在多階段構(gòu)建時(shí),前面階段的問題導(dǎo)致后面階段無法執(zhí)行

parameters

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

參數(shù)化讓寫pipeline就像寫函數(shù),可重用

  • 只能放在pipeline塊下

  • 三個(gè)參數(shù)

    • defaultValue:默認(rèn)值
    • description:參數(shù)的描述信息
    • name:參數(shù)名
  • 引用

    params.name

  • 多種參數(shù)類型

  • 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,選擇參數(shù)類型,使用 \n 來分隔多個(gè)選項(xiàng)

    parameters{
        choice(name:'CHOICES',choices:'dev\ntest\nstaging',description:'請(qǐng)選擇部署環(huán)境')
    }
    
    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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容