Git main repository update только если все тесты проходят, как это сделать?
Я пытаюсь создать git-крюк для обновления в главном репозитории git. Я хочу предотвратить толчки, которые нарушают любые тесты. Как получить в голом репозитории код проекта, который будет после обновления запускать тесты для него?
P.S.: Можно, конечно, использовать крюк pre-commit вместо обновления, в этом случае крюк должен быть на компьютерах коммитеров, но я считаю, что это должен быть способ сделать проверку на сервере.
2 ответа:
Сервер CI может сделать это за вас, но простой скрипт также может сделать трюк. Дэвид Гагеот представил очень простое решение для частного строительства с git в своем блоге некоторое время назад (идея состоит в том, чтобы строить с тестами на вторичном локальном РЕПО, прежде чем нажимать на удаленный сервер):
Http://blog.javabien.net/tag/git/page/2/
К сожалению, он написан на французском языке, но вы все еще можете посмотреть на сценарий, который используется для этого:
#!/bin/bash if [ 0 -eq `git remote -v | grep -c push` ]; then REMOTE_REPO=`git remote -v | sed 's/origin//'` else REMOTE_REPO=`git remote -v | grep "(push)" | sed 's/origin//' | sed 's/(push)//'` fi if [ ! -z "$1" ]; then git add . git commit -a -m "$1" fi git pull if [ ! -d ".privatebuild" ]; then git clone . .privatebuild fi cd .privatebuild git clean -df git pull if [ -e "pom.xml" ]; then mvn clean install if [ $? -eq 0 ]; then echo "Publishing to: $REMOTE_REPO" git push $REMOTE_REPO master else echo "Unable to build" exit $? fi fi
Редактировать для пользователи не java
В приведенном выше сценарии замените
mvn clean install
командной строкой, позволяющей построить проект (и удалите оператор if, который проверяет существование maven pom.XML-файл).