精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

10分鐘搞定讓你困惑的 Jenkins 環境變量

開發 前端
Jenkins, DevOps 技術棧的核心之一,CI/CD 離不開編寫 Pipeline 腳本,上手 Jenkins ,簡單查一下文檔,你就應該不會被 agent,stages,step 這類關鍵詞弄懵,也能很快構建出 pipeline 的骨架。

 [[374277]]

前言

Jenkins, DevOps 技術棧的核心之一,CI/CD 離不開編寫 Pipeline 腳本,上手 Jenkins ,簡單查一下文檔,你就應該不會被 agent,stages,step 這類關鍵詞弄懵,也能很快構建出 pipeline 的骨架

但是當向骨架中填充內容的時候,尤其如何利用環境變量(系統內置 | 自定義),多數人都會變得比較混亂,浪費很多時間,本文就幫助大家快速通關環境變量

 

準備

如果你想一邊閱讀本文,一邊實踐,但是沒有 Jenkins 服務可用,又想快速嘗試,可以應用 Docker 一個命令快速搭建 Jenkins 服務

  1. docker container run --rm -p 8080:8080 -p 50000:50000 --name=jenkins -v $(pwd):/var/jenkins_home jenkins/jenkins 

 

2021 年了,本地沒有 Docker 說不過去了,過來瞧瞧 Docker 系列是否入得了你的法眼?

  1. 打開瀏覽器輸入:localhost:8080
  2. 找到終端的臨時密碼登陸
  3. 安裝推薦的依賴
  4. 創建新的 Pipeline 類型的 Item

點擊左側 Config,然后在頁面底部 Pipeline 部分輸入我們接下來寫的腳本進行測試就好了

 

就是這么簡單.....

認識 Jenkins 環境變量

Jenkins 環境變量就是通過 env 關鍵字暴露出來的全局變量,可以在 Jenkins 文件的任何位置使用其實和你使用的編程語言中的全局變量沒有實質差別

查看 Jenkins 系統內置環境變量

Jenkins 在系統內置了很多環境變量方便我們快速使用,查看起來有兩種方式:

方式一:

直接在瀏覽器中訪問 ${YOUR_JENKINS_HOST}/env-vars.html 頁面就可以,比如http://localhost:8080/env-vars.html ,每個變量的用途寫的都很清楚

 

方式二

