Git main repository update только если все тесты проходят, как это сделать?


Я пытаюсь создать git-крюк для обновления в главном репозитории git. Я хочу предотвратить толчки, которые нарушают любые тесты. Как получить в голом репозитории код проекта, который будет после обновления запускать тесты для него?

P.S.: Можно, конечно, использовать крюк pre-commit вместо обновления, в этом случае крюк должен быть на компьютерах коммитеров, но я считаю, что это должен быть способ сделать проверку на сервере.

2 3

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-файл).

Используйте такой подход: отключите подталкивание разработчиков к основному РЕПО. Вместо этого, заставить людей, чтобы подтолкнуть к РЕПО строить. Укажите CI-сервер на это РЕПО сборки. Если сборка завершается успешно, пусть этот сервер сборки перейдет к основному РЕПО.