继之前Jenkins打包走通之后,陆陆续续在完善他的一系列其他功能,这次需要在打包完成之后打一个
tag,tag的名字是build号加上时间戳(因为如果在重复位置打重名的tag是不允许的),于是开干。
由于我们的tag命名要求是build号加上当前时间戳,那么可以分为三步进行(整个过程在shell中执行):
1、shell中获取build号
在iOS Project中build号是写在plist文件中,所以要去读取plist文件。
shell中读取plist文件的方法比较简单,利用的是Mac中操作plist文件的PlistBuddy,路径在/usr/libexec/PlistBuddy下,
// Print:读取值并打印的命令
// /usr/libexec/PlistBuddy -c:指定PlistBuddy的路径
// -c:后接要执行的命令(不负责任地猜测是传递cmd参数的意思^_^)
// 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'` //一次拿到秒数和纳秒数,而不是分别取,分别取会有时间差
cur_sec=${cur_sec_and_ns%-*} //拆分出秒数
cur_ns=${cur_sec_and_ns##*-} //拆分出纳秒数
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应用,如果成功,即可进行git的push等操作
附带一些其他的玩法:
在获取plist里面build号 以及 当前时间戳的时候,还可以利用python 2.7里面有个biplist库来解决。
1、本地安装biplist库:sudo easy_install biplist
2、新建一个py文件,放在与info.plist路径相同的文件夹下(不在一个路径下的话,脚本里info.plist做对应修改即可),然后开始写脚本:
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