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

时间:2017-01-04 09:15:17

标签: android jenkins gradle

当Jenkins创建构建时,我想自动将版本标签推送到我的git存储库。但为了做到这一点,我需要version nameversion code来创建构建工件。

我目前正在使用以下设置来实现这一点(它工作正常):

  1. 在构建中创建Gradle任务。
  2. 运行Gradle任务,创建一个包含版本名称和版本代码的属性文件;
  3. 使用EnvInject插件读取/注入属性文件,以便环境变量可用于当前的Jenkins作业;
  4. 生成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”任务?

1 个答案:

答案 0 :(得分:1)

我的构建理念是,所有内容都应该通过gradle提供。无论您想要对项目进行何种自动化。这使您可以灵活地在任何环境中重复它,并轻松设置任何仅支持命令行运行的CI。

所以我会在您的构建中添加gradle git plugin以使用git进行操作(或通过命令行进行操作)。

查看gradle.properties文件。您可以在那里定义版本代码和名称。您不需要额外的代码来在Android gradle脚本中获取这些值,并将git操作作为参数。所以你可以在defaultConfig注入它们。