背景:原來公司Jenkins打包后的ipa和apk都是通過第三方的平台托管,手動上傳,然后去掃二維碼下載。雖然第三方平台有Jenkins插件來直接上傳到該平台,但是想自己進行管理。所以就自己來做安裝包的分發了。
(Android的比較好做,只要有下載鏈接就可以了,所以這里只將ios的分發)
一、存儲plist文件,放在https的域名下
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>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>安裝包下載地址</string>
</dict>
</array>
<key>metadata</key>
<dict>
<!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>安裝包下載地址</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.xxx(包名)</string>
<key>bundle-version</key>
<string>1.6.0(版本號)</string>
<key>kind</key>
<string>software</string>
<string>software</string>
<key>title</key>
<string>xx(安裝包名字)</string>
</dict>
</dict>
</array>
</dict>
</dict>
</array>
</dict>
</plist>
說明:
1.安裝包下載地址只要能下載就可以,不需要放在https下
2.包名問開發也好,或者直接通過其他軟件查看都可以找到
3.版本號一定要與安裝包中的版本號一致
4.安裝包的名字貌似沒什么要求,就寫自己的app的名字就可以
plist因為不涉及到代碼,如果公司沒有正式CA證書的https的服務器,可以放到碼雲(git.oschina.net)上,或者七牛。我是用的git.oschina.net上,因為可以用git命令直接上傳。
注意:https的服務器一定要有正式CA證書。因為蘋果做了限制,它只識別有正式CA證書的網址,否則會提示無法訪問等各種問題。自己建的證書是無效的,我在這上面踩了太多坑了,還自己搭了一台https的服務器==
關於使用git命令上傳到git.oschina.net上的方法在最后有詳細講。
二、使用蘋果安裝協議
蘋果要求plist文件前必須加上蘋果的協議“itms-services”才可以下載安裝
itms-services://?action=download-manifest&url=https://git.oschina.net/用戶名/Projects名/raw/master/xxx.plist
將上面的字符串復制到safra瀏覽器中就可以安裝了,為了證明是可行的,我也截一下圖~


三、通過git將plist文件上傳到git.oschina.net上(如果plist不放在這個平台的可以忽略這步)
因為是要做持續集成,所以git上傳的時候不能使用密碼交互,下面是步驟
git不輸入用戶名和密碼直接上傳到git
方法:
1.在Jenkins執行job的機器上安裝git2以上版本
2.生成密鑰和公鑰 ,生成時不要輸入密碼
ssh-keygen -t rsa -C "xx@xx.com"
3.將公鑰內容copy到git的ssh管理里
4.在本地創建存儲plist的文件夾,進入初始化git,添加ssh的遠程倉庫
git init
git remote add origin git@git.oschina.net:xxx/xxx.git
5.先將遠程上代碼拉取到本地,然后在本地添加plist文件到master,push到遠程倉庫上
git pull
git add xxx
git commit -m "xxx"
git push origin master
說明:使用fetch和merge從遠程倉庫下載並合並本地分支代碼
將這個過程寫成shell腳本如下
#!/bin/bash
rm -rf pliststore
mkdir pliststore
cd pliststore
git init
git remote add origin git@git.oschina.net:xxx/xxx.git
git fetch origin
git merge --no-commit origin/master
cp ../code/$1 ./
rm -rf pliststore
mkdir pliststore
cd pliststore
git init
git remote add origin git@git.oschina.net:xxx/xxx.git
git fetch origin
git merge --no-commit origin/master
cp ../code/$1 ./
#cp的路徑是我存放plist的相對路徑,根據自己的路徑修改
git add $1
git commit -m "$1"
git push origin master
git commit -m "$1"
git push origin master
rm -rf pliststore
說明:
1.$1是命令行參數,因為每次的plist文件名字是不固定的,可以去通過外部參數傳遞過來
2.創建一個文件夾pliststore是因為我不用去判斷本地的文件和服務器的文件是否不一致,否則會提示我merge之類的,我git不好,如果大家有好的方法也可以交流一下~
3.使用這種不輸入用戶名密碼的方法,一定要在本地先push一次,因為第一次會讓輸入git的密碼。以后就不需要了。
分發還未解決的其他問題:因為我是將鏈接生成了二維碼,使用二維碼掃描工具可以提示安裝,但是用微信或者UC的二維碼去掃描就不可以安裝了,所以需要繼續解決一下這個問題。
ios實現分發下載