Jenkins實現(xiàn)掃碼安裝(四)

增加二維碼,以供掃描安裝

先看一下下載安裝的網(wǎng)頁


下載網(wǎng)頁.jpeg

截止到現(xiàn)在堕澄,Jenkins里已經(jīng)可以打包了僵芹,但是安裝的話处硬,除了上傳蒲公英,http://fir.im這些拇派,我們還可以自己生成二維碼荷辕,一般情況下,我覺得不愿意把ipa包傳到外網(wǎng)上件豌,當(dāng)然你也可以傳疮方,要拿到二維碼需要看網(wǎng)站的API文檔,按照文檔去調(diào)用茧彤。下面我要講一下怎么在自己的服務(wù)器上生成二維碼骡显。
我選用的是Python,用到的庫是Python的Pillow庫和QRCode模塊曾掂,Mac本身應(yīng)該安裝有Python惫谤。

一、安裝Pillow模塊

用終端執(zhí)行以下語句珠洗,安裝pillow溜歪,先安裝multiprocessing模塊,再安裝pillow模塊许蓖,因為pillow對multiprocessing有依賴

sudo pip install multiprocessing
sudo pip install Pillow

二蝴猪、安裝QRCode模塊

在QRCode官網(wǎng)下載模塊包https://pypi.python.org/pypi/qrcodehttps://github.com/lincolnloop/python-qrcode
解壓,終端進入到解壓的文件夾下蛔糯,執(zhí)行以下語句來安裝

python setup.py install

三拯腮、配置sublime成Python編譯器

打開sublime--->Tools--->Build Systems--->Python
測試Python是否能正常工作,輸入下面的句子蚁飒,并且先保存成hello.py文件到桌面(要先保存动壤,不然編譯器不知道你這是個Python文件),command+b淮逻,編譯以下琼懊,看打印臺有沒有輸出hello,如果輸出了hello阁簸,說明正常,可以直接使用

print("hello")

四哼丈、編寫輸出二維碼的Python語句

二維碼其實就是一個網(wǎng)址启妹,一個連接,把它變成二維碼醉旦,所以一掃描就可以進入到這個網(wǎng)址

import qrcode
img=qrcode.make("/Users/hongjie.xia/Desktop/index.html") // 這個路徑是你放index.html文件的地方饶米,上一節(jié)講的,https服務(wù)器訪問的根目錄下放置index.html的地方
img.save("/Users/hongjie.xia/Desktop/QRCode.png")  // 這個是你要存儲二維碼的地址车胡,根據(jù)自己的情況填寫

我得實際配置Jenkins的二維碼地址不是上面的檬输,上面的是測試用的,到時候?qū)懙絪hell腳本里可以根據(jù)情況來修改地址

五匈棘、用shell腳本來創(chuàng)建可以生成二維碼的Python文件丧慈,并且運行

!/bin/bash,#!/bin/python這兩句必須寫,告訴編譯器是個shell腳本主卫、Python腳本

#!/bin/bash
mkdir /Users/hongjie.xia/Desktop

cat > /Users/hongjie.xia/Desktop/GeverateQRCode.py << EOF // 這一句的意思是創(chuàng)建一個GeverateQRCode.py文件逃默,并且往里面寫內(nèi)容,EOF是開頭簇搅,編輯的末尾還要頂格寫一個EOF
#!/bin/python
import qrcode
img=qrcode.make("/Users/hongjie.xia/Desktop/index.html")
img.save("/Users/hongjie.xia/Desktop/QRCode.png")

EOF

python  /Users/hongjie.xia/Desktop/GeverateQRCode.py  // 運行Python腳本

上面這段代碼完域,大家可以放到sublime里進行編寫,然后存成qrcode.sh文件馍资,在終端里運行筒主,運行的時候,需要授權(quán)鸟蟹,進入到放qrcode.sh的目錄下乌妙,先輸入以下命令

chmod 777 ./qrcode.sh

然后運行

./qrcode.sh

這個腳本就可以跑起來了

六、在Jenkins的構(gòu)建腳本里寫入生成二維碼的命令

下面是我的構(gòu)建腳本建钥,大家可以直接改參數(shù)使用藤韵,我項目叫test,hongjie.xia是我的機子名稱熊经,192.168.1.1是我得服務(wù)器(配置https的本機)地址

project_path="/Users/hongjie.xia/Desktop/test"
hostAddress="https://192.168.1.1"

