Incrementar el número de compilation de Android en continuous integration

Estoy usando Android Studio, Gradle, git.

En cada visita a la sucursal maestra, quiero build una nueva versión de la aplicación que se cargue en el canal Alpha de Google Play Store. Para esto necesito boost el versionCode de la aplicación para cada compilation.

Por esto, parece que tengo varias opciones:

  1. Aumenta el número durante la compilation de Jenkins y vuelve a enviar el file modificado al repository.
    • No me gusta la idea de tener mi server de compilation haciendo push / commits.
  2. Aumentando el número con un git hook.
    • Me gusta la idea, incluso less, de usar git para modificar files. Si estoy de vacaciones, ¿quién (en el rest del equipo) podría encontrar esto y saber qué hacer con él?
  3. Tener un file en otro server (al que el server de compilation puede acceder directamente) mientras se guarda la versión actual. Gradle lo accederá, lo boostá y lo saveá de nuevo.
    • Esto parece 'frágil', pero al less podría tener una tarea fácil 'increaseVersion' que solo se ejecuta en el server. Y si se rompe (si movemos serveres o algo) es bastante fácil de reparar.

Actualmente, me gusta 3 lo mejor.

¿Alguien tiene una manera definida de hacerlo?

No uso ninguno de los anteriores, como usted, no quiero modificar el repository para cada compilation, ni ningún file.

Jenkins tiene un valor siempre creciente para cada construcción, expuesto a través de la variable de entorno BUILD_NUMBER .

En Gradle, genero el valor de versionCode programáticamente en time de compilation, usando el valor BUILD_NUMBER para asegurarme de que versionCode sea ​​siempre más alto que la versión anterior.

Un fragment de mi build.gradle :

 // Used to set the package version name and version code ext.versionMajor = 1 ext.versionMinor = 2 android { defaultConfig { versionName computeVersionName() versionCode computeVersionCode() } } // Will return "1.2" in this example def computeVersionName() { // Basic <major>.<minor> version name return String.format('%d.%d', versionMajor, versionMinor) } // Will return 120042 for Jenkins build #42 def computeVersionCode() { // Major + minor + Jenkins build number (where available) return (versionMajor * 100000) + (versionMinor * 10000) + Integer.valueOf(System.env.BUILD_NUMBER ?: 0) } 

Así que solo necesito actualizar los dos valores en la parte superior al crear una versión de lanzamiento. Para todos los demás types de compilation, puedo dejar que Gradle / Jenkins configure automáticamente el código de versionCode y luego lo cargue en Google Play .

Esto también significa que, para cualquier versión alfa listda en la Play Store, o al inspeccionar una APK, puedo ver de inmediato de dónde proviene la construcción de Jenkins, y desde allí se compromete el git.