如何在构建服务器和工作站之间同步 Gradle/Android 版本代码
Posted
技术标签:
【中文标题】如何在构建服务器和工作站之间同步 Gradle/Android 版本代码【英文标题】:How to sync Gradle/Android versionCode between build server and workstation 【发布时间】:2014-12-24 08:55:28 【问题描述】:目前我们让 Bamboo 监听 Git 存储库的任何更改。当发生更改时,构建过程开始并将 (Bamboo) 构建号加一。
我认为为 android 项目 (versionCode) 使用相同的内部版本号会很好,这样应用程序的用户可以始终参考他/她收到的实际版本。这样,构建服务器上的内部版本号从 1 变为 2。只有工作站不知道这一点,仍然使用版本 1。
有没有办法同步这个版本号?
试过了:
我的一个朋友建议的一个可能的解决方案是使用 git 命令来获取提交号:git rev-list HEAD --count
,这太棒了。唯一的缺点是您无法在 Bamboo 中正确更改内部版本号。所以 Bamboo 的内部版本号应该是领先的。
顺便说一句,我正在使用带有 Gradle 的 Android Studio
【问题讨论】:
【参考方案1】:Bamboo 可以配置为在构建时将清单中的 versionCode
值设置为内部版本号,因此无需将此更改传播回进行开发的地方。要配置 Bamboo 来执行此操作,请在构建计划中添加一个脚本任务(在实际构建任务之前),其正文为:
sed -i 's/android:versionCode="[[:digit:]]*"/android:versionCode="$bamboo.buildNumber"/' AndroidManifest.xml
【讨论】:
【参考方案2】:是的,使用 gradle 很容易。您必须在 gradle 脚本中检索最新的构建结果并将其放入 versionCode。
这就是你所需要的(记得更改变量以引用你的服务器):
def getBambooNumber()
def url = "https://bambooServer:bambooPort/rest/api/latest/result/PROJECT-BAMBOO-ID/latest.json?os_authType=basic".toURL()
def authValue = "USER:PASSWORD".bytes.encodeBase64().toString()
def json = new JsonSlurper().parseText(url.getText(requestProperties : ["Authorization" : "Basic " + authValue]))
return json.buildNumber + 1 // +1 to Get the new build number
def bambooBuild = bambooBuildNumber()
android
...
defaultConfig
...
versionCode bambooBuild
//This allows you to access in BuildConfig to the bamboo build
buildConfigField "Integer", "BAMBOO_BUILD", "$bambooBuild"
...
...
让我知道这是否适合你。
【讨论】:
以上是关于如何在构建服务器和工作站之间同步 Gradle/Android 版本代码的主要内容,如果未能解决你的问题,请参考以下文章
如何在 redis 和 PostgreSQL 表行之间同步值?