Code: Alles auswählen
#!/usr/bin/env python3
import os
import signal
import sys
import subprocess
from time import sleep
# Read STDIN (Format: "from_commit to_commit branch_name")
(old, new, branch) = sys.stdin.read().split()
# Only deploy if master branch was pushed
if branch == 'refs/heads/master':
tunnel = subprocess.Popen(
'ssh -R 8888:localhost:22 example.org', stdout=subprocess.PIPE,
shell=True, preexec_fn=os.setsid)
while not tunnel.pid:
sleep(1)
subprocess.call([
"ssh", "example.org", "git",
"--git-dir=/home/user/git/project.git",
"--work-tree=/var/www/project/",
"pull", "origin", "+refs/heads/master:refs/heads/master"])
os.killpg(os.getpgid(tunnel.pid), signal.SIGTERM)
Schritte hierzu:
Vom System, auf dem das git Repo verwaltet wird, aus ein SSH Tunnel aufbauen:
Code: Alles auswählen
ssh -R 8888:localhost:22 example.org
In einem zweiten Terminal noch eine SSH Verbindung zum Server aufbauen und dort das Repo klonen:
Code: Alles auswählen
git clone ssh://user@localhost:8888/user/project.git -git-dir=/home/user/git/project.git --work-tree=/var/www/project/
Wenn jetzt lokal git Pushs auf den Master gemacht werden, werden sie automatisch Online abgeglichen.