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

在實(shí)際項(xiàng)目中, 一個(gè)構(gòu)建任務(wù)對(duì)應(yīng)一份svn代碼, 但是可以通過(guò)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)此功能.

通過(guò)General - 參數(shù)化構(gòu)建過(guò)程的配置, 可以看到, 該配置提供了很多數(shù)據(jù)類(lèi)型, 我們選用了 列表和布爾值做實(shí)例說(shuō)明.
創(chuàng)建參數(shù)名為HOST_NAME的列表類(lèi)型的參數(shù)來(lái)設(shè)置三個(gè)測(cè)試環(huán)境的切換.
再創(chuàng)建一個(gè)isDarkModel的布爾值類(lèi)型的參數(shù)來(lái)控制測(cè)試程序的黑暗模式的開(kāi)啟與關(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)建) . 之前配置的 "名稱(chēng)"/"選項(xiàng)"/"描述" 均可在該頁(yè)面中看到.
指的注意的是, "名稱(chēng)"是以后要在腳本中獲取來(lái)用的, 所以一般采用英文命名, 這樣一來(lái), 用漢語(yǔ)將描述部分寫(xiě)清楚就十分有必要了, 這對(duì)使用該項(xiàng)目的打包的人來(lái)說(shuō)會(huì)更友好.
另外, 列表在配置選項(xiàng)項(xiàng)時(shí), 不同選項(xiàng)用回車(chē)換行即可. 比如該示例中, 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 文件是腳本文件, 在該腳本中, 通過(guò) $參數(shù)名稱(chēng) 的方式獲取Jenkins中配置的打包參數(shù), 通過(guò)判斷后將得到相應(yīng)的環(huán)境名寫(xiě)入JenkinsConfig.h 文件中. 而ConfigShell.sh 文件則負(fù)責(zé)將所有環(huán)境列出來(lái), 通過(guò)引用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)境的宏)

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

//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:說(shuō)明..."
echo "http://value=測(cè)試環(huán)境1:說(shuō)明...">>JenkinsConfig.h

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

echo "value=測(cè)試環(huán)境3:說(shuō)明..."
echo "http://value=測(cè)試環(huán)境3:說(shuō)明...">>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的值寫(xiě)入JenkinsConfig.h文件中,覆蓋該文件之前的全部?jī)?nèi)容

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

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

//JenkinsConfig.h

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


#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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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