2014-09-04 5 views
2

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

В настоящее время сценарий очень прост, но мы хотим, чтобы добавить более сложные вещи, как тестирование, развертывание этапов компиляции и т.д.

Для того, чтобы сделать это, я хотел бы разделить на пост- получить крючок в несколько отдельных файлов. то есть post-receive.deploy, post-receive.compile, post-receive.test и т. д. И один центральный пост-приемный крюк для их последовательного вызова. Таким образом, мы могли бы более легко управлять шагами.

Вопрос: как я могу называть отдельные (суб) крючки из центрального крючка после приема? Я даже не могу заставить их выполнить, и, насколько я понимаю, мне нужно пройти по STDIN к подлогам. Я довольно много n00b, насколько это касается сценариев оболочки.

+0

* Я даже не могу заставить их выполнять [...] * Вы сделали все эти сценарии исполняемыми? – Jubobs

ответ

2

Вы можете иметь свой post-receive крюк быть скрипт-обертка, как следующее:

#!/bin/sh 

log() { printf %s\\n "$*"; } 
warn() { log "WARNING: [email protected]" >&2; } 

mydir=${0%/*} 
add_hook() { 
    case $1 in 
     /*) h=$1;; 
     *) h=${mydir}/$1;; 
    esac 
    [ -x "${h}" ] || { 
     warn "ignoring hook '$1' (not executable)" 
     continue 
    } 
    # XXX ${h} must not contain anything in ${IFS} 
    hooks="${hooks} ${h}" 
} 
run_hooks() { 
    # read input from Git, preserving trailing newlines if any 
    input=$(cat && echo eoi) 
    input=${input%eoi} 

    for h in ${hooks}; do 
     # no need to break the loop if a hook returns error -- the 
     # exit codes are ignored 
     printf %s "${input}" | "${h}" "[email protected]" 
    done 
} 

add_hook git_multimail.py 
add_hook some-other-post-receive-hook 
add_hook yet-another-post-receive-hook 

run_hooks "[email protected]" 

С этой оберткой вы объявляете любые крючки вы хотите запустить с помощью функции add_hook. Когда вызывается функция run_hooks, обертка считывает входной сигнал от Git и сохраняет его в переменной, чтобы он мог воспроизводить ввод для каждого объявленного крючка.

+0

Работает отлично! – Martijn