Jenkins 自動打包后打一個tag并同步到origin

繼之前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
                
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容