Github vs Beanstalk, the battle.
Tot enkele weken geleden hadden we binnen Inventis een eigen Git-server die moest instaan voor al het versiebeheer van onze projecten. Echter hebben we ervoor gekozen om over te schakelen naar een Software as a Service (SaaS) oplossing. In deze blogpost geven we even onze bevindingen mee van Github en Beanstalk die we enkele weken getest hebben.

Een eigen interne gitserver heeft het grootste voordeel dat je zelf de controle hebt over je volledige server. Er is niemand die je limieten of beperkingen kan opleggen. Echter ben je dan ook verantwoordelijk voor de back-ups, het onderhoud en de beveiliging van je server. En wat doe je wanneer je server ineens enkele dagen offline is? Om deze redenen heeft Inventis gekozen voor een online SaaS oplossing. Je hebt tal van spelers op de markt, maar de grootsten leken ons vooral Github en Beanstalk.
Om de keuze te kunnen maken tussen beide systemen hebben we hen aan een grondige test onderworpen. Enkele developers hebben een paar weken op Github gewerkt, andere op Beanstalk. Na enkele weken hebben we gewisseld van dienst zodat iedereen beide systemen kon vergelijken.
Beanstalk
Beanstalk biedt zowel Git als SVN versiebeheer aan. Je kan enkel private repositories aanmaken met het oog op ontwikkeling en deployment. Ze hebben dan ook een volledig deployment systeem over (S)FTP geïntegreerd in hun diensten. Echter hebben we gemerkt dat het deployen niet altijd vlekkeloos en snel verloopt. Helaas als het mis gaat, gaat het ook grondig mis. Je heb geen roll-back systeem om snel terug te schakelen naar de vorige versie van je website. Wie creatief is, kan hier wel om heen werken, maar onze keuze gaat toch uit naar een andere, meer stabiele en betrouwbare deployment oplossing.
Het grote pluspunt van Beanstalk is dan wel hun rechtensysteem. Je kan verschillende gebruikers aanmaken en deze meteen de verschillende rechten toekennen over verschillende repositories.
Beanstalk maakt bij een gratis account dagelijks backups, een betaalde gebruiker krijgt elke 5 minuten een back-up van zijn data. Wie zelf zijn back-ups nog eens wil bijhouden, kan dat ook via de ingebouwde Amazon S3 oplossing.
Github
Github biedt naast versiebeheer nog een reeks van andere diensten aan die voor je project een meerwaarde kunnen betekenen. Zo kan je voor elke repository een wiki en issue tracker opzetten. Deze extra diensten zijn niet superuitgebreid, maar kunnen al snel een meerwaarde betekenen voor kleinere projecten. Je hebt hiernaast ook de keuze of je repository private of public kan zijn, het grote voordeel van public repositories is dat ze gratis zijn en je er ongelimiteerd mag aanmaken.
Het rechtensysteem is vrij complex opgebouwd. Je hebt een organisation waarin al je repositories zitten. Hierbinnen heb je teams met daaronder je gebruikers. Iedereen die je toegang wil geven tot je repository moet een eigen Github account aanmaken. Je kan geen uitnodiging sturen over e-mail, dus moet je de persoon er even op wijzen een account aan te maken om vervolgens de gebruikersnaam door te geven aan de beheerder van je organisation. Wanneer je beschikt over de gebruiker zijn username, kan je deze vrij gemakkelijk toevoegen aan een team binnen je organisation. Echter een team rechten geven tot je repositorie is iets omslachtiger. Je kan namelijk een team geen toegang geven tot al je repositories in één keer. Je moet dan telkens de repository openen, naar rechten gaan, team toevoegen en dit zo voor elke repository. Als je meer dan 50 repositories hebt, is dit een werkje van lange adem.
Pull requests, iets dat je enkel bij Github tegen komt, kunnen de controle over je project een stuk aangenamer maken. Zo kan je bijvoorbeeld een stagiair of freelancer aanpassingen laten doen aan je project, maar alvorens hun code geïntegreerd wordt in jouw project, kan je alle commits even nakijken en kiezen welke hiervan je wil laat doorvoeren in je project.
Wat hebben ze gemeen
Beide diensten bieden een zeer goede API aan, waar je zelf wat mee aan de slag kan gaan om je versiebeheer volledig te integreren in je eigen project-management software. Standaard bieden beide diensten al integraties met Basecamp, Harvest, Twitter,... aan.
Onze keuze gaat naar...
Dat onze keuze ging tussen Beanstalk en Github, was vooral omdat Beanstalk interessant leek met hun deployment verhaal. Echter deed beanstalk niet altijd wat het moest doen en was Beanstalk voor ons enkel een hosting voor ons versiebeheer geworden. We hebben dan ook gekozen voor Github omwille van hun huidige extra features, hun maandelijkse toevoegingen en het community gevoel.
Uiteraard vergeleken we enkel de features die voor ons van belang zijn, mocht je een andere ervaring hebben met één van beide services mag je dit zeker laten weten in de reacties hieronder.
5 Reacties op deze blogpost:
Ik vraag me toch af welke problemen jullie ondervinden met de Deployments van Beanstalk. Wij gebruiken dit nu reeds een jaar zonder problemen.
Welke oplossing hebben jullie gebruikt voor deployments ism GitHub?
Waarom is BitBucket niet geëvalueerd?
Lijkt me een waardig alternatief voor Github: Ook gratis, goede documentatie , wiki, mini issue-tracker, en zowel ondersteuning voor Mercurial als Git.
@ Filipvds
Bij de deployments bij Beanstalk leken voor ons gewoonweg iets te traag te gaan, maar onze grootste zorg is dat je geen roll-back kan doen. Wanneer je deployment dan mis loopt zal je website offline zijn en kan je manueel terug online gaan zetten.
Momenteel zijn we nog druk bezig met onze nieuwe deployment-strategie uit te tekenen. Binnenkort zal hier zeker en vast nog wel een nieuwe blogpost over verschijnen.
@Timmy
Er bestaan naast Beanstalk en Github nog tal van andere diensten die Git-hosting aanbieden. Echter hebben we bij deze vergelijking de keuze gemaakt tussen de zowat meest populaire diensten die voor ons ook de features hadden die we het meest gingen gebruiken.
Hoe gaan jullie om met de limiet op het aantal private repositories? Gebruiken jullie Github enkel voor de X meest recente projecten? Of enkel voor de projecten waar continue met meerdere developers tegelijk aan gewerkt wordt? Of nog een andere strategie?
@Kristof
Het is dus zo dat we zowat enkel onze 50 meeste recente projecten op GitHub plaatsen en de overige projecten staan veilig gearchiveerd op een externe opslag. Indien er dan een update moet gebeuren aan een ouder project kan je deze snel pushen naar GitHub en ben je weer vertrokken.