#指定項目地址
workspace_path="$project_path/test.xcworkspace"

#指定項目的scheme名稱
scheme="test"
#指定要打包的配置名
configuration="Release"
#指定打包所使用的輸出方式泽艘,目前支持app-store, package, ad-hoc, enterprise, development, 和developer-id,即xcodebuild的method參數(shù)
export_method='enterprise'

#服務(wù)器訪問的地址
serverDocumentPath="/Users/hongjie.xia/ServerDocument"
#每次構(gòu)建使用的plist文件地址
plistFileName="Plist_${BUILD_NUMBER}"
plistPath="$serverDocumentPath/${JOB_NAME}/${VERSION}/Plists/${plistFileName}"
#plist文件的名字
plistName="${JOB_NAME}Install.plist"
#plist文件的地址
plist_path="${plistPath}/${plistName}"

#每次構(gòu)建后生成二維碼的鏈接地址
htmlFileName="Html_${BUILD_NUMBER}"
htmlPath="$serverDocumentPath/${JOB_NAME}/${VERSION}/Htmls/${htmlFileName}"

#每次構(gòu)建生成的二維碼地址
qrCodeFileName="QRCode_${BUILD_NUMBER}"
qrCodePath="$serverDocumentPath/${JOB_NAME}/${VERSION}/QRCodes/${qrCodeFileName}"

#ipa和archive的輸出路徑
ipaFileName="Ipa_${BUILD_NUMBER}"
ipaPath="${serverDocumentPath}/${JOB_NAME}/${VERSION}/Ipas/${ipaFileName}"
#指定輸出ipa名稱
ipaName="${JOB_NAME}.ipa"
ipa_path="${ipaPath}/${ipaName}"

#指定輸出archive名稱
archiveName="${JOB_NAME}.xcarchive"
#指定輸出歸檔文件地址
archive_path="${ipaPath}/${archiveName}"

#服務(wù)器打開本地html的地址
serverHtmlPath="${hostAddress}/${JOB_NAME}/${VERSION}/Htmls/${htmlFileName}"

#服務(wù)器打開的plist文件地址
serverPlistPath="${hostAddress}/${JOB_NAME}/${VERSION}/Plists/${plistFileName}/${plistName}"
#服務(wù)器打開的ipa文件地址
serverIpaPath="${hostAddress}/${JOB_NAME}/${VERSION}/Ipas/${ipaFileName}/${ipaName}"
#指定打包配置
export_plist_path="$project_path/ExportOptions.plist"
#獲取執(zhí)行命令時的commit message
#commit_msg="$(cat $project_path/build_log.txt)"

#輸出設(shè)定的變量值
echo "===workspace path: ${workspace_path}==="
echo "===archive path: ${archive_path}==="
echo "===ipa path: ${ipaPath}/${ipaName}==="
echo "===export method: ${export_method}==="
#echo "===commit msg: ${commit_msg}==="

#先清空前一次build
xcodebuild clean -workspace ${workspace_path} -scheme ${scheme} -configuration ${configuration}
xcodebuild archive -workspace ${workspace_path} -scheme ${scheme} -archivePath ${archive_path}
xcodebuild -exportArchive -archivePath ${archive_path} -exportPath ${ipaPath} -exportOptionsPlist ${export_plist_path}

#生成二維碼
#第一步镐依,生成對應(yīng)的plist文件
mkdir ${plistPath}
# html的位置應(yīng)該為構(gòu)建版本的信息
cat > ${plist_path} << EOF
<?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>items</key>
    <array>
        <dict>
            <key>assets</key>
            <array>
                <dict>
                    <key>kind</key>
                    <string>software-package</string>
                    <key>url</key>
                    <string>${serverIpaPath}</string>
                </dict>
            </array>
            <key>metadata</key>
            <dict>
                <key>bundle-identifier</key>
                <string>com.xxx.xxx</string>
                <key>bundle-version</key>
                <string>1.0</string>
                <key>kind</key>
                <string>software</string>
                <key>releaseNotes</key>
                <string>v1(可以隨意填)</string>
                <key>title</key>
                <string>寫你的標(biāo)題</string>
            </dict>
        </dict>
    </array>
</dict>
</plist>

EOF

