打包Android和iOS应用,可持续集成,build和versionCode自加解决方案

开篇瞎吹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入手


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,每半小时去检查代码更新,有更新就执行打包操作,担心自增后,再次触发打包,无限循环,造成资源浪费,最后没有使用。

你可能感兴趣的:(打包Android和iOS应用,可持续集成,build和versionCode自加解决方案)