Gitea CI/CD für Arme

Für den Betrieb meiner Webseiten war ich auf der Suche nach einer Möglichkeit direkt beim Einchecken einer neuer Version einen bestimmten Befehl auf dem Gitea Server auszuführen. Gitea bietet dafür die Möglichkeit von Webhooks. Dort werden bei einer Aktion Web Requests abgesendet die in einer grösseren Installation an einen CI/CD Server gehen und dort dafür sorgen das Tests durchgeführt werden oder der Quellcode compiliert werden.

Da mir so eine CI/CD Plattform zu komplex für so eine kleine Aufgabe ist wollte ich eine kleinere schlanke Lösung und bin hier fündig geworden.

vi gitea-webhook.py 

    import web 
    import subprocess
    import json
    import requests
    urls = ('/blogs', 'hooks')
    app = web.application(urls, globals())

    class hooks:
        def POST(self):
            data = web.data().decode(encoding='UTF-8',errors='strict')
            data = json.loads(data)
            print ("New commit to: {}".format(data['repository']['name']))
            subprocess.run(["/root/websites/sync-blog.sh", data['repository']['name']])
            return 'OK'

    if __name__ == '__main__':
        app.run()

python gitea-webhook.py

Jetzt wird ein Webserver gestartet den man in Gitea bei einem Repository als Webhook eintragen kann. Dann wird bei jedem push auf das Repository auf dem Gitea Server das Programm sync-blog.sh mit dem Namen des Repository als Parameter aufgerufen. In meinem Fall wird dort das Repository ausgecheckt und auf einen Webserver mit rsync synchronisiert und mit Jekyll zu meinem Blog verarbeitet.

Gitea