Jenkins參數(shù)化構(gòu)建

在實(shí)際項(xiàng)目中, 一個(gè)構(gòu)建任務(wù)對(duì)應(yīng)一份svn代碼, 但是可以通過Jenkins的參數(shù)化構(gòu)建, 實(shí)現(xiàn)打包時(shí)的環(huán)境切換. 這需要對(duì)我們的工程進(jìn)行改造, 將環(huán)境參數(shù)和Jenkins提供的參數(shù)進(jìn)行關(guān)聯(lián), 實(shí)現(xiàn)此功能.

通過General - 參數(shù)化構(gòu)建過程的配置, 可以看到, 該配置提供了很多數(shù)據(jù)類型, 我們選用了 列表和布爾值做實(shí)例說明.
創(chuàng)建參數(shù)名為HOST_NAME的列表類型的參數(shù)來(lái)設(shè)置三個(gè)測(cè)試環(huán)境的切換.
再創(chuàng)建一個(gè)isDarkModel的布爾值類型的參數(shù)來(lái)控制測(cè)試程序的黑暗模式的開啟與關(guān)閉.

參數(shù)化構(gòu)建1.png
參數(shù)化構(gòu)建2.png

創(chuàng)建好以后參數(shù)以后, 應(yīng)用保存, 可以看到, 以前的立即構(gòu)建變成了 Build with parameters (參數(shù)化構(gòu)建) . 之前配置的 "名稱"/"選項(xiàng)"/"描述" 均可在該頁(yè)面中看到.
指的注意的是, "名稱"是以后要在腳本中獲取來(lái)用的, 所以一般采用英文命名, 這樣一來(lái), 用漢語(yǔ)將描述部分寫清楚就十分有必要了, 這對(duì)使用該項(xiàng)目的打包的人來(lái)說會(huì)更友好.
另外, 列表在配置選項(xiàng)項(xiàng)時(shí), 不同選項(xiàng)用回車換行即可. 比如該示例中, HOST_NAME 三個(gè)選項(xiàng)分別是 測(cè)試環(huán)境1 / 2 / 3 , 在構(gòu)建時(shí)的下拉列表顯示的就是這三個(gè)選項(xiàng), 在以后shell腳本中可以使用$HOST_NAME來(lái)獲取, 如果你選擇了 "測(cè)試環(huán)境2"的選項(xiàng), 那么 $HOST_NAME="測(cè)試環(huán)境2".

參數(shù)化構(gòu)建3.png

那么, 如何把該這些參數(shù)傳入我們的工程呢?

首先對(duì)工程做一下改造, 工程添加一下文件:

  • GlobalConfig.h
  • JenkinsConfig.h
  • ConfigShell.sh

如圖:

工程改造.png

首先, ConfigShell.sh 文件是腳本文件, 在該腳本中, 通過 $參數(shù)名稱 的方式獲取Jenkins中配置的打包參數(shù), 通過判斷后將得到相應(yīng)的環(huán)境名寫入JenkinsConfig.h 文件中. 而ConfigShell.sh 文件則負(fù)責(zé)將所有環(huán)境列出來(lái), 通過引用JenkinsConfig.h頭文件, 根據(jù)該文件的配置項(xiàng), 選擇性編譯定義的環(huán)境變量的宏. (比如選擇的是 測(cè)試環(huán)境2, 則在JenkinsConfig.h插入#define HOST_DEBUG_2, 這樣GlobalConfig.h文件中引后, 便會(huì)編譯HOST_DEBUG_2中定義的環(huán)境的宏)

之所以放到工程中, 而沒有完全寫到Jenkins的執(zhí)行腳本的配置項(xiàng)里, 是因?yàn)槲矣X得這樣可以讓執(zhí)行腳本隨著svn一起管理起來(lái), 以后開了分支也比較方便,不需要重復(fù)寫.

//GlobalConfig.h

#import "JenkinsConfig.h"

//環(huán)境變量配置
//#define HOST_DEBUG
//#define HOST_DEBUG_2
//#define HOST_RELEASE

#ifndef HOST_DEBUG
#else
#define HOST @"測(cè)試環(huán)境1"
#endif

#ifndef HOST_DEBUG_2
#else
#define HOST @"測(cè)試環(huán)境2"
#endif

#ifndef HOST_RELEASE
#else
#define HOST @"發(fā)布環(huán)境"
#endif

//暗黑模式配置
//#define DarkModel

#ifndef DarkModel
#define kIsDarkModel NO
#else
#define kIsDarkModel YES
#endif

//ConfigShell.sh

#!/bin/sh

#變量1  HOST_NAME 環(huán)境切換 (list 測(cè)試環(huán)境1 | 測(cè)試環(huán)境2 | 測(cè)試環(huán)境3 )
#變量2  isDarkModel 是否暗黑模式 (BOOL 默認(rèn)值 false: 不是暗黑模式 true: 暗黑模式)

echo "http://環(huán)境配置注釋">JenkinsConfig.h

