Shopware 6 Quickstart
In Bitbucket een Shopware 6 CI/CD pipeline opzetten met behulp van de Hipex Deploy image
Introductie
Dit artikel helpt je bij het opzetten van een continuous integration en delivery/deployment pipeline voor Shopware 6 met behulp van Bitbucket. Als voorbeeld richten we ons hierbij enkel op een staging omgeving.
Benodigdheden
Zorg ervoor dat de volgende voorwaarden correct zijn ingesteld voordat je start:
- Een Hipex hosting omgeving
- Een bitbucket account
- Een Pack (Hipex hosting Paneel) developer account. Dit geeft je de rechten om SSH Key beheer te beheren.
Maak een Deployment SSH key aan
Ter voorbeeld genereren we een SSH key (publiek/prive) die we enkel gebruiken voor deploys:
Genereer een key zonder wachtwoord:
ssh-keygen -f id_rsa_myproject_deploy
Configureer de openbare SSH-key van de deploys voor je server
Ga eerst naar Pack > SSH Beheer > SSH-key toevoegen
en voeg de zojuist gegenereerde key toe.
Geef je key een passende naam: [projectnaam]-deploy
.
Zorg ervoor dat je geen voorvoegsel van het type key toevoegt, zoals ssh-rsa
.
Ga naar Pack > SSH Beheer
en filter op servernaam en de SSH key.
Voeg de key toe aan de server door het vakje aan te vinken. Om te controleren of de key succesvol is toegevoegd, kun je ook de SSH op je server invoeren en zoeken naar de naam van de key in het geautoriseerde sleutelbestand:
cat ~/.ssh/authorized_keys | grep myproject-deploy
Configureer je Deployment SSH key in Bitbucket
Nu je je deployment key hebt gegenereerd en hebt toegevoegd aan jouw server, is het tijd om je SSH key in Bitbucket te configureren.
Ga naar je Bitbucket repository en dan naar: Settings > Pipelines > SSH keys
.
Selecteer “Use my own keys”, waardoor we de gegenereerde key toe kunnen voegen.
Kopieer zowel de private als de public key en plak deze precies zoals ze zijn (het wijzigen van de inhoud kan resulteren in “ongeldige sleutel format” problemen), en druk op Save key pair
.
cat id_rsa_myproject_deploy | pbcopy
cat id_rsa_myproject_deploy.pub | pbcopy
Maak het Hipex Deploy-configuratiebestand aan
Nu de deploy key is toegevoegd en geconfigureerd kunnen we door naar de volgende stap: het instellen van de deploy configuratie met behulp van “configuratie as code”. We hebben nu alleen nog een deploy.php
bestand nodig in de root van het project.
Het Hipex Deploy configuratiebestand (zie Github) is een php-bestand dat een configuratie object bevat die wordt gebruikt door de Hipex Deploy Docker image. Deze configureren we later in de Bitbucket CI-configuratie om vervolgens geconfigureerde CI/CD stappen uit te kunnen voeren.
Optioneel: voeg de Hipex Deploy Configuration composer package als development package toe aan het project om code completion voor de Hipex Deploy configuration te krijgen:
composer require hipex/deploy-configuration --dev
Je hebt de keuze om te beginnen met een leeg deploy.php
file, bestand of om een van de start templates te kiezen om vanuit daar verder te gaan.
Voor deze quickstart gebruiken wij de Shopware 6 starter template configuration. Dit template bevat een standaard configuratie voor Shopware 6 projecten, die volledig naar eigen wens aangepast en uitgebreid kan worden.
De configuratie voor een staging omgeving kan zo kort zijn als het voorbeeld hieronder:
<?php
namespace HipexDeployConfiguration;
$configuration = new Configuration\Shopware6('git@bitbucket.org:myorg/myproject.git');
$configuration->setPhpVersion('php73')
->addStage('staging', 'staging.myproject.com', 'myprojectuser')
->addServer('mystagingserver.hipex.io');
return $configuration;
Nu dienen we de bestanden en mappen aan te geven die niet veranderen per deploy en dus bij elke deploy hetzelfde blijven.
Veel voorkomende voorbeelden van gedeelde bestanden zijn configuratiebestanden zoals .env
, env.php
en config.php
. Meestal staan deze bestanden niet onder controle van de broncode en kunnen ze worden gegenereerd/samengesteld door de applicatie of het CI/CD-systeem.
Het SW6-starter template dat wij gebruiken bevat al de volgende configuratie voor gedeelde bestanden:
$configuration->setSharedFiles([
'app/etc/env.php',
'pub/errors/local.xml'
]);
Veel voorkomende voorbeelden van gedeelde mappen zijn: media
, uploads
, var/import
en var/log
.
De SW6-starter template bevat al de volgende configuratie voor gedeelde mappen:
$configuration->setSharedFolders([
'config/jwt',
'var/log',
'public/sitemap',
'public/media',
'public/thumbnail'
]);
Nu kunnen we onze build, deploy en after deploy commando’s toevoegen.
Het SW6 starter template bevat de volgende standaard build commando’s:
$this->addBuildCommand(new Composer([
'--verbose',
'--no-progress',
'--no-interaction',
'--optimize-autoloader',
'--ignore-platform-reqs',
]));
$this->addBuildCommand(new ShopwareRecovery());
$this->addBuildCommand(new BuildAdministration());
$this->addBuildCommand(new BuildStorefront());
En de volgende deploy commando’s:
$this->addDeployCommand(new AssetInstall());
$this->addDeployCommand(new ThemeCompile());
$this->addDeployCommand(new CacheClear());
Commando’s die toegang nodig hebben op de database moeten worden uitgevoerd als deploy commando’s en worden uitgevoerd op de server, terwijl build commando’s worden uitgevoerd in het CI-systeem, binnen de hipex/deploy
Docker CI container.
Maak Shopware 6 configuratie bestanden aan
Voor shopware 6 zal uw eerste build mislukken vanwege een ontbrekende configuratie. Log in op de server en bewerk, afhankelijk van uw projectbestand, .env
. Je vindt deze bestanden in ~/domains/<domain>/application/shared/
.
Genereer app secret
Shopware heeft een app secret nodig die je eenmaal genereert na de eerste deployment. Je kunt dit gemakkelijk doen door ssh’ing in je server en bin/console system:generate-jwt-secret
uit te voeren vanuit de application/current
map. Dit JWT-secret wordt opgeslagen in config/jwt
, die automatisch gesymlinked is naar shared/config/jwt
door hipex deploy, omdat je config/jwt
al eerder als een gedeelde map hebt gemarkeerd en dus wordt gedeeld tussen alle deploys.
Bitbucket configuratiebestand opzetten
Nu is het tijd om een CI-configuratiebestand aan te maken. Je kunt wederom vanaf nul beginnen of het Hipex Deploy Bitbucket configuration starter template gebruiken.
Het CI-configuratiebestand moet gebruik maken van de Hipex Deploy image om uw CI/CD-pijplijnen succesvol te laten werken. Wij bieden meerdere versies van de Hipex Deploy image, onder andere voor elke PHP+NodeJS versie combinatie. Zie Docker Hub voor alle beschikbare versies. Naarmate er nieuwe PHP / Node versies uitkomen, zullen we meerdere nieuwe versies toevoegen.
Selecteer een versie van de hipex/deploy image die het beste aansluit bij jouw applicatie behoeften.
Hier is een voorbeeld van een bitbucket-pipelines.yml
bestand dat gebruik maakt van de combinatie PHP 7.3 + Node 13 die is geconfigureerd met een configuratie voor de staging omgeving, die een build en deployment stap bevat om de deployment uit te voeren voor de geconfigureerde staging server. Het gebruikt de configuratie uit deploy.php
om de stappen uit te voeren.
image: hipex/deploy:v2.5.0-php7.3-node13
pipelines:
branches:
# Deploy to staging
staging:
- step:
name: Build
script:
- hipex-deploy build
artifacts:
- build/**
caches:
- composer
- step:
name: Deploy
deployment: staging
script:
- hipex-deploy deploy staging
Optioneel: Test jouw Build en Deploy commando’s lokaal
Nu het project configuratie is afgerond, kunnen we de geconfigureerde Build en Deploy optioneel lokaal gaan testen voordat deze gecommit en gepusht worden naar de remote Git repository. Gezien het niet nodig is om te wachten op het resultaat van de Bitbucket-pipeline zal hier aanzienlijk tijd worden bespaard. Je hebt een Docker-client nodig om je build en deployment lokaal te kunnen testen.
Voer het hipex-deploy build
commando lokaal uit. We gaan ervan uit dat de private key van het eerdere gemaakte deploy key zich bevindt in ~/.ssh/id_rsa_myproject_deploy
, en dat het toegang heeft tot de hoofd Git-repository, private packages en de SSH-gebruiker. Let hierbij op dat de meegeleverde SSH_PRIVATE_KEY
omgevingsvariabele gecodeerd moet worden op basis64.
docker run -it --env SSH_PRIVATE_KEY="$(cat ~/.ssh/id_rsa_myproject_deploy | base64)" -v `pwd`:/build hipex/deploy:2.1.0-php7.3-node13 hipex-deploy build -vvv
Omdat alle hipex-deploy-commando’s zijn geïmplementeerd als Symfony Console-commando’s, kunnen we het build-commando toevoegen met een vlag om het verbosity level te bepalen, zoals -vvv
om alle berichten weer te geven. Dit is handig om eventuele fouten te debuggen.
Net als het build commando, kunnen we ook het deploy commando testen. In dit voorbeeld stellen we eerst de environment variabelen in voordat we ze in het commando gebruiken:
export SSH_PRIVATE_KEY=***
export DEPLOY_COMPOSER_AUTH=***
docker run -it -e SSH_PRIVATE_KEY -e DEPLOY_COMPOSER_AUTH -v `pwd`:/build hipex/deploy hipex-deploy deploy staging -vvv
Committen en pushen van project CI/CD configuraties
Nu alle project configuratie is afgerond en we hebben geverifieerd dat zowel de build als deploy commando’s lokaal succesvol draaien, is het tijd om zowel de Hipex Deploy configuratie deploy.php
en de CI configuratie bitbucket-pipelines.yml
te committen en pushen naar de remote Git repository.
Nadat dat is gedaan zal Bitbucket de pipeline automatisch starten. De enige geaccepteerde uitkomst is dat een compleet geslaagde pipeline.