Jekyll in Kombination mit der GitLab-CI und deployment zu Amazon S3

By | 29. Oktober 2016

Da ich mittlerweile irgendwie meine Passion in der „Automatisierung“ gefunden habe (Buzzword Bingo: DevOps) möchte ich mal kurz aufzeigen wie man sehr bequem mit Gitlab und Amazon S3 seine über Jekyll erzeuge Webseite deployen kann (insbesondere zum Testen sehr hilfreich).

Was ist nun aber überhaupt Jekyll? Ein nettes Tool welches dir aus Markdown oder HTML eine statische Seite erzeugt (kann man für diverses nutzen, sogar für einen Blog). Das ganze jetzt hier komplett zu erläutern schenke ich mir, am besten einfach mal selber ansehen wenn du im Begriff bist dich von deinem aufgeblasenen CMS zu verabschieden und wieder „ehrliches“ HTML an deine Besucher auszuliefern: Jekyll

Was ist „Gitlab-CI“: Als armer ehemaliger PHP Entwickler nutze ich als Versionverwaltung mittlerweile „gitlab.com“ hier bekommst du konstelos soviele private GIT repos wie du magst und auch gleich eine CI/CD Pipeline (Jenkins in einfach). Bei Gitlab.com kannst du über eine „.gitlab-ci.yml“ in deinem Projekt das bauen und deployen wunderbar steuern (auch wenn es im Moment „etwas“ langsam ist). Wie das ganze im Detail aussieht: Gitlab-CI .

Was ist Amazon S3?: Ein Dienst in der Amazon Cloud, welcher eigentlich als Storage genutzt wird, aber auch für das hosten von statischen Seiten genutzt werden kann. Kostengünstig und bequem. Einfach einen S3 Bucket anlegen, und die entsprechende Option aktivieren.

aws-s3-static

Wichtig ist hier noch im Anschluss die richtigen Berechtigungen zu setzen, so dass der geneigte Besucher kein 403 bekommt.

s3-bucket-permission

So kommen wir zu dem „nervigen“ Teil, der passenden „gitlab-ci.yml“. Ich setze jetzt mal voraus du hast deine Seite mit Jekyll erstellt und lokal funktioniert alles. Damit wir das ganze jetzt automatisch zu AWS S3 bekommen brauchst du noch:

  • AWS Access Key
  • AWS Secret Access Key
  • AWS Region

Ich habe mir dafür einen eigenen User erstellt, welcher nur Zugriff auf S3 hat.

In dein Projekt – Root packst du jetzt eine „.gitlab-ci.yml“, in dieser wird definiert das zuerst die „Build maschine“ vorbereitet wird und anschließend ein deployment erfolgt.

Für das eigentliche deployment benutze ich ein kleines Ruby GEM was es sehr einfach macht, du musst im Prinzip nur deine AWS Daten über Variablen einstellen, der rest ist magie 😉 Denke wenn du das file siehst wird es schon klar:

So alles sehr oberflächlich geschrieben I KNOW , aber ich denke bzw. bin mir sicher – es wird jemandem helfen, der vergleichbares machen möchte.