2015-05-11 3 views
8

Я использую Android Studio, Gradle, git.Увеличение номера сборки Android в непрерывной интеграции

При каждом нажатии на главную ветку я хочу создать новую версию приложения, загруженную на альфа-канал в Google Play Store. Для этого мне нужно увеличить версию кода приложения для каждой сборки.

Для этого я, кажется, есть несколько вариантов:

  1. Увеличение числа во время Дженкинс сборки и нажмите измененный файл обратно в репозиторий.
    • Мне не нравится идея, что мой сервер сборки делает толкает/фиксирует.
  2. Увеличение количества с помощью git-крючка.
    • Мне нравится идея еще меньше использовать git для изменения файлов. Если я нахожусь в отпуске, кто (в остальной части команды) когда-нибудь найдет это и узнает, что с ним делать?
  3. Имейте файл на другом сервере (к которому сервер сборки может обращаться напрямую) при сохранении текущей версии. Gradle получит к нему доступ, увеличьте его & сохраните его снова.
    • Это кажется «хрупким», но по крайней мере у меня может быть простая задача «увеличитьVersion», которая выполняется только на сервере. И если он ломается (если мы перемещаем серверы или что-то еще), его довольно легко восстановить.

В настоящее время, мне нравится 3 лучших.

У кого-то есть определенный способ сделать это?

+1

Если вы когда-либо захотите перестроить из тега или построить ветку, полезно иметь версию в исходном коде наряду с кодом. –

+0

Спасибо. Я об этом не думал. Я не думаю, что это было бы критично (потому что я хочу пометить каждую версию), но в какой-то момент это наверняка может раздражать. – fancy

ответ

13

Я не использую ничего из вышеперечисленного - как и вы, я не хочу изменять репо для каждой сборки и любых файлов.

Jenkins имеет всегда увеличивающееся значение для каждой сборки, экспонируемое через переменную окружения BUILD_NUMBER.

В Gradle, сгенерировать значение versionCode программно во время сборки, используя значение BUILD_NUMBER, чтобы гарантировать, что versionCode всегда выше, чем в предыдущей сборки.

Отрывок из моих 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) 
} 

Так что мне нужно только обновить два значения в верхней части, делая сборку выпуска. Для всех других типов сборки я могу позволить Gradle/Jenkins автоматически установить versionCode, а затем upload to Google Play.

Это также означает, что для любой альфа-версии, указанной в Play Маркете, или путем проверки APK, я могу сразу увидеть, из чего его построил Дженкинс, и оттуда git совершает.

+0

Итак, когда вы довольны своей альфа-версией (происходящей из ветви dev), вы сливаетесь, чтобы овладеть ветвью, увеличить версию и нажать главную ветвь? Если возможно, я хотел бы избавиться от ручного увеличения даже основных версий. Но ваш «computeVersionCode» - очень хорошая идея для версий версий dev. Может быть, я соглашусь на то, что вы сказали git-крючок, вы не увеличили версию ... (по крайней мере вам не придется ждать, пока дженкинс/загрузка не сработает) – fancy

+0

Нет, я меняю только майор/минор версии для выпуска продукции. Для alphas/betas имя/код версии неважно (хотя я включаю 'BUILD_NUMBER' (или git SHA1) в' versionNameSuffix', поэтому я в конечном итоге получаю «1.2a42», например). Я управляю альфа-бета-версиями через теги git, поэтому я могу создать сборку в любой момент без необходимости слияния с мастером. –

+0

Не загружается ли Google Play при старом/уже использованном коде версии? По крайней мере, в бета-канале я получаю эту ошибку. – fancy

Смежные вопросы