Jenkins 自动打包后打一个tag并同步到origin
2019-01-05 本文已影响0人
地上的
继之前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