iOS自動(dòng)打包平臺(tái)搭建:三 Master/Slave架構(gòu)

前言

新到公司的時(shí)候發(fā)現(xiàn)公司還在使用傳統(tǒng)的手動(dòng)打包測試方式涤伐,所以利用自己的閑暇時(shí)間開發(fā)了一個(gè) iOS 打包平臺(tái)潮改,經(jīng)過不斷改良向拆,現(xiàn)在公司在使用新一款的打包平臺(tái),測試人員可以輕松完成打包工作偏陪。我目前也在重新構(gòu)建平臺(tái)抢呆,發(fā)布開源版本。

本系列文章記錄完整的 iOS 打包平臺(tái)搭建過程笛谦,文章列表記錄如下:

iOS自動(dòng)打包平臺(tái)搭建:一 概述
iOS自動(dòng)打包平臺(tái)搭建:二 模塊(組件)化開發(fā)
[iOS自動(dòng)打包平臺(tái)搭建:三 Master/Slave架構(gòu)
iOS自動(dòng)打包平臺(tái)搭建:四 打包腳本(待完成)
iOS自動(dòng)打包平臺(tái)搭建:五 內(nèi)網(wǎng)OTA(待完成)
iOS自動(dòng)打包平臺(tái)搭建:附 安卓打包(待完成)

什么是Master/Slave架構(gòu)

Master/Slave相當(dāng)于Server和agent的概念抱虐。Master提供web接口讓用戶來管理job和slave,job可以運(yùn)行在master本機(jī)或者被分配到slave上運(yùn)行饥脑。一個(gè)master可以關(guān)聯(lián)多個(gè)slave用來為不同的job或相同的job的不同配置來服務(wù)恳邀。[摘自網(wǎng)絡(luò)]

為什么用到Master/Slave架構(gòu)

其實(shí)之前對這種架構(gòu)并不是很熟,但因?yàn)楣緵]有閑置Mac可以用來搭建服務(wù)器灶轰,打包平臺(tái)的服務(wù)只能在Linux系統(tǒng)的一臺(tái)服務(wù)器運(yùn)行谣沸,而眾所周知 iOS 的打包只能在 Mac 上進(jìn)行,所以要實(shí)現(xiàn) iOS 的打包功能只能在服務(wù)器發(fā)布命令后笋颤,將打包指令傳遞給 Mac 去執(zhí)行乳附,在這個(gè)過程中服務(wù)器就是一個(gè) Master,而執(zhí)行打包操作的 Mac 就是 Slave,其關(guān)系如下圖所示许溅。

Master/Slave架構(gòu)

怎么實(shí)現(xiàn)

關(guān)于 Master/Slave 架構(gòu)的實(shí)現(xiàn),我選擇使用 ssh秉版,因?yàn)檫@是一種很簡單的方式贤重,并且在 Mac 、 Linux 系統(tǒng)中都是默認(rèn)安裝的清焕,后來才注意到 Jenkins 也是 Master/Slave 架構(gòu),它有提供幾種方案,展示如下

Jenkins

對其他的方式有興趣的朋友可以研究下忱辅,我們繼續(xù)說 ssh 方式榆芦。

我在本地(localhost)新建一個(gè)用戶 ipack,在終端輸入 ssh ipack@localhost

$ ssh ipack@localhost
Password:

系統(tǒng)會(huì)提示輸入密碼粥惧,輸入對應(yīng)的密碼 123456 键畴,提示成功后就已經(jīng)算是可以搭建 Master/Slave 的橋梁了。

因?yàn)槲覀兪且?Master ssh 遠(yuǎn)程登錄到 Slave突雪,并不是同一臺(tái)主機(jī)的兩個(gè)用戶起惕,另外我們是不希望 Master 在登錄到 Slave 的時(shí)候輸入密碼的,所以接下來將面對兩個(gè)問題:

  1. 能否登錄到其他主機(jī)咏删?
  2. 能否免密登錄惹想?

能否登錄到其他主機(jī)?

答案是肯定的督函,但是因?yàn)?Mac 系統(tǒng)的安全設(shè)置嘀粱,需要開啟共享設(shè)置,如下

共享設(shè)置

注意:要設(shè)置允許所用用戶訪問辰狡。

能否免密登錄锋叨?

免密登錄也是可以實(shí)現(xiàn)的,在 Master 生成公鑰和私鑰搓译,然后將公鑰保存在 Slave 即可完成悲柱。具體如下:

在 Master 執(zhí)行 ssh-keygen -t rsa,默認(rèn)會(huì)在 /Users/<User Name>/.ssh/ 目錄下生成兩個(gè)文件些己,一個(gè)是私鑰(id_rsa) 豌鸡,一個(gè)是公鑰(id_rsa.pub)。將公鑰文件上傳到 Slave 的 ~/.ssh/ 目錄段标,然后重命名為 authorized_keys涯冠。

至此,對于普通發(fā)行版的 Linux 已經(jīng)可以正常免密碼登錄了逼庞,但是在 Mac 上是不行的蛇更, Mac 上 sshd 一般默認(rèn)是沒有打開免密登錄選項(xiàng)的,需要手動(dòng)開啟。

