Deployen met Buddy

Tristan Hartman, 28 mei 2020

Ongeveer twee jaar geleden begon onze zoektocht naar een nieuwe, goede deploy tool. Wij, van Van Ons, bleven groeien en professioneler worden. En een van de wensen was om een slimmere en uitgebreidere deploy tool te gaan gebruiken. Uiteindelijk hebben we gekozen voor Buddy.

Niet genoeg features

Voor Buddy gebruikte we Springloops als hoster van onze GIT-repositories. Daar deden we ook simpele (S)FTP deployment mee. We konden met één druk op de knop de laatste GIT-wijzigingen uploaden naar een server, maar daar hield het ook wel bij op.

De features die we misten waren onder andere het automatisch compilen van css- en javascriptassets. In onze WordPress thema’s werken we met meerdere Sass bestanden. En we verdelen javascript in verschillende bestanden voor meer overzicht. Daarnaast gebruiken we externe javascript en css-packages via npm. Vervolgens compilen en minifyen we deze bestanden met packages zoals npm en gulp. De gegenereerde assets moesten we voorheen handmatig uploaden. Springloops bood namelijk geen mogelijkheid dit voor ons te doen.

Ook het legen van de cache na deployment en het installeren van PHP packages via composer was niet mogelijk. Daarmee hadden we een goed beeld van wat onze nieuwe deploy tool wel moest kunnen.

Git hosting en deployment in één

Voorheen hadden we dus al één tool voor GIT-hosting en deployment. En dat wilden we graag zo houden. Des te meer tools, des te meer abonnementskosten. En meer kennis en uitzoekwerk om ze te gebruiken. Hierdoor vielen tools zoals DeployBot (alleen deployment) en GitHub (alleen hosting) al af.

Waarom Buddy?

Uiteindelijk hebben we gekozen voor Buddy. Deze nieuwe software is van dezelfde makers als Springloops. Als vervanger in het leven geroepen. Buddy heeft een fijne UI, anders dan de meeste tools die we bekeken hebben. Maar het belangrijkste en beste van Buddy vinden wij de pipelines.

Pipelines en deployment in Buddy

Een pipeline is een aaneenschakeling van opdrachten die je tijdens het deployen wil uitvoeren. Deze pipelines zijn in Buddy direct gekoppeld aan je GIT repository.

De stappen die wij uitvoeren in een pipeline voor een WordPress thema zijn meestal als volgt:

  1. PHP packages installeren met composer
  2. Javascript, css en vertaalbestanden compilen
  3. Alle GIT wijzigingen en gegenereerde javascript, css en vertaalbestanden uploaden
  4. Overige deploy acties uitvoeren
  5. Cache legen

Buddy geeft je de vrijheid om deze stappen, genaamd ‘actions’, in willekeurige volgorde aan een pipeline toe te voegen. Van SFTP upload, SSH of CloudFlare tot Node.js, Buddy heeft er actions voor.

Zo gebruiken wij voor het compilen van javascript en css de Node.js action. Buddy laadt dan een Docker container met Node.js voorgeïnstalleerd. Ook is de GIT repository daar beschikbaar. Vervolgens kun je binnen die action npm commandos uitvoeren en assets compilen, zonder dat we dat op de live server hoeven te doen. Daarna zorgt de ‘Upload files’ action van Buddy er automatisch voor dat de gegenereerde files geupload worden. Samen met alle wijzigingen uit GIT.

Ook kun je bijvoorbeeld met de SSH action WordPress CLI commando’s uitvoeren. Super handig.

Triggers

Je kunt ervoor kiezen om iedere pipeline te koppelen aan een GIT branch. Zo kun je bijvoorbeeld je live pipeline koppelen aan de master branch en je staging pipeline koppelen aan een staging branch.

Vervolgens kun je er voor kiezen om automatisch te deployen bij iedere nieuwe commit in de aangegeven branch. Of je kiest voor handmatig, waarbij je zelf op een knop moet drukken.

Variabelen

Voor het uitvoeren van pipelines zijn meestal gegevens nodig. Zoals (S)FTP gegevens of een SSH login. Hiervoor heeft Buddy zogenaamde variabelen. Die kun je op repository niveau of op globaal niveau instellen. De gegevens van je development server kun je bijvoorbeeld globaal instellen en hergebruiken in meerdere projecten.

Pipeline configuratie in GIT

Een andere feature van Buddy is dat je pipelines kunt configureren in een yaml file. Deze voeg je toe in de root van je GIT repository (buddy.yaml). Dit is heel handig als het deployment proces voor veel websites hetzelfde is.

Zo hosten wij onze WordPress websites bij Savvii en gebruiken we voor de meeste projecten dezelfde test/development server. En we hebben een door ons zelf ontwikkeld professioneel WordPress thema. Die gebruiken we als basis voor alle WordPress websites die we bouwen. Daar hebben we een Buddy pipeline configuratie bestand aan toegevoegd. Daardoor worden de pipelines automatisch aanmaakt in Buddy. Het enige dat we dan nog hoeven te doen is de eerder genoemde variabelen per project op te geven. Bijvoorbeeld de SFTP gegevens. De rest werkt dan direct.

Conclusie

De uitgebreide pipelines en de fijne UI in combinatie met GIT hosting heeft voor ons de doorslag gegeven om Buddy te gaan gebruiken. En daar zijn we ruim een jaar later nog steeds heel blij mee. Naast WordPress, werkt het ook perfect voor onze Laravel en ReactNative projecten.

Er zijn ook andere tools die soortgelijke functionaliteit bieden, zoals bijvoorbeeld GitLab en tegenwoordig ook Bitbucket.

Reageer