Automatischer Deploy von Pelican mit 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.
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. :-)