echo "------ Jenkins_編譯配置項(xiàng)打印日志: ------"

echo "HOST_NAME(環(huán)境切換)"
echo "http://HOST_NAME(環(huán)境切換)">>JenkinsConfig.h

echo "value=測(cè)試環(huán)境1:說明..."
echo "http://value=測(cè)試環(huán)境1:說明...">>JenkinsConfig.h

echo "value=測(cè)試環(huán)境2:說明..."
echo "http://value=測(cè)試環(huán)境2:說明...">>JenkinsConfig.h

echo "value=測(cè)試環(huán)境3:說明..."
echo "http://value=測(cè)試環(huán)境3:說明...">>JenkinsConfig.h

echo "當(dāng)前配置環(huán)境:"$HOST_NAME

echo "\n">>JenkinsConfig.h

if [ $HOST_NAME = "測(cè)試環(huán)境1" ] ; then
hostConfig="#define HOST_DEBUG"
elif [ $HOST_NAME = "測(cè)試環(huán)境2" ] ; then
hostConfig="#define HOST_DEBUG_2"
elif [ $HOST_NAME = "測(cè)試環(huán)境3" ] ; then
hostConfig="#define HOST_RELEASE"
else
echo "HOST_NAME參數(shù)無(wú)效!!!"
fi

echo $hostConfig>>JenkinsConfig.h

echo "\n">>JenkinsConfig.h
echo "isDarkModel(是否啟用暗黑模式)"
echo "http://isDarkModel(是否啟用暗黑模式)">>JenkinsConfig.h

echo "當(dāng)前是否啟用暗黑模式:"$isDarkModel

if [ $isDarkModel = true ] ; then
darkModel="#define DarkModel"
else
darkModel="http://#define DarkModel"
fi

echo $darkModel>>JenkinsConfig.h

echo "------ Jenkins_編譯配置項(xiàng)打印日志_end ------"

注釋

$hostConfig>JenkinsConfig.h #將變量hostConfig的值寫入JenkinsConfig.h文件中,覆蓋該文件之前的全部?jī)?nèi)容

$hostConfig>>JenkinsConfig.h #將變量hostConfig的值寫入JenkinsConfig.h文件中的最后,不會(huì)覆蓋該文件之前的內(nèi)容

如果用戶選擇了 測(cè)試環(huán)境2 和 開啟暗黑模式, 可以看到JenkinsConfig.h文件的如下

//JenkinsConfig.h

//環(huán)境配置注釋
//HOST_NAME(環(huán)境切換)
//value=測(cè)試環(huán)境1:說明...
//value=測(cè)試環(huán)境2:說明...
//value=測(cè)試環(huán)境3:說明...


#define HOST_DEBUG_2


//isDarkModel(是否啟用暗黑模式)
#define DarkModel

可以得知, JenkinsConfig.h文件會(huì)據(jù)此, 編譯 HOST_DEBUG_2 和 DarkModel兩部分內(nèi)容.

至此, 回到Jenkins當(dāng)中去, 在構(gòu)建模塊中, 添加 執(zhí)行shell, 添加如下腳本:

cd $WORKSPACE/JenkinsTest
sh ConfigShell.sh

注意, 該腳本需要添加在 xcode配置之前. 如圖:

參數(shù)化構(gòu)建4.png

至此, 回到構(gòu)建頁(yè)面, 選擇相應(yīng)的參數(shù), 執(zhí)行構(gòu)建, 即可.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末囱桨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌虑省,老刑警劉巖仗岖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件李丰,死亡現(xiàn)場(chǎng)離奇詭異惩系,居然都是意外死亡舵揭,警方通過查閱死者的電腦和手機(jī)讹挎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門校赤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人筒溃,你說我怎么就攤上這事马篮。” “怎么了怜奖?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵浑测,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我歪玲,道長(zhǎng)迁央,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任滥崩,我火速辦了婚禮岖圈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘夭委。我一直安慰自己幅狮,他們只是感情好募强,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著崇摄,像睡著了一般擎值。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逐抑,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天鸠儿,我揣著相機(jī)與錄音,去河邊找鬼厕氨。 笑死进每,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的命斧。 我是一名探鬼主播田晚,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼国葬!你這毒婦竟也來(lái)了贤徒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤汇四,失蹤者是張志新(化名)和其女友劉穎接奈,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體通孽,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡序宦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了背苦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片互捌。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖糠惫,靈堂內(nèi)的尸體忽然破棺而出疫剃,到底是詐尸還是另有隱情,我是刑警寧澤硼讽,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布巢价,位于F島的核電站,受9級(jí)特大地震影響固阁,放射性物質(zhì)發(fā)生泄漏壤躲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一备燃、第九天 我趴在偏房一處隱蔽的房頂上張望碉克。 院中可真熱鬧,春花似錦并齐、人聲如沸漏麦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)撕贞。三九已至更耻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捏膨,已是汗流浹背秧均。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留号涯,地道東北人目胡。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像链快,于是被迫代替她去往敵國(guó)和親誉己。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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