Jenkins Pipeline語法(上)

Jenkins Pipeline語法(上)
Jenkins Pipeline語法(中)
Jenkins Pipeline語法(下)

如“ 入門指南 ”所述吓肋,Pipeline最基本的部分是“步驟”掂名★笔福基本上妒貌,步驟告訴Jenkins 要做什么,并且作為Declarative和Scripted Pipeline語法的基本構(gòu)建塊熄守。

聲明性Pipeline

聲明性Pipeline是Jenkins Pipeline 的一個(gè)相對較新的補(bǔ)充蜈垮, 它在Pipeline子系統(tǒng)之上提出了一種更為簡化和有意義的語法。

所有有效的聲明性Pipeline必須包含在一個(gè)pipeline塊內(nèi)裕照,例如:

pipeline {
    /* insert Declarative Pipeline here */
}

聲明性Pipeline中有效的基本語句和表達(dá)式遵循與Groovy語法相同的規(guī)則 攒发,但有以下例外:

  • Pipeline的頂層必須是塊,具體來說是:pipeline { }
  • 沒有分號作為語句分隔符晋南。每個(gè)聲明必須在自己的一行
  • 塊只能包含章節(jié)惠猿, 指令,步驟或賦值語句负间。
  • 屬性引用語句被視為無參數(shù)方法調(diào)用偶妖。所以例如姜凄,輸入被視為input()

您可以使用 聲明性指令生成器 來幫助您配置聲明性Pipeline中的指令和部分。

Sections

聲明性Pipeline中的Sections通常包含一個(gè)或多個(gè)指令或步驟趾访。

代理 agent

agent指定整個(gè)Pipeline或特定stage將在Jenkins環(huán)境中執(zhí)行的位置态秧,具體取決于該agent 部分的位置。該部分必須在pipeline塊內(nèi)的頂層定義扼鞋,stage塊內(nèi)的agent是可選的 申鱼。

是否必填
參數(shù) 如下面所描述的
允許出現(xiàn)在 在頂級pipeline塊和每個(gè)stage塊中。
參數(shù)

為了支持Pipeline作者可能擁有的各種使用場景云头,agent部分支持幾種不同類型的參數(shù)捐友。這些參數(shù)可以應(yīng)用于pipeline塊的頂層,也可以應(yīng)用在每個(gè)stage指令內(nèi)溃槐。

  • any

在任何可用的代理上執(zhí)行Pipeline或stage匣砖。例如:agent any

  • none

當(dāng)在pipeline塊的頂層應(yīng)用時(shí),將不會為整個(gè)Pipeline運(yùn)行分配全局代理昏滴,并且每個(gè)stage部分將需要包含其自己的agent部分猴鲫。例如:agent none

  • label

使用提供的標(biāo)簽在Jenkins環(huán)境中可用的代理上執(zhí)行Pipeline或stage性執(zhí)行。例如:agent { label 'my-defined-label' }

  • node

agent { node { label 'labelName' } }行為和 agent { label 'labelName' }相同影涉,但node允許其他選項(xiàng)(如customWorkspace)变隔。

  • docker

用給定的容器執(zhí)行Pipeline规伐,或stage蟹倾,將被動(dòng)態(tài)地提供一個(gè)預(yù)先配置成基于Docker-based Pipelines的節(jié)點(diǎn),或和label參數(shù)匹配的任選節(jié)點(diǎn)猖闪。 docker還可以接受一個(gè)args參數(shù)鲜棠,可以直接將參數(shù)傳遞給docker run命令。例如:agent { docker 'maven:3-alpine' }

agent {
    docker {
        image 'maven:3-alpine'
        label 'my-defined-label'
        args  '-v /tmp:/tmp'
    }
}
  • dockerfile

    使用從Dockerfile源存儲庫中包含的容器構(gòu)建容器來執(zhí)行Pipeline或stage 培慌。為了使用此選項(xiàng)豁陆,Jenkinsfile必須從Multibranch PipelinePipeline from SCM加載。通常Dockerfile在源碼庫的根路徑:agent { dockerfile true }吵护。如果Dockerfile在其他目錄中建立盒音,請使用以下dir選項(xiàng):agent { dockerfile { dir 'someSubDir' } }。您可以使用additionalBuildArgs選項(xiàng)將其他參數(shù)傳遞給docker build ...命令馅而,如agent { dockerfile { additionalBuildArgs '--build-arg foo=bar' } }祥诽。

