Jenkins 自动打包后打一个tag并同步到origin

2019-01-05  本文已影响0人  地上的

继之前Jenkins打包走通之后,陆陆续续在完善他的一系列其他功能,这次需要在打包完成之后打一个tagtag的名字是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
                
上一篇下一篇

猜你喜欢

热点阅读