2016-01-08 2 views
0

Наша группа делает совместную разработку, и мы недавно настроили TeamCity для запуска регрессионных тестов при нажатии на удаленное репо. В идеале наши разработчики теперь будут использовать push Gerrit, так что push может быть заблокирован TeamCity. Я ожидаю, что не все разработчики будут продвигаться через Gerrit, и решит все еще выполнить «git push» и обойти контрольные ворота.Git hook pre-push-force a Gerrit push

Я немного посмотрел на git pre-push hook ... Я вижу, что могу заблокировать push, но могу ли я отправить новую команду, которая будет запускать нажатие Gerrit?

Благодаря

ответ

0

Ответ на этот вопрос here гласит, что вы, вероятно, следует использовать предварительно совершить крюк, так что неудачные испытания даже не совершал.

Вы можете добавить this к предварительно зафиксированный файл:

#!/bin/bash 
printf "Temporarily committing results... \n" 
git commit "[email protected]" 
printf "Testing using Gerrit... \n" 
### ({Command to test using Gerrit goes here} && printf "Success! Commit saved! \n") || 
    (printf "Tests failed, undoing commit \n" && git reset HEAD^) 

Кроме того, вы должны быть в состоянии просто добавить команду для запуска Геррита до конца .git/pre-commit.

Обратите внимание, что крючки не предотвращают всех бедствий; кто-то работает git commit с опцией --no-verify может иметь, что совершить побег тестирования!

+0

Я не уверен, что хочу контролировать на этапе фиксации. Возможно, кто-то может совершить фиксацию, но не будет готов толкать, верно? У меня уже есть TeamCity, который запускается, чтобы запускаться на стадии нажатия и запускать нажатие Gerrit. Вот почему я хочу перехватить попытку идти регулярным «git push» и перенаправить команду на gerrit push. – tennis

+0

@tennis Конечно, вы можете сделать фиксацию, которая еще не будет нажата, но все, что вы делаете, это тестирование, чтобы проверить, является ли коммит хорошим. В конце концов, почему вы хотите совершить что-то, что не работает? Таким образом, не имеет значения, планируете ли вы сейчас или позже - все коммиты прошли тестирование. –

+0

Правильно - вот почему у меня есть регрессионное тестирование, настроенное для запуска, когда кто-то делает нажатие Gerrit. Он приостанавливает процесс нажатия, чтобы запустить регрессию, и возвращает пропуск/сбой. Если тестирование не удалось, то нажатие блокируется, и разработчик уведомляется. Я сейчас рассматриваю это, делая предварительный пуск, который просто не позволяет нажать, и напоминает разработчику, что вместо этого им нужно запустить команду Gerrit push. – tennis

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