常用選項(xiàng)

下面是可以用于兩個(gè)或多個(gè)agent的常用選項(xiàng)。在沒有明確說明的情況下選項(xiàng)是可選的瓮恭。

  • label

    一個(gè)字符串雄坪。在這些標(biāo)簽上運(yùn)行Pipeline或每個(gè)stage。此選項(xiàng)可用于node屯蹦,dockerdockerfile维哈,并且 對于node是必需的绳姨。

  • customWorkspace

    一個(gè)字符串。運(yùn)行Pipeline或每個(gè)stage阔挠, 在這個(gè)agent的自定義的工作空間內(nèi)飘庄,而不是默認(rèn)的。它可以是相對路徑谒亦,在這種情況下竭宰,自定義工作區(qū)將位于節(jié)點(diǎn)上的工作空間根目錄下,也可以是絕對路徑份招。例如:

agent {
    node {
        label 'my-defined-label'
        customWorkspace '/some/other/path'
    }
}
  • reuseNode

    一個(gè)布爾值切揭,默認(rèn)為false。如果為true锁摔,則在同一工作空間中廓旬,而不是完全在新節(jié)點(diǎn)上運(yùn)行Pipeline頂層指定的節(jié)點(diǎn)上的容器。此選項(xiàng)適用于dockerdockerfile谐腰,并且僅在agent的每個(gè)stage內(nèi)才有效果孕豹。

例如:
Jenkinsfile (Declarative Pipeline)
pipeline {
    agent { docker 'maven:3-alpine' } 
    stages {
        stage('Example Build') {
            steps {
                sh 'mvn -B clean verify'
            }
        }
    }
}

在給定名稱和tag(maven:3-alpine)的新創(chuàng)建的容器中執(zhí)行此Pipeline中定義的所有步驟。

Stage-level agent 部分

Jenkinsfile (Declarative Pipeline)
pipeline {
    agent none 
    stages {
        stage('Example Build') {
            agent { docker 'maven:3-alpine' } 
            steps {
                echo 'Hello, Maven'
                sh 'mvn --version'
            }
        }
        stage('Example Test') {
            agent { docker 'openjdk:8-jre' } 
            steps {
                echo 'Hello, JDK'
                sh 'java -version'
            }
        }
    }
}
  1. agent none在Pipeline頂層定義確保執(zhí)行者不會被不必要地分配十气。使用agent none也強(qiáng)制每個(gè)stage部分包含自己的agent部分

  2. 使用此鏡像在新創(chuàng)建的容器中執(zhí)行此stage中的步驟

  3. 在新創(chuàng)建的容器中使用與前一個(gè)stage的不同鏡像執(zhí)行此stage中的步驟

發(fā)布 post

post定義將在Pipeline運(yùn)行或stage結(jié)束時(shí)運(yùn)行的操作励背。一些條件后 的塊的內(nèi)支持post: always,changed砸西,failure叶眉,success,unstable芹枷,aborted衅疙。這些塊允許在Pipeline運(yùn)行或stage結(jié)束時(shí)執(zhí)行步驟,具體取決于Pipeline的狀態(tài)鸳慈。

