Automatischer Deploy von Pelican mit Git

28. April 2012. Tagged uberspace, gitlab, tools, pelican, website, git.

Wo ich mich sowieso schon mit Gitlab rumgeschlagen habe, dachte ich, einfach mal weitermachen. Mich hat es schon länger gestört, dass ich meinen Blog lokal von Markdown zu HTML umwandeln und dann hochladen muss. Also habe ich ein wenig gestöbert und einen Blogpost gefunden, der ziemlich genau das macht, was ich wollte.

Ich ich habe mich also in mein frisch installiertes Gitlab eingeloggt, ein neues Projekt angelegt, aus meinem Blog ein Git-Repo gemacht und es gepusht.

Ein Screenshot von dem Blog-Repo in meinem Gitlab

Jetzt taucht es zwar im Gitlab auf, aber das alleine nutzt ja leider noch nicht viel. Also schnell Pelican auf meinem Uberspace installiert:

1
2
3
4
git clone https://github.com/ametaireau/pelican.git
cd pelican
python2.7 setup.py build
python2.7 setup.py install

Und den post-receive-hook angepasst. Meine Repos liegen in ~/repositoriers. Da mein Repo blog heißt, musste ich also in ~/repositories/blog.git/hooks um dort die Datei post-receive zu editieren. Ich habe einfach unter dem Gitlab-Zeug folgendes eingefügt:

1
2
3
4
5
6
7
8
9
10
11
GIT_REPO=$HOME/repositories/blog.git
TMP_GIT_CLONE=$HOME/tmp
PUBLIC_WWW=$HOME/hosts/www.julo.ch

mkdir -p $TMP_GIT_CLONE
git clone $GIT_REPO $TMP_GIT_CLONE
$HOME/bin/pelican $TMP_GIT_CLONE/content --settings $TMP_GIT_CLONE/settings.py --theme-path $TMP_GIT_CLONE/theme --output $PUBLIC_WWW
rm -rf $TMP_GIT_CLONE

find $PUBLIC_WWW -type f -print0 | xargs -0 chmod 665
find $PUBLIC_WWW -type d -print0 | xargs -0 chmod 775

Das funktioniert ganz wunderbar, weil ich mein Repo passend organisiert habe. In meinem Repo sind die Inhalte in content, die settings.py im root und das Theme ist in theme. Auch die Pfade müsst ihr natürlich anpassen, damit alles klappt. ;)

Der Vollständigkeit halber hänge ich hier noch meine settings.py an:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#encoding: utf-8 

AUTHOR = 'Alexander Jung-Loddenkemper'
SITENAME = 'julo.ch'
SITESUBTITLE = 'it\'s mine.'
SITEURL = 'http://www.julo.ch'
RELATIVE_URLS = False
TIMEZONE = 'Europe/Zurich'
DEFAULT_PAGINATION = 5 

ARTICLE_DIR = ('posts/')
ARTICLE_URL = ('{slug}/')
ARTICLE_SAVE_AS = ('{slug}.html')
PAGE_URL = ('{slug}/') 
PAGE_SAVE_AS = ('{slug}.html')
AUTHOR_URL = ('author/{name}/')
TAG_URL = ('tag/{name}/')
#CLEAN_URLS=True
DELETE_OUTPUT_DIRECTORY=True

MENUITEMS = ( \
				('RSS Feed', '/rss.xml'), \
				('Kontakt', 'mailto:alexander@julo.ch') \
			)

GOOGLE_ANALYTICS='UA-28190962-1'

DISQUS_SITENAME = 'julo'

FEED_RSS= 'rss.xml'

REVERSE_ARCHIVE_ORDER = True

FILES_TO_COPY = (('htaccess', '.htaccess'),)

Wenn ihr alles derartig eingerichtet habt, müsst ihr nur noch etwas committen und pushen und alles funktioniert wunderbar! Ich persönlich mache das mit der GitHub-App und auch so klappt es super. :-)