Перейти к содержимому

Использование TeamCity для сборки Android приложений на Gradle

Дисклеймер: Этот пост был написан для блога GSPD

Введение

Мы разработчики. Разработчики любят проектировать приложения, писать код, а не заниматься рутиной. Одна из таких рутинных задач — это сборка подписанного apk-файла для тестировщиков, чтобы они могли проверить качество приложения перед выпуском новой версии клиентам. В отчаянные времена, когда приближается дедлайн, приходится делать это снова и снова после каждого небольшого исправления. Именно поэтому люди изобрели Continuous Integration. Мы долго не думали при выборе CI-инструмента. Мы все любим JetBrains, у Android-разработчиков есть прекрасная Android Studio, у iOS-разработчиков есть AppCode, мы все используем YouTrack в качестве трекера задач, поэтому TeamCity — наш выбор благодаря интеграции с YouTrack из коробки.

Установка TeamCity

Прежде всего, вам нужен сервер, на котором будет установлен TeamCity. Мы используем виртуальную машину DigitalOcean в качестве временного решения из-за хипстерства цены и простоты использования. Ubuntu 14.04 / 64 bit — это именно то, что нам нужно. Теперь подключаемся к созданной виртуальной машине и начинаем её настройку. Давайте установим TeamCity в домашнюю директорию пользователя.

cd ~

TeamCity требует наличия Java на машине, поэтому:

sudo apt-get update
sudo apt-get install openjdk-7-jdk`

После установки нужно добавить JDK в переменную окружения PATH

nano /etc/environment

И добавить эту строку:

JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64"

Ctrl+X / Enter чтобы сохранить и выйти из nano.

Затем нужно скачать TeamCity (получить url последней версии с сайта JetBrains) и распаковать его

sudo wget http://download-cf.jetbrains.com/teamcity/TeamCity-9.0.4.tar.gz
sudo tar xfz TeamCity-9.0.4.tar.gz

Теперь переходим в распакованную папку TeamCity

cd TeamCity
bin/runAll.sh

Больше информации об установке и настройке TeamCity можно найти на странице confluence JetBrains

Это довольно просто понять. Сначала создаёте аккаунт администратора, а затем нужно подключить build agent. Build agent-ы могут быть установлены отдельно, даже на удалённой машине, и затем подключены к TeamCity. Здесь нам это не нужно, давайте используем дефолтный build agent на этой системе, runAll должен был его запустить.

Android

Если вы хотите собирать Android-приложения, вам нужно установить Android SDK. Большинство из нас привыкли скачивать архив SDK через браузер, а затем настраивать и получать обновления через GUI Android SDK Manager, но здесь мы должны представить, что мы хакеры, и сделать это из консоли.

Скачиваем Android SDK (последнюю версию SDK можно найти на d.android.com):

wget https://dl.google.com/android/android-sdk_r24.2-linux.tgz

Распаковываем

sudo tar -xfz android-sdk_r24.2-linux.tgz

Заходим внутрь

cd android-sdk-linux

Давайте скачаем все версии Android и build tools

tools/android update sdk

После установки нужно добавить директорию Android SDK в параметры PATH системы

nano ~/.bashrc

И добавить эти две строки в начало файла

export PATH=${PATH}:~/android-sdk-linux/tools
export PATH=${PATH}:~/android-sdk-linux/platform-tools

Настройка проекта в TeamCity

Переходим в Administration Затем можно выбрать, как создать проект. Самый простой способ — создать проект из URL (мы используем git-репозиторий Bitbucket, поэтому очень легко скопировать git url из Bitbucket и создать проект из него)

Создание проекта

После создания можно зайти внутрь проекта и нажать кнопку "Create build configuration"

Добавление конфигурации сборки

В General Settings нужно указать путь к папке, где будет создан apk. По умолчанию это выглядит так:

app/build/outputs/apk/app-release.apk

Настройка путей артефактов

Затем переходим в Build steps и нажимаем кнопку "Add build step" (у меня уже есть один на скриншоте)

Добавление шага сборки в конфигурацию

И конфигурация шага сборки должна выглядеть как на следующем скриншоте

Шаг сборки Gradle

Теперь можем перейти в меню Triggers и добавить новый VCS Trigger, чтобы запускать сборку при обнаружении нового коммита в VCS.

VCS Trigger

Обновление Android-приложения

Вам нужно создать signing keystore обычным способом и добавить его в папку проекта Затем добавить этот код в файл build.gradle, чтобы Gradle знал, как подписывать ваш APK файл

android{
    ...
    signingConfigs {
        release {
            storeFile file("FILENAME.keystore.jks")
            storePassword "YOUR_KEYSTORE_PASSWORD"
            keyAlias "YOUR_KEY_ALIAS"
            keyPassword "YOUR_KEY_PASSWORD"
        }
    }
    ...
     buildTypes {
        release {
            ...
            signingConfig signingConfigs.release
        }
    }
}

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

Наслаждайтесь

Ну вот, теперь можно нажать кнопку "Run" в списке проектов, чтобы извлечь проект из репозитория и собрать его. Ваш APK файл теперь можно скачать из TeamCity, вы увидите ссылку "Artifacts" в списке проектов со стрелкой, которая открывает выпадающее меню со всеми apk в проекте. app-release.apk в нашем случае. Благодаря VCS trigger ваш apk будет собираться при каждом изменении, отправленном в репозиторий.