开篇瞎吹B
上周使用Jenkins + GitLab,完成了Android和iOS应用的自动化打包,可持续集成,节省了人工打包的成本。本篇主要解决在自动打包时,版本号,即Android的versionCode、iOS的build号自增的问题。
核心命令
git rev-list HEAD --first-parent --count
这个命令会统计当前分支的总提交次数,每次commit,可以视为版本有更新,用这个当做版本build号,再适合不过了。
Android集成
在App的gradle开头,即android域上方,增加下面两行:
def commitCount = 'git rev-list HEAD --first-parent --count'
def gitVersionCode = commitCount.execute().text.trim().toInteger()
随后将android域内的versionCode的数字,改为gitVersionCode:
versionCode gitVersionCode
完成后大致结构如下:
def commitCount = 'git rev-list HEAD --first-parent --count'
def gitVersionCode = commitCount.execute().text.trim().toInteger()
android {
defaultConfig {
applicationId "com.xxxx"
minSdkVersion rootProject.minSdkVersion
targetSdkVersion rootProject.targetSdkVersion
versionCode gitVersionCode
versionName "1.5.0"
multiDexEnabled true
}
}
iOS集成
从Run Script入手
附上脚本
if [ $CONFIGURATION == Release ];
then
buildNumber=$(git rev-list HEAD --first-parent --count)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"
echo "build number increase"
fi
脚本不高深,能用就好。
其他思路
1. 使用时间戳做build号
比较适合每日构建的团队,但是这个号会很大,注意不要超过int上限。
2. 使用正则去匹配版本号,+1后push到服务器,随后打包
这个只是猜想,没有实践,由于我配置了SCM,每半小时去检查代码更新,有更新就执行打包操作,担心自增后,再次触发打包,无限循环,造成资源浪费,最后没有使用。