Compare commits

...

31 Commits

Author SHA1 Message Date
rzaitov 5da1a6efa0 Update and rename readme.md to readme.txt 2014-06-02 20:11:19 +04:00
rzaitov e532e485cb Rename readme.txt to readme.md 2014-06-02 20:10:40 +04:00
rzaitov c8c2a84ceb Update readme.txt 2014-06-02 20:09:58 +04:00
Rustam Zaitov 9277793568 В обобщенные шаги добавил проставление bandleid 2014-06-02 19:40:01 +04:00
Rustam Zaitov b3f5305208 Реализовал поддержку сборки с разными профилями обеспечения 2014-06-02 15:09:22 +04:00
Rustam Zaitov f7e1e7797e для сборки ios проектов всегда собирается ipa файл 2014-02-21 12:56:47 +04:00
rzaitov 5ab8823237 Update readme.txt 2014-02-21 11:27:25 +03:00
Rustam Zaitov 44a32011b8 исправлена ошибка в названии настройки короткой версии
CFShortBundleVersion заменено на CFBundleShortVersionString
2014-01-17 13:36:07 +04:00
Rustam Zaitov 83abffdf33 убрал имя файла из комманды бэкапа 2014-01-17 13:23:14 +04:00
Rustam Zaitov cad3af5a5f вернул команду восстановления из бэкапа 2014-01-17 13:12:53 +04:00
Rustam Zaitov c412b15416 Merge branch 'master' of github.com:rzaitov/BuildScript 2014-01-17 12:15:51 +04:00
Rustam Zaitov 93a6c5d111 По просьбе Антона в выходнои имени файла номер билда отделяется от номера версии дефисом а не точкой 2014-01-17 12:14:54 +04:00
rzaitov b38b1e351a Update readme.txt 2014-01-16 20:54:46 +03:00
Rustam Zaitov 707c091a8d Убрал дублирование из скриптов 2014-01-16 21:38:43 +04:00
Rustam Zaitov aa5da41bdd Обновил сэмпл настроек 2014-01-16 21:23:20 +04:00
rzaitov e2ee11fe6f Update readme.txt 2014-01-16 20:12:28 +03:00
Maxim Smirnov 78b05e7109 навел порядок с именованием артифактов 2014-01-16 20:45:33 +04:00
Maxim Smirnov 0db2b0aa39 исправил ошибку в задании app файла 2014-01-16 20:17:41 +04:00
Maxim Smirnov 896ffc7af6 Задаем название app файла 2014-01-16 20:03:20 +04:00
Rustam Zaitov 4309cedffb убрал ошибку хардкодинга константы 2014-01-16 19:40:29 +04:00
Rustam Zaitov 3972439ba6 Merge branch 'common-steps' 2013-12-30 17:48:47 +04:00
Rustam Zaitov 68415f6313 исправил путаницу с названием проекта и именем файла проекта 2013-12-30 17:33:34 +04:00
Rustam Zaitov 49158c43ca Добавил пояснение к sln конфигурации андройда 2013-12-30 17:16:02 +04:00
Rustam Zaitov 98af62bec5 Merge branch 'common-steps' 2013-12-30 16:47:41 +04:00
Rustam Zaitov f9912d3fbf добавил инструкцию 2013-12-30 16:47:22 +04:00
Rustam Zaitov 3ddc372634 заменил название переменной project_path на project_name поскольку требуется именно имя файла а не путь к нему 2013-12-30 16:08:34 +04:00
Rustam Zaitov a052b1cfe3 Добавил пример настроек, которые необходимо переопределять в проекте 2013-12-30 14:22:01 +04:00
Rustam Zaitov 5e9c4614e1 Merge branch 'common-steps' 2013-12-30 12:42:42 +04:00
Rustam Zaitov 54ae0b6141 Добавил универсальные шаги сборки реализованные Антоном 2013-12-30 12:41:29 +04:00
rzaitov b772326d82 Merge branch 'BS-52' 2013-11-18 15:51:01 +04:00
rzaitov 24b8dbf834 Добился правильной сборки android проекта 2013-11-18 15:50:20 +04:00
13 changed files with 176 additions and 3 deletions