#第二步匹涮,獲取本機的server地址
mkdir ${htmlPath}
# html的位置應(yīng)該為構(gòu)建版本的信息
cat > ${htmlPath}/index.html << EOF
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>寫你的標(biāo)題</title>
</head>
<body>
<h1 style="font-size:40pt">寫你的標(biāo)題<h1/>
<h1 style="font-size:40pt">
<a title="iPhone" href="itms-services://?action=download-manifest&url=${serverPlistPath}">Iphone Download</a>
<h1/>
<a title="iPhone" href="${hostAddress}/server.crt">ssl 證書安裝</a>
<h1/>
</body>
</html>

EOF

#第三步,生成二維碼
mkdir ${qrCodePath}

cat > ${qrCodePath}/GeverateQRCode.py << EOF
#!/bin/python
import qrcode
img=qrcode.make("${serverHtmlPath}/index.html")
img.save("${qrCodePath}/QRCode.png")

EOF

python ${qrCodePath}/GeverateQRCode.py

注意到槐壳,構(gòu)建腳本里然低,動態(tài)生了plist文件,這個plist文件是為了itms-services來調(diào)用,用來配置下載選項的雳攘,和上一節(jié)講的打包plist是兩回事带兜。
這個原理就是,你自己建立一個網(wǎng)頁吨灭,網(wǎng)頁上有下載按鈕刚照,點擊下載按鈕,調(diào)用itms-services喧兄,去plist文件里進行下載匹配无畔,根據(jù)plist文件,查找ipa包的位置繁莹,然后進行下載安裝檩互。

下面我來理一下整個這個文件夾的分布

Jenkins存儲的文件結(jié)構(gòu).jpeg

七特幔、把二維碼顯示到Jenkins上

需要一個插件咨演,到Jenkins的首頁上,點擊系統(tǒng)管理--管理插件--可選插件--選擇description setter plugin蚯斯,進行安裝薄风。安裝好以后,就可以再次打開工程拍嵌,點擊配置遭赂,在構(gòu)建后配置里,增加如下選項


構(gòu)建后配置.png

之后再Description里寫如下語句横辆,同樣是換成你自己的配置撇他,${JOB_NAME},${VERSION},${BUILD_NUMBER}都是Jenkins的自帶環(huán)境變量

<img src='https://192.168.1.1/${JOB_NAME}/${VERSION}/QRCodes/QRCode_${BUILD_NUMBER}/QRCode.png' height="200" width="200" />

點擊保存

這個時候就可以構(gòu)建了狈蚤,點擊Build with Parameters困肩,開始構(gòu)建,就OK了脆侮,這時就會出現(xiàn)二維碼了锌畸,直接掃描就可以進入到下載頁面。

八靖避、先進行證書的下載和信任

首先點擊證書的下載潭枣,下載了以后,安裝幻捏,根據(jù)操作步驟一步步進行信任等操作之后盆犁,需要到手機的設(shè)置---通用---關(guān)于本機---證書信任設(shè)置,打開對你自己根證書的信任篡九,之后就可以直接點擊下載進行下載安裝應(yīng)用了~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谐岁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌翰铡,老刑警劉巖钝域,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異锭魔,居然都是意外死亡例证,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門迷捧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來织咧,“玉大人,你說我怎么就攤上這事漠秋◇厦桑” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵庆锦,是天一觀的道長捅位。 經(jīng)常有香客問我,道長搂抒,這世上最難降的妖魔是什么艇搀? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮求晶,結(jié)果婚禮上焰雕,老公的妹妹穿的比我還像新娘。我一直安慰自己芳杏,他們只是感情好矩屁,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著爵赵,像睡著了一般吝秕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上亚再,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天郭膛,我揣著相機與錄音,去河邊找鬼氛悬。 笑死则剃,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的如捅。 我是一名探鬼主播棍现,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼镜遣!你這毒婦竟也來了己肮?” 一聲冷哼從身側(cè)響起士袄,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谎僻,沒想到半個月后娄柳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡艘绍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年赤拒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诱鞠。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡挎挖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出航夺,到底是詐尸還是另有隱情蕉朵,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布阳掐,位于F島的核電站始衅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏锚烦。R本人自食惡果不足惜觅闽,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望涮俄。 院中可真熱鬧,春花似錦尸闸、人聲如沸彻亲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苞尝。三九已至,卻和暖如春宦芦,著一層夾襖步出監(jiān)牢的瞬間宙址,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工调卑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留抡砂,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓恬涧,卻偏偏與公主長得像注益,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子溯捆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

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