在 Slave 上編輯文件 /etc/ssh_config (需要 root 權(quán)限)派任,如果沒有就新建一個(gè)砸逊,在行尾添加一行

PubkeyAuthentication yes

如果不出意外,現(xiàn)在是可以免密連接到 Slave 的掌逛。

執(zhí)行命令

現(xiàn)在已經(jīng)可以從 Master 登錄到 Slave 师逸,并且已經(jīng)可以執(zhí)行操作,但也僅限于在終端中輸入命令豆混,而我們需要的是能登錄能執(zhí)行操作的一條命令篓像,查閱很多資料找到一條線索,ssh 的 -t 參數(shù)皿伺。

-t      Force pseudo-tty allocation.  This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services.  Multiple -t options force tty allocation, even if ssh has no local tty.  

就是可以提供一個(gè)遠(yuǎn)程服務(wù)器的虛擬tty終端员辩,加上這個(gè)參數(shù)我們就可以在遠(yuǎn)程服務(wù)器的虛擬終端上輸入自己的提權(quán)密碼了,示例如下:

ssh -t -p $port $user@$ip  'cmd'  

可以發(fā)現(xiàn)它的后面可以拼接 cmd 鸵鸥,也就是說可以預(yù)先在 Slave 上配置好腳本文件奠滑,然后在上述命令中執(zhí)行這個(gè)腳本文件就可以達(dá)到我們的目的。

具體實(shí)現(xiàn)

根據(jù)以上的信息脂男,要實(shí)現(xiàn)在 Slave 執(zhí)行 iOS 打包操作有兩種實(shí)現(xiàn)方案:

  • 提前部署好打包腳本文件养叛,然后通過 ssh 執(zhí)行
  • 腳本部署在 Master,每次打包從 Mater 下拉宰翅,sh -c "$(curl -fsSL <URL>.sh)"

這里對我采用提前部署好弃甥,部署腳本部分展示如下:

# 授權(quán)
if [ ! -d ${USER_DIR}/.ssh ];
then
  mkdir -p ${USER_DIR}/.ssh
fi
cat << EOF > ${USER_DIR}/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQAB....
EOF

# 生成plist文件 
cat << EOF > ${BASE_DIR}/Plist/options.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>compileBitcode</key>
    <false/>
    <key>method</key>
    <string>ad-hoc</string>
</dict>
</plist>
EOF

# 獲取iOS打包腳本
cd ${BASE_DIR}/Scripts
curl -o archive.sh ${URL}'/scripts/archive-ios.sh'
chmod +x archive.sh

# 獲取iOS模塊升級腳本
curl -o update-component.sh ${URL}'/scripts/update-component-ios.sh'
chmod +x update-component.sh

從腳本中可以看到獲取打包和升級模塊的部分,是從服務(wù)端下拉腳本到本地汁讼,并修改執(zhí)行權(quán)限淆攻。有了這兩個(gè)腳本文件,在 Master 收到打包命令的時(shí)候就可以調(diào)用 Slave 的這個(gè)腳本執(zhí)行打包操作了嘿架。

總結(jié)

本文主要針對用到的 Master/Slave 進(jìn)行說明瓶珊,因?yàn)橄鄬唵危院芏嗟胤讲⑽凑归_說明耸彪,如發(fā)現(xiàn)錯(cuò)誤或有任何疑問歡迎留言交流伞芹。

更多內(nèi)容請?jiān)L問 http://blog.makaiwen.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蝉娜,隨后出現(xiàn)的幾起案子唱较,更是在濱河造成了極大的恐慌,老刑警劉巖召川,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件南缓,死亡現(xiàn)場離奇詭異,居然都是意外死亡荧呐,警方通過查閱死者的電腦和手機(jī)汉形,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門纸镊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人概疆,你說我怎么就攤上這事逗威。” “怎么了岔冀?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵庵楷,是天一觀的道長。 經(jīng)常有香客問我楣颠,道長,這世上最難降的妖魔是什么咐蚯? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任童漩,我火速辦了婚禮,結(jié)果婚禮上春锋,老公的妹妹穿的比我還像新娘矫膨。我一直安慰自己,他們只是感情好期奔,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布侧馅。 她就那樣靜靜地躺著,像睡著了一般呐萌。 火紅的嫁衣襯著肌膚如雪馁痴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天肺孤,我揣著相機(jī)與錄音罗晕,去河邊找鬼。 笑死赠堵,一個(gè)胖子當(dāng)著我的面吹牛小渊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播茫叭,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼酬屉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了揍愁?” 一聲冷哼從身側(cè)響起呐萨,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吗垮,沒想到半個(gè)月后垛吗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡烁登,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年怯屉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蔚舀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锨络,死狀恐怖赌躺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情羡儿,我是刑警寧澤礼患,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站掠归,受9級特大地震影響缅叠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜虏冻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一肤粱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧厨相,春花似錦领曼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至践磅,卻和暖如春单刁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背府适。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工幻碱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人细溅。 一個(gè)月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓褥傍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親喇聊。 傳聞我的和親對象是個(gè)殘疾皇子恍风,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

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