47
readme.txt Normal file
View File

@ -0,0 +1,47 @@
Добавить символьную ссылку на скрипт сборки. Заменить <builder_path> на абсолютный путь к корню репозитория билд скрипта
sudo ln -s <builder_path>/scripts/TouchinBuild/taskRunner.py /usr/local/bin/tibuild
Чтобы работала система сборки необходимо выполнить формальные шаги:
0. [iOS] Убедиться что в собираемом проекте выбор профиля обеспечения и сертификата производится автоматически.
Так следует сделать чтобы любой разработчик мог собрать проект, на билд сервере будут подставлены необоходимы значения автоматически
1. [iOS, Android] Убедиться что в названии проекта нет пробелов.
2. [iOS, Android] В корне репозитория создать папку scripts
mkdir scripts
3. [iOS] Положить в папку scripts профили обеспечения со следующими названиями
development.mobileprovision
distribution.mobileprovision
4. [iOS, Android] В папке scripts создать файл settings.txt
touch scripts/settings.txt
5. [iOS, Android] Скопировать содержимое примера scripts/common/setting.txt в свой файл settings.txt и переопределить все необходимые настройки
Стоит обратить внимание на комментации
# required эти настройки необходимо задать, иначе ничего не будет работать
# dont change это можно менять если есть четкое осознание того что происходит
6. [iOS, Android] вызвать скрипт, заменив параметры
на сервере. <builder_path> скорее всего это /BuildServer/Scripts
tibuild --settings=scripts/settings.txt build=%build.number% builder_path=<builder_path>
локально. path_to_local_direcotry путь к папке вне репозитория проекта (чтобы ничего не потерлось) или добавить папку в настройку backup_ignore
tibuild --settings=scripts/settings.txt build=777 builder_path=<builder_path> publish_path=<path_to_local_direcotry>
Пояснение значения некоторых настроек:
publish_step_type enum(development|distribution) в зависимости от этого значения будет вызван один из следующих шагов
'ios publish development.txt' копирование файла ipa в папку @publish_path/
'ios publish distribution.txt' - создание zip архива (app файла) и копирование его в папку @publish_path/
Это значение было введено чтобы поддерживать сборку с разными профилями обеспечения.
Типичный кейс. У нас 2 профайла:
development.mobileprovision сборка для наших тестировщиков [publish_step_type=development]
distribution.mobileprovision сборка для апстора [publish_step_type=distribution]
Расширенный кейс. У нас 3 профайла
development.mobileprovision сборка для наших тестировщиков [publish_step_type=development]
customer.mobileprovision сборка для тестировщиков заказчиков [publish_step_type=development]
distribution.mobileprovision сборка для апстора [publish_step_type=distribution]
bundle_id BundleId который будет подставлен в Info.Plist файл. Настройка нужна для поддержки сборки с разными профилями обсеспечеиня. Так например в профиле обеспечения предоставляемом заказчиком будет указан другой BunldeId, те не com.touchin.projectname

View File

