Build- und Deployment-Plan mit Bitbucket Pipelines

Ich erzähle das ja gerne herum: Meinen Bastelkram lege ich in Repositories bei Bitbucket ab. Fast alles was ich so tue und probiere steht unter Versionskontrolle.

Unter anderem liegt dort auch das Theme dieses Blogs, an dem ich ziemlich regelmäßig Dinge ausprobiere und verändere. Das entwickele ich auf meinem eigenen Computer, committe und pushe meine Änderungen in das bei Bitbucket liegende Git-Repository. Dann verbinde ich mich per SSH auf meinen Server bei Uberspace und mache dort ein git pull. Meine Änderungen werden heruntergeladen. Dann sind die neuen Dateien online. So weit, so kompliziert.

Als dann letztens in meinem Postfach die Einladung zum Test von Bitbucket Pipelines vorfand, hatte ich gleich eine Idee in meinem Kopf: Als großer Freund von Automatismen dachte ich natürlich gleich daran, den oben beschriebenen Vorgang zu automatisieren. Gleichzeitig würde ich auch gerne die kompilierten Assets, also die aus dem SCSS generierten CSS-Dateien, das konkattenierte und minifizierte Javascript, die optimierten SVG-Dateien und das SVG-Sprite aus dem Repository löschen. Die werden nur auf dem ausliefernden Server gebraucht, sie müssen nicht unter Versionskontrolle stehen.

Bitbucket Pipelines bietet einem die Möglichkeit in einem Docker-Container anhand einer Konfigurationsdatei verschiedene Aktionen auszuführen. Mit ein bisschen Probiererei kam dann am Ende diese bitbucket-pipelines.yml-Datei heraus:


# barabal-gerstle-theme build and deployment for dertagundich.de

# use node-image to build the theme-assets
image: node:4.6.0

pipelines:
  branches:
    # only build master-branch
    master:
      - step:
          script:
            # install needed tools and build assets
            - npm install
            - node_modules/.bin/gulp build
            # prepare ssh-connection to uberspace
            - mkdir -p ~/.ssh
            - cat my_known_hosts >> ~/.ssh/known_hosts
            - (umask  077 ; echo $MY_SSH_KEY | base64 --decode > ~/.ssh/id_rsa)
            # remove unneccessary files before deployment
            - rm -rf node_modules
            - rm -rf source
            # copy files to uberspace
            - scp -r * username@host.uberspace.de:~/domain.tld/wp-content/themes/theme-autodeploy

Ein paar Anmerkungen, auch wenn eigentlich schon alles in den Kommentaren steht:

Um die zwei Minuten dauert das alles im Schnitt, ich bin mit der Lösung sehr zufrieden. Gerade wenn eine Kleinigkeit am Theme zu machen ist, spare ich mir eine Menge Aufwand. Einfach die Änderung in den Master pushen. Zwei Minuten später ist alles fertig.