TeamCity: На успешной сборке нажмите на Git Repo
Может ли TeamCity отправить успешные сборки в репозиторий git?
Я не вижу конкретного шага сборки в TeamCity для этого.
Я использую версию 7.1.1 TeamCity
Спасибо хенрик
ОБНОВИТЬ:
Хорошо, спасибо за ваш ответ, я нахожу это немного сложным. Я обнаружил, что могу просто возвращать теги успешных сборок в мой глобальный репозиторий, из которого TeamCity извлекает данные для сборки. Я могу извлечь из него изменения и посмотреть, были ли последние коммиты успешными.
Я был бы рад, если бы TeamCity предоставил простой вариант для такого рода рабочих процессов!
Было бы здорово, если бы каждый разработчик мог просто взять репозиторий, который обновляется только после успешной сборки, или я здесь не прав?
5 ответов
TeamCity может выполнить сценарий оболочки, который впоследствии вызывает git push
(с соответствующими аргументами, например, git push <repository>
подтолкнуть к другому хранилищу). Убедитесь, что git
не требует интерактивной аутентификации для операции push.
Соответствующий пример (развертывание в Heroku с использованием git push
) можно найти здесь: http://blog.carbonfive.com/2010/08/06/deploying-to-heroku-from-teamcity/.
Я наконец сделал это!
Вы должны добавить параметр сборки в свой проект teamcity:
name= env.PATH
value= C:\Program Files (x86)\Git\cmd
а затем вы добавляете новый шаг сборки командной строки с помощью специального скрипта:
call git push "C:\Gruene Git Repos\TeamCityApp" master
слово "звонок" важно!
Спасибо за помощь! Хенрик
Если вы обновитесь до 8 или более новой версии, вы можете просто сделать одну или несколько функций сборки "Автоматическое объединение". Это подтолкнет к удаленному репо. Сначала я тоже не нашел его из-за запутанного именования, но имеет смысл поддерживать много разных VCS с разными именами.
Легкий ответ
Некоторое время TeamCity поддерживает маркировку VCS, это позволяет вашему корневому пользователю VCS (если у него есть разрешения на запись) помечать хэш коммита, который был только что создан с версией, или что-либо еще, о чем TeamCity знает (см. Весь список ссылок на параметры в TeamCity вики).
В сторону
Как указано в другом ответе, функция автоматического слияния, доступная в TeamCity, автоматически выполнит слияние в запрошенную ветку из указанного списка ветвей (с подстановочными знаками), а также будет отслеживать, создавать и объединять их только в случае успеха.
Функциональность автоматического слияния может быть хорошей, но если у вас нет хорошего покрытия тестами, это также может быть опасно, поскольку разработчик может сломать то, что не имеет теста, и это приведет к проблемам в вашем коде в будущем. Один из способов предотвратить это - требовать, чтобы +2 теста создавались / запускались каждый раз при сборке проекта (настраивается в TeamCity). Эти предостережения упоминаются в ранее связанной статье, объявляющей функцию автоматического слияния.
Соответствующее разрешение
Мы столкнулись с похожей проблемой, не связанной напрямую со слиянием, но имеющей требование отодвинуть некоторые изменения из работы за пределы "легких тегов" (по крайней мере для Git), которые добавляет TeamCity, если вы используете VCS Labeling (ужасное имя).
В итоге мы сделали:
- Используя параметр типа "Переменная среды" (видимый для агента сборки, другие типы - нет) и устанавливая "Spec" для создания поля типа "Пароль", которое будет препятствовать отображению введенного текста в конфигурации. Пользовательский интерфейс или вывод журнала заданий.
- Введенные имя пользователя и пароль в качестве параметров в конфигурации работы
- Создал скрипт, который просматривал URL-адрес удаленного git в репозитории "на стороне агента" и добавил новый удаленный с именем пользователя и паролем, встроенными в URL ( http://gituser:gitpassword@githost.com/path/to/repo.git) чтобы перенести изменения в новую ветку.
- Затем мы удаляем пульт в конце сценария, чтобы любой, кто обращается к системе, не мог получить учетные данные. Конечно, учетные данные также достаточно ограничены для доступа только к определенным репозиториям, но всегда следует соблюдать правило наименьших привилегий.
Возможно, мое решение глупо, но просто. Шаги следующие:
Клонируя свою героку из репозитория heroku git, вы создадите папку приложения heroku.
heroku git:clone -a {app-name}
Скопируйте файлы, которые нужно обновить, в heroku
xcopy client "{app-name}/client" /e/i/h/y
xcopy server "{app-name}/server" /e/i/h/y
xcopy imports "{app-name}/imports" /e/i/h/y
мерзавец добавить.
cd {app-name} && git add .
мерзавец совершить
cd {app-name} && git commit --message 'ok'
толчок к героку
cd {app-name} && git push heroku master