@ -9,11 +9,10 @@ inside 'BuildSample/DroidApp/Properties/AndroidManifest.xml' set android:version
inside 'BuildSample/DroidApp/Properties/AndroidManifest.xml' set android:versionName to '1.2.3'
clean 'BuildSample/BuildSample.sln' for '{@sln_config}'
build 'BuildSample/BuildSample.sln' for '{@sln_config}'
sign android 'BuildSample/BuildSample.sln' for '{@sln_config}' project 'DroidApp'
sign android 'BuildSample/BuildSample.sln' for '{@sln_config_build}' project 'DroidApp'
create dirs 'Output/GooglePlay/Artifacts'
copy 'BuildSample/DroidApp/Output/*.apk' to 'Output/GooglePlay/Artifacts'
sh cp BuildSample/DroidApp/Output/*.apk Output/GooglePlay/Artifacts
sh cp -a BuildSample/DroidApp/Output/ Output/GooglePlay/
restore from backup

View File

@ -0,0 +1,2 @@
build '{@sln_path}' for '{@sln_config}'
sign android '{@sln_path}' for '{@sln_config}' project '{@csproj_name}'

View File

@ -0,0 +1,9 @@
inside '{@csproj_dir}/{@csproj_file_name}' set OutputPath to '{@output_path}' for '{@sln_config}|AnyCPU'
inside '{@csproj_dir}/{@csproj_file_name}' set AssemblyName to '{@project_name}' for ''
inside '{@csproj_dir}/Properties/AndroidManifest.xml' set package to '{@package_name}'
inside '{@csproj_dir}/Properties/AndroidManifest.xml' set android:versionName to '{@version}.{@build}'
inside '{@csproj_dir}/Properties/AndroidManifest.xml' set android:versionCode to '{@version_code}'
inside '{@sln_path}' remove '{@remove_project}' project
clean '{@sln_path}' for '{@sln_config}'

View File

@ -0,0 +1 @@
copy '{@csproj_dir}/{@output_path}/{@package_name}-Signed.apk' to '{@publish_path}/{@output_file_name}'

View File

@ -0,0 +1,14 @@
restore from backup
create backup
<include '{@builder_path}/scripts/common/android prepare.txt'>
<include '{@builder_path}/scripts/common/android build.txt'>
#if {@teamcity_build_id}
create dirs '{@publish_path}'
sh echo '{@teamcity_build_id}' > '{@publish_path}/../{@build}.build_id'
<include '{@builder_path}/scripts/common/android publish.txt'>
#endif
restore from backup
delete backup

View File

@ -0,0 +1 @@
build '{@sln_path}' for '{@sln_config}'

View File

@ -0,0 +1,15 @@
install profile 'scripts/{@provisioning_profile}.mobileprovision'
inside '{@csproj_dir}/{@csproj_file_name}' set CodesignKey to '{@provisioning_account}' for '{@sln_config}'
inside '{@csproj_dir}/{@csproj_file_name}' set CodesignProvision to '{@provisioning_uudid}' for '{@sln_config}'
inside '{@csproj_dir}/{@csproj_file_name}' set OutputPath to '{@output_path}' for '{@sln_config}'
inside '{@csproj_dir}/{@csproj_file_name}' set IpaPackageName to '{@output_file_format}' for '{@sln_config}'
inside '{@csproj_dir}/{@csproj_file_name}' set BuildIpa to 'true' for '{@sln_config}'
inside '{@csproj_dir}/{@csproj_file_name}' set AssemblyName to '{@project_name}' for ''
inside '{@csproj_dir}/Info.plist' set CFBundleIdentifier to '{@bundle_id}'
inside '{@csproj_dir}/Info.plist' set CFBundleVersion to '{@version}.{@build}'
inside '{@csproj_dir}/Info.plist' set CFBundleShortVersionString to '{@version}'
inside '{@sln_path}' remove '{@remove_project}' project
clean '{@sln_path}' for '{@sln_config}'

View File

@ -0,0 +1 @@
copy '{@csproj_dir}/{@output_path}/{@output_file_format}.ipa' to '{@publish_path}/{@output_file_name}'

View File

@ -0,0 +1,2 @@
sh rm -f '{@publish_path}/{@output_file_name}'
sh cd '{@csproj_dir}/{@output_path}' && zip -y -r '{@publish_path}/{@output_file_name}' '{@csproj_name}.app'

14
scripts/common/ios.txt Normal file
View File

@ -0,0 +1,14 @@
restore from backup
create backup
<include '{@builder_path}/scripts/common/ios prepare.txt'>
<include '{@builder_path}/scripts/common/ios build.txt'>
#if {@teamcity_build_id}
create dirs '{@publish_path}'
sh echo '{@teamcity_build_id}' > '{@publish_path}/../{@build}.build_id'
<include '{@builder_path}/scripts/common/ios publish {@publish_step_type}.txt'>
#endif
restore from backup
delete backup

View File

@ -0,0 +1,67 @@
# global settings
teamcity_build_id = '0'
# Обновляйте это поле руками, когда выходит новая версия приложения
version = '0.0'
# Будет переопределено teamcity. например так build=%build.number%
build = '0'
build_tool = '/Applications/Xamarin\ Studio.app/Contents/MacOS/mdtool'
project_name = '' # required for build server infastructure
# required!!! обратите внимание на регистр папки builds на некоторых проектах название с большой буквы, а на некоторых с маленькой
publish_path = '/BuildServer/{@project_name}/builds/{@publish_name}'
# добавьте названия папок или файлов которые не надо бэкапить перед сборкой конфигурации
# это может быть папка куда складываются артефакты или служебная папка системы контроля версий
backup_ignore = .git, .gitignore, .DS_Store, backup, Artifacts, scripts, settings.txt, ios.txt
# укажите через запятую конфигурации которые необходимо собрать
configs = 'default_ios, appstore, default_android, googleplay'
# required. Возможно для IOs и Android созданы разные sln файлы, тогда эту настройку
# следует перенести в ios и android конфигурации
sln_path = ''
# dont change
csproj_file_name = '{@csproj_name}.csproj'
# эта настройка нужна для единообразия названий билдов
output_file_format = '{@project_name}-{@version}-{@build}'
# required
ios.csproj_dir = ''
ios.csproj_name = '' # только имя проекта, обычно имя файла без расширения
ios.remove_project = '' #оставить пустым если не надо удалять проекты. Чаще всего указывают проект Android (если он в том же солюшене)
# dont change
ios.sln_config = 'Release|iPhone'
ios.steps = '{@builder_path}/scripts/common/ios.txt'
ios.output_path = 'bin'
ios.publish_name = 'iPhone'
ios.default_ios.provisioning_profile = 'development' # required. Имя файла профиля обеспечения без разширерия (development.mobileprovision)
ios.default_ios.publish_step_type = 'development' # required. Enum (appstore|distribution)
ios.default_ios.bundle_id = '' # required. Обычно это com.touchin.projectname
ios.default_ios.provisioning_account = 'iPhone Developer: Build Server (GZRT3GYURD)' #Билд сервер собирает с помощью разработчика Build Server
ios.default_ios.provisioning_uudid = '' # required. Можно использовать пробел для режима Automatic
ios.default_ios.output_file_name = '{@output_file_format}-Default.ipa'
ios.appstore.provisioning_profile = 'distribution' # required. Имя файла профиля обеспечения без разширерия (distribution.mobileprovision)
ios.appstore.publish_step_type = 'distribution' # required. Enum (appstore|distribution)
ios.appstore.bundle_id = '' # required. Обычно это com.touchin.projectname
ios.appstore.provisioning_account = 'iPhone Distribution' # dont change. На билд сервере всего один distribution сертификат Ltd Touchinstinct он и будет выбран
ios.appstore.provisioning_uudid = '' # required. Можно использовать пробел для режима Automatic
ios.appstore.output_file_name = '{@output_file_format}-AppStore.zip'
# required
android.csproj_dir = ''
android.csproj_name = '' # только имя проекта, обычно имя файла без расширения
android.remove_project = '' #оставить пустым если не надо удалять проекты. Чаще всего указывают проект Android (если он в том же солюшене)
android.output_file_name = '{@output_file_format}-Default.apk'
# dont change
android.sln_config = 'Release' # Нельзя указывать платформу(Release|AnyCPU). Иначе приложение не будет подписано
android.steps = '{@builder_path}/scripts/common/android.txt'
android.output_path = 'bin'
android.publish_name = 'Android'
android.version_code = '{@build}' # Возможно стоит переопределить значения в конкректных конфигурациях
android.default_android.package_name = '' #required
android.googleplay.package_name = '' #required

View File

@ -16,6 +16,7 @@ ios.tf_team_token = 'c5c3cf7a6dae2bea4382dfbd181a2075_Mjc4ODkwMjAxMy0wOS0yOSAxND
# android platform settings
android.sln_config = Release|AnyCPU
android.sln_config_build = Release
android.steps = 'scripts/AndroidSteps.txt'
# config settings