Дисклеймер: Этот пост был написан для блога 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" (у меня уже есть один на скриншоте)

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

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

Обновление 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 будет собираться при каждом изменении, отправленном в репозиторий.