是否必填
參數(shù) 沒有
允許出現(xiàn)在 在頂級pipeline塊和每個(gè)stage塊中饱溢。
條件
  • always

    無論P(yáng)ipeline運(yùn)行的完成狀態(tài)如何都會運(yùn)行。

  • changed

    只有當(dāng)前Pipeline運(yùn)行的狀態(tài)與先前完成的Pipeline的狀態(tài)不同時(shí)走芋,才能運(yùn)行绩郎。

  • failure

    僅當(dāng)當(dāng)前Pipeline處于“失敗”狀態(tài)時(shí)才運(yùn)行,通常在Web UI中用紅色指示表示翁逞。

  • success

    僅當(dāng)當(dāng)前Pipeline具有“成功”狀態(tài)時(shí)才運(yùn)行肋杖,通常在具有藍(lán)色或綠色指示的Web UI中表示。

  • unstable

    只有當(dāng)前Pipeline具有“不穩(wěn)定”狀態(tài)熄攘,通常由測試失敗兽愤,代碼違例等引起,才能運(yùn)行。通常在具有黃色指示的Web UI中表示浅萧。

  • aborted

    只有當(dāng)前Pipeline處于“中止”狀態(tài)時(shí)逐沙,才會運(yùn)行,通常是由于Pipeline被手動(dòng)中止洼畅。通常在具有灰色指示的Web UI中表示吩案。

  • cleanup

    無論管道或stage的狀態(tài)如何,在跑完所有其他的post條件后運(yùn)行此條件下 的post步驟帝簇。

例如:
Jenkinsfile (Declarative Pipeline)
pipeline {
    agent any
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
    post { 
        always { 
            echo 'I will always say Hello again!'
        }
    }
}
  1. 通常徘郭,該post部分應(yīng)放在Pipeline末端

  2. post條件塊包含的步驟和steps中的步驟用法相同

stage stages

包含一個(gè)或多個(gè)stage指令的序列,該stages部分是Pipeline 描述的大部分“工作”所在的位置丧肴。建議stages至少為持續(xù)交付流程的每個(gè)獨(dú)立部分包含至少一個(gè)stage指令残揉,例如構(gòu)建,測試和部署芋浮。

是否必填
參數(shù) 沒有
允許出現(xiàn)在 pipeline內(nèi)只有一次抱环。
例如
pipeline {
    agent any
    stages { 
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

stages部分一般跟在agentoptions等后面纸巷。

步驟 steps

steps部分定義了在給定stage指令中執(zhí)行的一系列一個(gè)或多個(gè)步驟镇草。

是否必填
參數(shù) 沒有
允許出現(xiàn)在 每個(gè)stage塊內(nèi)
例如
Jenkinsfile (Declarative Pipeline)
pipeline {
    agent any
    stages {
        stage('Example') {
            steps { 
                echo 'Hello World'
            }
        }
    }
}

steps部分必須包含一個(gè)或多個(gè)步驟

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瘤旨,隨后出現(xiàn)的幾起案子梯啤,更是在濱河造成了極大的恐慌,老刑警劉巖存哲,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件因宇,死亡現(xiàn)場離奇詭異,居然都是意外死亡宏胯,警方通過查閱死者的電腦和手機(jī)羽嫡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門本姥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肩袍,“玉大人,你說我怎么就攤上這事婚惫》沾停” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵先舷,是天一觀的道長艰管。 經(jīng)常有香客問我,道長蒋川,這世上最難降的妖魔是什么牲芋? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上缸浦,老公的妹妹穿的比我還像新娘夕冲。我一直安慰自己,他們只是感情好裂逐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布歹鱼。 她就那樣靜靜地躺著,像睡著了一般卜高。 火紅的嫁衣襯著肌膚如雪弥姻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天掺涛,我揣著相機(jī)與錄音庭敦,去河邊找鬼。 笑死薪缆,一個(gè)胖子當(dāng)著我的面吹牛螺捐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播矮燎,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼定血,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了诞外?” 一聲冷哼從身側(cè)響起澜沟,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎峡谊,沒想到半個(gè)月后茫虽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡既们,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年濒析,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啥纸。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡号杏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出斯棒,到底是詐尸還是另有隱情盾致,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布荣暮,位于F島的核電站庭惜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏穗酥。R本人自食惡果不足惜护赊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一惠遏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧骏啰,春花似錦爽哎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至祈秕,卻和暖如春渺贤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背请毛。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工志鞍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人方仿。 一個(gè)月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓固棚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親仙蚜。 傳聞我的和親對象是個(gè)殘疾皇子此洲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容