通過執行 printenv shell 命令來獲取:

  1. pipeline { 
  2.     agent any 
  3.  
  4.     stages { 
  5.         stage("Env Variables") { 
  6.             steps { 
  7.                 sh "printenv" 
  8.             } 
  9.         } 
  10.     } 

直接 Save - Build, 在終端 log 中你會看到相應的環境變量,并且可以快速看到他們當前的值

 

通常這兩種方式可以結合使用

讀取環境變量

上面我們說了 env 是環境變量的關鍵字,但是讀取 Jenkins 內置的這些環境變量,env 關鍵字是可有可無, 但不能沒了底褲,都要使用 ${xxx} 包圍起來。以 BUILD_NUMBER 這個內置環境變量舉例來說明就是這樣滴:

 

如果你在 Jenkins 文件中使用 shell 命令,使用這些內置環境變量甚至可以不用 {}, 來看一下:

  1. pipeline { 
  2.     agent any 
  3.  
  4.     stages { 
  5.         stage("Read Env Variables") { 
  6.             steps { 
  7.                 echo "帶 env 的讀取方式:${env.BUILD_NUMBER}" 
  8.                 echo "不帶 env 的讀取方式:${BUILD_NUMBER}" 
  9.                 sh 'echo "shell 中讀取方式 $BUILD_NUMBER"' 
  10.             } 
  11.         } 
  12.     } 

可以看到結果是一樣一樣滴,不管有幾種,記住第一種最穩妥

 

內置的環境變量雖好,但也不能完全滿足我們自定義的 pipeline 的執行邏輯,所以我們也得知道如何定義以及使用自定義環境變量

自定義 Jenkins 環境變量

Jenkins pipeline 分聲明式(Declarative)和 腳本式(imperative)寫法,相應的環境變量定義方式也略有不同,歸納起來有三種方式:

 

還是看個實際例子吧:

  1. pipeline { 
  2.     agent any 
  3.  
  4.     environment { 
  5.         FOO = "bar" 
  6.     } 
  7.  
  8.     stages { 
  9.         stage("Custom Env Variables") { 
  10.             environment { 
  11.                 NAME = "RGYB" 
  12.             } 
  13.  
  14.             steps { 
  15.                 echo "FOO = ${env.FOO}" 
  16.                 echo "NAME = ${env.NAME}" 
  17.  
  18.                 script { 
  19.                     env.SCRIPT_VARIABLE = "Thumb Up" 
  20.                 } 
  21.  
  22.                 echo "SCRIPT_VARIABLE = ${env.SCRIPT_VARIABLE}" 
  23.  
  24.                 withEnv(["WITH_ENV_VAR=Come On"]) { 
  25.                     echo "WITH_ENV_VAR = ${env.WITH_ENV_VAR}" 
  26.                 } 
  27.             } 
  28.         } 
  29.     } 

來看運行結果:

 

注意:withEnv(["WITH_ENV_VAR=Come On"]) {} 這里的 = 號兩側不能有空格,必須是 key=value 的形式

一個完整的 pipeline 通常會有很多個 stage,環境變量在不同的 stage 有不同的值是很常見的,知道如何設置以及讀取環境變量后,我們還得知道如何重寫環境變量

重寫 Jenkins 環境變量

Jenkins 讓人相對困惑最多的地方就是重寫環境變量,但是只要記住下面這三條規則,就可以搞定一切了

  1. withEnv(["WITH_ENV_VAR=Come On"]) {} 內置函數的這種寫法,可以重寫任意環境變量
  2. 定義在 environment {} 的環境變量不能被腳本式定義的環境變量(env.key="value")重寫
  3. 腳本式環境變量只能重寫腳本式環境變量

這三點是硬規則,沒涵蓋在這 3 點規則之內的也就是被允許的了

 

三條規則就有點讓人頭大了,農夫選豆種,舉例為證吧

  1. pipeline { 
  2.     agent any 
  3.  
  4.     environment { 
  5.         FOO = "你當像鳥飛往你的山" 
  6.         NAME = "Tan" 
  7.     } 
  8.  
  9.     stages { 
  10.         stage("Env Variables") { 
  11.             environment { 
  12.                // 會重寫第 6 行 變量 
  13.                 NAME = "RGYB"  
  14.                // 會重寫系統內置的環境變量 BUILD_NUMBER 
  15.                 BUILD_NUMBER = "10"  
  16.             } 
  17.  
  18.             steps { 
  19.                // 應該打印出 "FOO = 你當像鳥飛往你的山" 
  20.                 echo "FOO = ${env.FOO}"  
  21.                // 應該打印出 "NAME = RGYB" 
  22.                 echo "NAME = ${env.NAME}"  
  23.                // 應該打印出 "BUILD_NUMBER = 10" 
  24.                 echo "BUILD_NUMBER =  ${env.BUILD_NUMBER}"  
  25.  
  26.                 script { 
  27.                    // 腳本式創建一個環境變量 
  28.                     env.SCRIPT_VARIABLE = "1"  
  29.                 } 
  30.             } 
  31.         } 
  32.  
  33.         stage("Override Variables") { 
  34.             steps { 
  35.                 script { 
  36.                    // 這里的 FOO 不會被重寫,違背 Rule No.2 
  37.                     env.FOO = "Tara" 
  38.                    // SCRIPT_VARIABLE 變量會被重寫,符合 Rule No.3 
  39.                     env.SCRIPT_VARIABLE = "2"  
  40.                 } 
  41.  
  42.                // FOO 在第 37 行重寫失敗,還會打印出 "FOO = 你當像鳥飛往你的山" 
  43.                 echo "FOO = ${env.FOO}"  
  44.                // 會打印出 "SCRIPT_VARIABLE = 2" 
  45.                 echo "SCRIPT_VARIABLE = ${env.SCRIPT_VARIABLE}"  
  46.  
  47.                // FOO 會被重寫,符合 Rule No.1 
  48.                 withEnv(["FOO=Educated"]) {  
  49.                    // 應該打印 "FOO = Educated" 
  50.                     echo "FOO = ${env.FOO}"  
  51.                 } 
  52.  
  53.                // 道理同上 
  54.                 withEnv(["BUILD_NUMBER=15"]) { 
  55.                    // 應該打印出 "BUILD_NUMBER = 15" 
  56.                     echo "BUILD_NUMBER = ${env.BUILD_NUMBER}" 
  57.                 } 
  58.             } 
  59.         } 
  60.     } 

來驗證一下結果吧

 

看到這,基本的設置應該就沒有什么問題了,相信你也發現了,Jenkins 設置環境變量和編程語言的那種設置環境變量還是略有不同的,后者可以將變量賦值為對象,但 Jenkins 就不行,因為在 Jenkins 文件中,所有設置的值都會被當成 String, 難道沒辦法應用 Boolean 值嗎?

Jenkins 中使用 Boolean 值

如果設置一個變量為 false ,Jenkins 就會將其轉換為 "false", 如果想使用 Boolean 來做條件判斷,必須要調用 toBoolean() 方法做轉換

  1. pipeline { 
  2.     agent any 
  3.  
  4.     environment { 
  5.         IS_BOOLEAN = false 
  6.     } 
  7.  
  8.     stages { 
  9.         stage("Env Variables") { 
  10.             steps { 
  11.                 script { 
  12.                    // Hello 會被打印出來,因為非空字符串都會被認為是 Boolean.True 
  13.                     if (env.IS_BOOLEAN) { 
  14.                         echo "Hello" 
  15.                     } 
  16.  
  17.                    // 真正的 Boolean 比較 
  18.                     if (env.IS_BOOLEAN.toBoolean() == false) { 
  19.                         echo "日拱一兵" 
  20.                     } 
  21.                    
  22.                    // 真正的 Boolean  
  23.                     if (!env.IS_BOOLEAN.toBoolean()) { 
  24.                         echo "RGYB" 
  25.                     } 
  26.                 } 
  27.             } 
  28.         } 
  29.     } 

來看運行結果:

 

如果你寫過 Pipeline,你一定會知道,寫 Pipeline 是離不開寫 shell 的,有些時候,需要將 shell 的執行結果賦值給環境變量,Jenkins 也有方法支持

Shell 結果賦值給環境變量

實現這種方式很簡單,只需要記住一個格式:sh(script: 'cmd', returnStdout:true)

  1. pipeline { 
  2.     agent any 
  3.  
  4.     environment { 
  5.        // 使用 trim() 去掉結果中的空格 
  6.         LS_RESULT = "${sh(script:'ls -lah', returnStdout: true).trim()}" 
  7.     } 
  8.  
  9.     stages { 
  10.         stage("Env Variables") { 
  11.             steps { 
  12.                 echo "LS_RESULT = ${env.LS_RESULT}" 
  13.             } 
  14.         } 
  15.     } 

 

總結

關于 Jenkins[1] 環境變量,了解這些基本上就滿足絕大多數應用場景了,當再遇到環境變量問題時,可以回過來翻看一下了,有解決的困惑嗎?

參考

[1]Jenkins environment definition guide: https://e.printstacktrace.blog/jenkins-pipeline-environment-variables-the-definitive-guide/

本文轉載自微信公眾號「日拱一兵」,可以通過以下二維碼關注。轉載本文請聯系日拱一兵公眾號。

 

責任編輯:武曉燕 來源: 日拱一兵
相關推薦

2020-11-06 08:54:43

Vue 3.0函數代碼

2017-11-20 10:25:20

數據庫MySQL索引

2021-04-23 09:50:41

topLinux命令

2025-07-25 07:26:51

2020-08-25 07:47:03

Java并發隊列

2021-08-02 15:40:20

Java日志工具

2021-03-04 09:26:57

微服務架構數據

2015-12-03 14:10:26

systemd容器Linux

2011-06-10 14:19:49

SEO百度收錄

2017-06-07 18:40:33

PromiseJavascript前端

2009-11-05 10:56:31

WCF通訊

2023-04-04 09:13:15

2021-12-01 06:50:50

Docker底層原理

2024-04-28 12:55:46

redis頻道機制

2023-07-15 18:26:51

LinuxABI

2015-11-12 10:32:40

GitHub控制系統分布式

2011-02-21 17:48:35

vsFTPd

2018-11-14 12:45:12

華為

2021-01-28 10:36:09

Redis擴縮容架構

2022-02-16 19:42:25

Spring配置開發
點贊
收藏

51CTO技術棧公眾號

一区一区视频| 国产精品久久久久久久久久| 人妻体内射精一区二区三区| 日本在线啊啊| 国产精品免费丝袜| www.久久爱.cn| 天天爽夜夜爽人人爽| 亚洲成人最新网站| 亚洲免费影视第一页| 精品亚洲视频在线| 一个人看的www视频在线免费观看| 日本一二三四高清不卡| 国产精品一区二区三区免费| 中文字幕日日夜夜| 亚洲少妇自拍| 欧美成人性色生活仑片| 无码少妇精品一区二区免费动态| 视频一区国产| 欧美日韩免费一区二区三区| 男人日女人bb视频| 欧美午夜大胆人体| 国产精品三级电影| 噜噜噜噜噜久久久久久91| 国产黄色美女视频| 久久国产婷婷国产香蕉| 欧美专区福利在线| 国产乡下妇女做爰视频| 久久久久亚洲| 中文字幕欧美日韩精品| 中文字幕一二三四区| 91精品国产自产精品男人的天堂| 欧美日韩一区二区三区在线看| 久久亚洲中文字幕无码| 色www永久免费视频首页在线| 国产精品国产三级国产aⅴ中文 | 国产精品久av福利在线观看| 欧美日韩精品久久久| 国产精品欧美激情在线观看| segui88久久综合| 亚洲同性gay激情无套| 亚洲色图自拍| 91欧美在线视频| 国产欧美视频在线观看| 欧美一区二区视频17c| 三级做a全过程在线观看| av不卡一区二区三区| 国产精品日韩一区二区| 亚洲欧美激情在线观看| 国产成人精品网址| 国产精品jizz视频| 国产三区在线播放| 国产成人免费在线观看| 国产98在线|日韩| www.色日本| 国产高清亚洲一区| 国产精品美女黄网| 亚洲欧洲成人在线| 国产无人区一区二区三区| 奇米精品在线| 91看片在线观看| 亚洲色图一区二区三区| 永久免费看av| 激情aⅴ欧美一区二区欲海潮| 欧美日韩国产综合视频在线观看中文| 黄色免费视频大全| 成人免费av电影| 欧美日韩国产在线观看| 亚洲精品乱码久久久久久动漫| 欧美a在线观看| 亚洲精品一线二线三线无人区| 麻豆精品国产传媒av| 色婷婷综合久久久久久| 中文字幕精品国产| 久久久久久欧美精品se一二三四| 亚洲国产高清视频| 国产成人精品免费久久久久| 伊人影院中文字幕| 国产福利91精品一区| 韩日午夜在线资源一区二区| 国产日产精品久久久久久婷婷| 中文字幕永久在线不卡| 日韩免费在线观看av| 一级毛片久久久| 欧美卡1卡2卡| 人体私拍套图hdxxxx| 成人在线国产| 欧美国产日韩一区| 中文字幕在线播| 国产制服丝袜一区| 欧美激情导航| 成人在线视频亚洲| 黑人巨大精品欧美一区二区免费| 91淫黄看大片| 超碰成人福利| 上原亚衣av一区二区三区| 久久午夜鲁丝片午夜精品| 久久亚洲欧洲| 国产精品一区二区三区免费| 日本在线播放| 精品国产精品自拍| 免费不卡av网站| 女人av一区| 欧美极品在线播放| 在线观看毛片网站| 久久综合色8888| 成人毛片100部免费看| 日韩一区二区三区在线免费观看| 精品久久久久久久久久久久久久久| a级片在线观看| 精品999成人| 91色中文字幕| 黄色av网站在线| 婷婷六月综合亚洲| 一起草最新网址| 成人毛片在线| 91av视频在线| 国产自产一区二区| 综合久久久久综合| 538任你躁在线精品免费| 女人抽搐喷水高潮国产精品| 欧美成人亚洲成人| 国产女人高潮的av毛片| 中文字幕精品一区二区精品绿巨人 | 在线精品视频免费播放| av2014天堂网| 欧美激情性爽国产精品17p| 国产精品自产拍高潮在线观看| 日韩一二三四| 欧美午夜无遮挡| 黄色录像a级片| 亚洲精品日本| 国产综合 伊人色| 波多野结衣中文在线| 精品三级在线看| 精品视频久久久久| 粉嫩av一区二区三区粉嫩| 精品嫩模一区二区三区| 国产在线一区不卡| 毛片精品免费在线观看| 91国产精品一区| 中文字幕日韩一区| 亚洲怡红院在线| 婷婷亚洲图片| 亚洲a在线播放| 中文字幕资源网在线观看| 91精品国产综合久久福利软件| 日本不卡一二区| 国产一区二区在线观看视频| 国产精品美女在线播放| 国产精品欧美一区二区三区不卡 | 在线播放日韩专区| 伊人久久成人网| 亚洲欧美激情一区二区| 久久精品国产99久久99久久久| 亚洲精品2区| 超碰97人人人人人蜜桃| 都市激情国产精品| 日韩毛片在线看| 成年人视频免费| 国产欧美日韩亚州综合| 无尽裸体动漫2d在线观看| 91精品精品| 99久久精品免费看国产四区| h片精品在线观看| 日韩风俗一区 二区| 伊人久久久久久久久久久久| 国产精品蜜臀av| 麻豆精品国产传媒| 一本久道久久久| 视频一区视频二区视频三区高| 欧美一级在线| 欧美激情精品久久久久久变态| 五月婷婷丁香六月| 91精品1区2区| 综合五月激情网| 成人动漫一区二区在线| 精品久久久久久久免费人妻| 久久久综合色| 国产伦理一区二区三区| 精品91久久| 久久午夜a级毛片| 偷拍自拍在线| 欧美精品vⅰdeose4hd| 日韩免费一二三区| 亚洲国产经典视频| 少妇丰满尤物大尺度写真| 性一交一乱一区二区洋洋av| 在线观看一区欧美| 日韩a级大片| 国产日产欧美a一级在线| 国内激情视频在线观看| 视频直播国产精品| 日本精品999| 欧美日韩精品电影| 国产精品老女人| 亚洲精品乱码久久久久| 欧美成人国产精品一区二区| 国产电影一区在线| 中文字幕免费高清在线| 亚洲欧美日韩专区| 日本一区二区三区四区五区六区| 在线视频亚洲专区| 91九色对白| 欧美日韩卡一| 国产suv精品一区二区| 中文字幕在线播放网址| 一区二区三欧美| 色视频在线观看| 欧美成人精品高清在线播放 | 国内精品久久久久影院薰衣草| 欧美二区在线视频| 韩日在线一区| 永久免费在线看片视频| 欧美日韩激情| 欧美久久久久久| 欧美xxxx在线| 国产精品二区在线观看| 99亚洲男女激情在线观看| 国产97在线视频| 僵尸再翻生在线观看| 欧美激情欧美狂野欧美精品| 久久五月精品| www国产精品com| 1pondo在线播放免费| 亚洲天堂第一页| 日本啊v在线| 日韩成人在线观看| 四虎永久在线精品免费网址| 日韩一区和二区| 国产xxxx孕妇| 欧美一区二区三区系列电影| 国产一区二区三区在线观看| 欧美无砖砖区免费| 日韩av免费播放| 色菇凉天天综合网| 日韩精品一区不卡| 色婷婷综合久久久中文字幕| 中文字字幕在线中文| 精品久久久久久中文字幕一区奶水 | 亚洲老妇激情| 国产大尺度在线观看| 久久久精品久久久久久96| 一区二区日本伦理| 亚洲成人精选| 日韩在线视频在线| 亚洲视频狠狠| 日韩中文字幕在线视频观看| 国产一级久久| 能在线观看的av网站| 热久久免费视频| 国产免费中文字幕| 国产精品一二三在| 久久久男人的天堂| av激情综合网| 精品人伦一区二区三电影 | 国产成人无码aa精品一区| 亚洲男人的天堂在线aⅴ视频| 久久r这里只有精品| 亚洲国产美女搞黄色| 97久久久久久久| 欧美又粗又大又爽| 国产精品一区二区三区在线免费观看| 制服丝袜av成人在线看| 性一交一乱一色一视频麻豆| 精品国产网站在线观看| 日本一区二区三区在线观看视频| 亚洲午夜av久久乱码| 日本高清视频在线观看| 久久91精品国产91久久久| 操喷在线视频| 国产精品成人v| 精品国产一级| 国产一区二区黄色| 久久人人88| 国产欧美精品aaaaaa片| 视频在线观看91| 三级黄色片免费看| 91首页免费视频| 羞羞在线观看视频| 亚洲一区二区三区国产| 亚洲精品一区二三区| 日韩视频一区二区在线观看| 深夜视频在线免费| 精品国产欧美一区二区三区成人| 日韩精品卡一| 国产精品高潮呻吟久久av黑人| 麻豆久久一区| 欧美主播一区二区三区美女 久久精品人| 亚洲国产成人精品女人| 成人免费aaa| 激情五月婷婷综合网| 色呦呦一区二区| 亚洲乱码国产乱码精品精98午夜| 久草手机在线观看| 日韩欧美中文字幕公布| 国产小视频在线| 欧美国产第一页| 国外成人福利视频| 久久精品国产美女| 亚洲破处大片| 中文字幕欧美人妻精品一区| 菠萝蜜视频在线观看一区| 日本女人性生活视频| 欧美视频免费在线| 精品人妻午夜一区二区三区四区| 一区二区三区日韩在线| 草草在线视频| 7777精品伊久久久大香线蕉语言| av在线不卡顿| av片中文字幕| 不卡视频一二三| 免费在线一区二区三区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 天天摸夜夜添狠狠添婷婷| 超碰日本道色综合久久综合| 精品成人av| 免费国产一区| 99伊人成综合| 男人网站在线观看| 亚洲一区二区三区四区的| 99免费在线视频| 久久精品2019中文字幕| 国产电影一区二区三区爱妃记| 久久综合一区二区三区| 99国产精品私拍| 日韩精品国产一区| 亚洲精品成人在线| 99热这里只有精品1| 久久久91精品| 日本欧美在线| 一区二区在线不卡| 免费成人美女在线观看| 欧美午夜激情影院| 在线免费观看日本一区| 久久精品蜜桃| 国产成人涩涩涩视频在线观看| 亚洲日产av中文字幕| 免费在线观看日韩视频| 久久久国产午夜精品| 黄瓜视频在线免费观看| 亚洲精品一区中文| 免费福利视频一区二区三区| 久久综合久久久| 日韩国产欧美在线播放| 成年人看的免费视频| 欧美猛男男办公室激情| 免费a级毛片在线播放| 成人信息集中地欧美| 亚洲激情久久| 五月天丁香社区| 精品福利在线视频| av女名字大全列表| 国产成人精品视频| 日韩一区电影| 在线观看一区二区三区视频| 亚洲综合免费观看高清完整版 | 国产亚洲欧洲在线| 欧美jizz18| 日本精品福利视频| 99久久久国产精品免费蜜臀| 成年人视频在线免费看| 国产亚洲精品一区二区| 欧美a视频在线| 91免费国产精品| 久久综合久久综合九色| 中文字幕日本视频| 久久九九精品99国产精品| 亚洲视频精选| 日本熟妇人妻xxxxx| 亚洲欧洲精品一区二区三区| 国产91麻豆视频| 国产精品久久久久77777| 欧美黄色aaaa| 最新中文字幕视频| 8v天堂国产在线一区二区| 久草在线视频网站| 欧美一区二区三区电影在线观看| 久久精品久久精品| 日本一级淫片色费放| 中文字幕久久亚洲| av动漫精品一区二区| 毛葺葺老太做受视频| 亚洲精品日产精品乱码不卡| 天天操天天射天天| 国产免费亚洲高清| 亚洲国产1区| 天美传媒免费在线观看| 亚洲国产精品va在看黑人| 51一区二区三区| 给我免费播放片在线观看| 亚洲国产成人在线| 手机看片一区二区| 成人美女av在线直播| 在线亚洲观看| 九九热只有精品| 在线成人中文字幕| 天堂一区二区三区四区| 在线观看中文av| 在线观看一区不卡| 麻豆mv在线看|