首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Codemagic CI:从Git标记获取android版本

Codemagic CI:从Git标记获取android版本
EN

Stack Overflow用户
提问于 2022-04-04 09:36:05
回答 1查看 485关注 0票数 1

我有一个颤振的应用程序,我正在运行的CI使用Codemagic,以构建应用程序的iOS和安卓。CI的一个重要部分是语义版本控制,它接受我的git提交,并在gitlab中将我的版本构建为一个标记。当创建这些标记时,这将触发build CI,它应该接受标记并在build上设置版本。

对于iOS,这不是一个问题,因为在我的预构建脚本中,我可以获得版本并使用agvtools进行设置。

代码语言:javascript
复制
echo "getting latest version..."
export NEW_VERSION_NAME=$((git describe --tags) | cut -c 2-)
NEW_IOS_VERSION_NAME=$((git describe --tags) | cut -c 2-6)
echo $NEW_VERSION_NAME
echo "VERSION_NAME=$NEW_VERSION_NAME" > app/version.properties
...
echo "updating ios version"
agvtool new-marketing-version $NEW_IOS_VERSION_NAME

但是对于Android,我有更多的困难让它工作,因为在Android中没有任何工具可以更新预构建中的版本。CI中唯一的选项是将$NEW_VERSION_NAME传递到flutter build apk --release --build-name=$NEW_VERSION_NAME,因为变量似乎不是在脚本之间传递的。

相反,我从Codemagic (https://github.com/codemagic-ci-cd/android-versioning-example)那里找到了一个用于安卓版本控制的回购示例,并在应用程序/build.gradle中操作版本。

在本地,我在kotlin函数中从exec {}获得标记,然后返回字符串:

代码语言:javascript
复制
def gitVersionName = { ->
    try {
        def stdout = new ByteArrayOutputStream()
        exec {
            commandLine 'git', 'describe', '--tags',
            standardOutput = stdout
        }
        println("Git Version: ${stdout.toString().trim()}")
        return stdout.toString().trim()
    }
    catch (ignored) {
        return null;
    }
}
...
android {
defaultConfig {
        applicationId "XXX"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode flutterVersionCode.toInteger()
        versionName gitVersionName() ?: flutterVersionName
    }
...

在本地,这是可行的,但是当我试图在Codemagic中运行这个程序时,我会在Android中打印fatal: Not a valid object name。我只能假设这意味着终端不在git中,因此没有返回任何git命令。

如果有人知道如何在kotlin中找到正确的目录,那么我可以继续这个方法。或者,如果有人有另一种方法从git标签获得版本,那么更好!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-04 14:18:49

我建议使用与iOS构建相同的方法。您只需要在脚本末尾将$NEW_VERSION_NAME保存到特殊的$CM_ENV文件,如

代码语言:javascript
复制
echo "NEW_VERSION_NAME=$NEW_VERSION_NAME" >> $CM_ENV

它将允许您为flutter build命令使用变量

您可以在这里找到更多的信息和示例,https://docs.codemagic.io/variables/using-environment-variables/#setting-an-environment-variable-on-macos-and-linux

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71734991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档