Jenkins从build.gradle文件中读取Android应用程序版本并将其存储到环境变量中

4

我希望当Jenkins创建构建时,自动将版本标签推送到我的git仓库。但是为了做到这一点,我需要为创建的构建工件获取版本名称版本代码

我目前使用以下设置来实现此目的(它可以正常工作):

  1. 在构建中创建Gradle任务。
  2. 运行一个Gradle任务,创建带有版本名称和版本代码的属性文件;
  3. 使用EnvInject插件读取/注入属性文件,以便环境变量可用于当前的Jenkins作业;

生成version.properties文件的代码如下:

android.applicationVariants.all { variant ->
    def taskName = "createVersionFile" + variant.flavorName.capitalize();
    if (tasks.findByPath(taskName) == null) {
        tasks.create(name: taskName) {
            doLast {
                def prop = new Properties()
                def propFile = new File("$buildDir/outputs/version.properties");
                prop.setProperty('versionname', variant.versionName + '-' + variant.versionCode)
                propFile.createNewFile();
                prop.store(propFile.newWriter(), null);
            }
        }
    }
}

这个方法是可行的(如之前所述),但它非常笨重,我被迫修改build.gradle文件,以便Jenkins能够正常工作。 有没有更简单的方法,可能不需要修改build.gradle文件?也许可以生成第二个build.gradle文件,其中包含“version.properties”任务?

我也想达到同样的目标。我很好奇,你最终采用了哪个解决方案? - Peter F
1个回答

2
我的构建哲学是一切都应该通过gradle实现。无论你想对项目进行什么自动化,这都为你提供了灵活性。这使得你可以在任何环境下重复使用它,并轻松地设置任何只支持命令行运行的CI。
因此,我会将gradle git插件添加到你的构建中,以便操作git(或通过命令行执行)。
查看gradle.properties文件。你可以在那里定义版本代码和名称。你不需要额外的代码来在Android gradle脚本和git操作中获取这些值作为参数。因此,你可以将它们注入到defaultConfig中。

1
我喜欢你的建议,我会查看gralde git插件。但是将版本号添加到“gradle.properties”文件中并不是一个真正的选项,因为这意味着我必须在两个地方更改版本号。除非我可以读取“gradle.properties”文件并将数字注入到“versionName”和“versionCode”字段中。 - Rolf ツ
那是我的建议,使用versionCode versions.codeversionName versions.name,它们来自于gradle.properties - Eugen Martynov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接