Jekyll Pipeline mit Github Actions
29 Sep 2021Seit einer ganzen Weile läuft dieser Blog mit Jekylls und ist mit git versioniert. Immer wenn ich einen neuen Post veröffentlichen möchte, muss ich
bundle exec jekyll build
ausführen und dann mit rsync
die neuen Dateien auf meinen host kopieren. Dafür habe ich mir ursprünglich mal ein kleines Rakefile
geschrieben um das einfacher zu machen.
Das Problem an der Sache ist dass ich das eigentlich nur auf meinem Mac machen kann und auch immer manuell starten muss. Früher™️ hatte ich meine eigene gitlab installation laufen und damit auch mein eigenes CI/CD. Der Aufwand die Installation zu pflegen war mir aber zu hoch und so bin ich nun doch bei einem privaten Github Repository gelandet. Da gibt es ja Github Actions die eine rudimentäre build-pipeline ermöglichen und das nutze ich nun um meinen blog einfacher zu aktualisieren.
Im wesentlichen funktioniert das genau wie lokal:
- ich baue die website mit jekyll
- ich kopiere die dateien mit rsync auf meinen host
nur passiert das jetzt immer, wenn ich einen neuen commit in einem bestimmten branch pushe. Das kann ich von fast überall - sogar meinem Telefon.
Mal sehen ob ich damit jetzt öfter was poste oder nicht.
Das Github Action Format ist relativ simple und leicht anpassbar: Man legt sich ein yaml-file in .github/workflows/jekyll-build.yaml
name: Build and deploy Jekyll site
on:
push:
branches:
- production
jobs:
jekyll:
name: Build and deploy Jekyll site
runs-on: ubuntu-latest
steps:
- name: Install ImageMagick
run: |
sudo apt-get update
sudo apt-get install imagemagick libmagickwand-dev
- name: Install ruby 3
run: |
sudo apt install ruby-full
ruby --version
- name: add gem bin to env
run: |
echo "/home/runner/.gem/ruby/2.7.0/bin" >> $GITHUB_PATH
- name: debug PATH
run: |
echo "$PATH"
- name: Install bundler
run: |
gem install bundler --user-install
- name: Install Rake
run: |
gem install rake --user-install
- name: Checkout
uses: actions/checkout@v2
- name: Install GemFile
run: |
bundle install
- name: Build Page
run: |
rake build
- name: Deploy to host
uses: up9cloud/action-rsync@v1.1
env:
HOST: blog.kanedo.net
USER: user
KEY: $
TARGET: virtual/blog.kanedo.net/
VERBOSE: true
ARGS: -rtzh --delete
SSH_ARGS: '-p 22 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
SOURCE: ./_site/
Der letzte Schritt, rsync, ist eine externe action vom marketplace aber sonst sind alles einfache bash commands die im ubuntu image laufen. Nett ist, dass man mittels secrets einen private SSH Key hinterlegen kann, der dann von rsync benutzt wird. Cool wäre es jetzt noch, dem rsync SSH Key nur Zugriff auf das eine Verzeichniss zu geben… wenn jemand ne Idee hat?