美文网首页
Jenkins 自动打包后打一个tag并同步到origin

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

作者: 地上的 | 来源:发表于2019-01-05 10:56 被阅读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
                    
    

    相关文章

      网友评论

          本文标题:Jenkins 自动打包后打一个tag并同步到origin

          本文链接:https://www.haomeiwen.com/subject/tjdkrqtx.html