繼之前Jenkins打包走通之后,陸陸續(xù)續(xù)在完善他的一系列其他功能,這次需要在打包完成之后打一個
tag,tag的名字是build號加上時間戳(因為如果在重復(fù)位置打重名的tag是不允許的),于是開干。
由于我們的tag命名要求是build號加上當前時間戳,那么可以分為三步進行(整個過程在shell中執(zhí)行):
1、shell中獲取build號
在iOS Project中build號是寫在plist文件中,所以要去讀取plist文件。
shell中讀取plist文件的方法比較簡單,利用的是Mac中操作plist文件的PlistBuddy,路徑在/usr/libexec/PlistBuddy下,
// Print:讀取值并打印的命令
// /usr/libexec/PlistBuddy -c:指定PlistBuddy的路徑
// -c:后接要執(zhí)行的命令(不負責任地猜測是傳遞cmd參數(shù)的意思^_^)
// CFBundleVersion:要讀取value的key,這里是build號
// CFBundleShortVersionString:版本號
// CFBundleIdentifier:bundle ID
// /Users/xxxxx/.jenkins/workspace/xxxx/xxxxx/Info.plist:plist文件的路徑
BundleVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" /Users/xxxxx/.jenkins/workspace/xxxx/xxxxx/Info.plist)
echo $BundleVersion //打印一下
2、shell中獲取時間戳
cur_sec_and_ns=`date '+%s-%N'` //一次拿到秒數(shù)和納秒數(shù),而不是分別取,分別取會有時間差
cur_sec=${cur_sec_and_ns%-*} //拆分出秒數(shù)
cur_ns=${cur_sec_and_ns##*-} //拆分出納秒數(shù)
cur_timestamp=$((cur_sec*1000+cur_ns/1000000)) //組合為時間戳
echo 當前時間戳=$cur_timestamp
3、組合為我們需要的字符串
BuildTime=${BundleVersion}"_"${cur_timestamp}
echo $BuildTime
4、進入到git目錄下,打tag,并上傳
cd /Users/xxxxx/.jenkins/workspace/xxxxx
git tag $BuildTime
git push origin $BuildTime
綜合:
組合起來使用下面一個shell即可:
BundleVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" /Users/xxxxx/.jenkins/workspace/xxxx/xxxxx/Info.plist)
echo $BundleVersion
cur_sec_and_ns=`date '+%s-%N'`
cur_sec=${cur_sec_and_ns%-*}
cur_ns=${cur_sec_and_ns##*-}
cur_timestamp=$((cur_sec*1000+cur_ns/1000000))
echo 當前時間戳=$cur_timestamp
BuildTime=${BundleVersion}"_"${cur_timestamp}
echo $BuildTime
cd /Users/xxxx/.jenkins/workspace/xxxx
git tag $BuildTime
git push origin $BuildTime
其他問題:
1、打tag會遇到上傳失敗
GitLab: The project you were looking for could not be found.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
這是ssh認證問題,
(1)去把自己的ssh pub key丟到你的gitlab的ssh key列表里
(2)然后在本地cd ~/.ssh/ 進入到ssh目錄,ls查看下所有的ssh key
(3)ssh-add xxx 把這個key應(yīng)用,如果成功,即可進行g(shù)it的push等操作
附帶一些其他的玩法:
在獲取plist里面build號 以及 當前時間戳的時候,還可以利用python 2.7里面有個biplist庫來解決。
1、本地安裝biplist庫:sudo easy_install biplist
2、新建一個py文件,放在與info.plist路徑相同的文件夾下(不在一個路徑下的話,腳本里info.plist做對應(yīng)修改即可),然后開始寫腳本:
import time
from biplist import *
try:
plist = readPlist("Info.plist")
build = plist['CFBundleVersion']
time = int(round(time.time() * 1000))
build_time = build + "_" + str(time)
print (build_time)
except (InvalidPlistException, NotBinaryPlistException), e:
print "Not a plist:", e