Deployment

Hier wordt er wat meer uitleg gegeven over hoe je je project kan deployen met behulp van verschillende deployment tools.

Filezilla

FileZilla is een opensource-FTP-programma voor Windows, Mac, Linux en FreeBSD. Met FileZilla is het mogelijk over meerdere verbindingen bestanden naar een FTP-server te sturen en op te halen, waardoor men sneller bestanden kan uploaden en/of downloaden. FileZilla biedt de mogelijkheid tot een veilige verbinding, zo is er ondersteuning voor SFTP over SSH en FTP over SSL/TLS.

Als je een App en Appcomponent hebt aangemaakt in het controlepaneel kan je je files overzetten naar je app met behulp van FileZilla. Hiervoor heb je een aantal gegevens nodig, namelijk:

De hostname van de server waar je applicatie op staat, je gebruikersnaam en je wachtwoord. Je gebruikersnaam en wachtwoord kan je terugvinden in het controlepaneel bij je Appcomponents:

  • Bij Host vul je sftp:// gevolgd door de hostnaam van je server in.
  • Bij Username vul je je gebruikersnaam in welke begint met de letters vd.
  • Bij Password vul je het wachtwoord in dat je hebt opgegeven bij het aanmaken van je php-appcomponent.
  • Bij Port vul je 22 in, dit is de standaard sftp poort.

Tenslotte klik je op Quickconnect om een verbinding te starten met je server. Aan de rechterkant zie je dan de mappenstructuur waar je bestanden kan up- en downloaden.

connect

Magallanes

Git repo

Deployment keys

Om te kunnen deployen heeft Jenkins toegang nodig tot de repo waar je je code beheert. Je kan dit doen door de ssh key van Jenkins toe te voegen aan de deployment keys waardoor je Jenkins leesrechten tot de repo toekent. Hieronder zie je waar je dit kan doen bij Bitbucket:

BitbucketDeployKey

en Github:

githubDeployKey

De builds kunnen automatisch gestart worden na elke commit. Hiervoor is er een post-receive hook nodig op de git repo. Je kan dit ook weer instellen bij de instellingen van de repository.

Als je de post-receive hook toevoegt, kies je voor een GET request en stel je HTTP authenticatie in met de user login van Jenkins. De webhook url kan je vinden in de configuratie van je deploy job, daar stel je ook de token in.

githubDeployKey

Mage

Voor het deployen van een website kan je Magallanes gebruiken. Voor elk project moet dit ingesteld worden in de repo van de applicatie. Om dit proces wat te vergemakkelijken en versnellen hebben we onze eigen Magallanes voorzien die je kan gebruiken.

Clone de repository en installeer het.

1
2
3
 git clone git@github.com:level27/magallanes.git
 cd magallanes
 composer install

De parameters.yml wordt hier aangemaakt. Het is niet van groot belang wat je hier invult.

Nu Magallanes is geïnstalleerd, kan een project geïnitialiseerd worden met behulp van Mage. Ga naar de root van je project en voer volgende commando’s uit. Pas het pad aan naargelang de plaats van je eigen Magallanes.

1
php /Users/[user]/dev/magallanes/app/console mage:init --name="ApplicationName" --email="user@level27.be"
1
php /Users/[user]/dev/magallanes/app/console mage:initenv --name="dev" --hosts=hostname.level27.be --user=vd1337

Het eerste commando kan je slechts eenmalig uitvoeren, dat maakt de .mage directory aan in je project. Het andere commando kan je zo vaak uitvoeren als je wil.

Het resultaat is een .mage directory met configuraties en taken. De configuratie kan aangepast worden naargelang het project.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
 deployment:
     user: vd1111
     from: ./
     to: /var/web/vd1111/deploy
     excludes:
         - '.mage/*'
         - '.git/*'
     strategy: rsync
 releases:
     enabled: true
     max: 10
     symlink: current
     directory: releases
 hosts:
     - hostname.level27.be
 tasks:
     pre-deploy: null
     on-deploy: null
     post-release: null
     post-deploy: null

De eerste sectie gaat over waar er deployed moet worden, naar welke map en wat Mage niet moet meenemen. Verderop wordt er aangegeven hoeveel releases er bijgehouden moeten worden op de server. Tenslotte zijn er de taken die uitgevoerd worden. Je hebt hier de mogelijkheid om uit verschillende momenten te kiezen in het deploy proces.

Jenkins

Jenkins helpt met het automatiseren van het niet-menselijke gedeelte van het software-development process, met de continuous integration en met het vergemakkelijken van de technische aspecten van continuous delivery.

Het is een server-based systeem dat versie controle zoals CVS en Git ondersteunt en gewone shell scripten en windows batch commando’s can uitvoeren. Jenkins is uitgebracht onder de MIT License waardoor Jenkins dus gratis te gebruiken is.

Builds op verschillende manieren automatisch gestart worden:

  • Door een commit te doen met een versie controle systeem;
  • Door een build in te plannen op bepaalde tijdstippen;
  • Instellen dat het project build na het uitvoeren van een andere build.

Instellen

Als je een nieuw project aanmaakt zijn er een aantal parameters die je moet instellen. Deze gaan we eventjes overlopen:

Onder SCM (Broncodebeheer) zal je de URL naar je repository moeten opgeven. Deze kan je meestal vinden door op de knop Clone te klikken in je VCM tool. Als tweede parameter moet je hier de credentials moeten opgeven die je in je VCM tool hebt opgegeven als Access key.

Vervolgens moet je opgeven van welke Git branch Jenkins een clone zal maken.

BitbucketDeployKey

Onder bouwactiveerders kan je aanvinken wanneer de build moet starten. In dit geval zal de build uitgevoerd worden als er een commit gedaan wordt.

Ten slotte moeten er twee shell scriptjes uitgevoerd worden:

1
2
3
4
5
6
7
8
cd .mage
if [ ! -L tasks ]; then
 ln -s /var/lib/jenkins/level27/magallanes/tasks;
fi

if [ ! -d logs ]; then
 mkdir logs
fi

Het volgende commando zal het effectieve builden in gang zetten:

1
php /var/lib/jenkins/level27/magallanes/vendor/andres-montanez/magallanes/bin/mage deploy to:dev

Het woordje “dev” is de omgeving waar je naar wil deployen, vul hier de naam in die je eerder bij het initenv commando gebruikt hebt.

Server

Tenslotte moet de server configuratie in nog in orde gebracht worden. ga hiervoor naar het het CP4 controlepaneel.

Maak hier een nieuwe applicatie met een nieuwe php appcomponent aan met een pad naar deploy/current/html. De current map bevat een symlink naar de laatste release in de releases folder.

Vergeet niet de ssh-key van jenkins toe-te-voegen aan je appcomponent zodat jenkins ernaar kan deployen over ssh. Klik hier om te zien hoe je dit doet.