Déploiement On-Premise - Partie 2 - Castor à la rescousse

JoliCode - JoliCodeBlog - 26/03
Dans le précédent article, nous avons vu toutes les étapes nécessaires pour préparer les images Docker qui seront utilisées en production. Mais nous allons maintenant aller plus loin pour automatiser et simplifier

Dans le précédent article, nous avons vu toutes les étapes nécessaires pour préparer les images Docker qui seront utilisées en production. Mais nous allons maintenant aller plus loin pour automatiser et simplifier encore un peu plus cette étape grâce à Castor et les runners GitLab, le but étant de faciliter la procédure de déploiement de nouvelles versions de l’application afin que le client puisse être autonome.

Section intitulée creation-et-publication-des-imagesCréation et publication des images

Comme souvent quand nos projets nécessitent de lancer des commandes, nous mettons en place des tâches Castor pour simplifier la DX. Nous avons donc créé une task production:build qui applique tout ce que nous avons vu dans l’article précédent :

<?php use Castor\Attribute\AsOption; use Castor\Attribute\AsTask; use Castor\Exception\ProblemException; use Symfony\Component\Console\Input\InputOption; use function Castor\capture; use function Castor\check; use function Castor\context; use function Castor\fs; use function Castor\io; use function Castor\run; use function Castor\variable; const REGISTRY = '<url du registre>:4567/plancq/arsol/'; const DEFAULT_BRANCH = 'main'; const BAKE_FILE = __DIR__ . '/../infrastructure/production/bake.hcl'; const IMAGES_TO_TAG = [ 'postgres:16' => 'postgres', 'getmeili/meilisearch:v1.16' => 'meilisearch', ]; #[AsTask(description: 'Build production docker images', namespace: 'production:docker')] function build( #[AsArgument(description: 'Version of the images')] ?string $tagVersion = null, #[AsOption(description: 'Force the build whatever the current branch state')] bool $force = false, #[AsOption(description: 'Push the images to the registry', mode: InputOption::VALUE_NEGATABLE)] ?bool $push = null, #[AsOption(description: 'Update docker-compose.yml with current tag', mode: InputOption::VALUE_NEGATABLE)] ?bool $updateDockerCompose = null, ): void { $currentBranch = capture(['git', 'branch', '--show-current']); check('Checking current branch:', 'You must be on the main branch to build the production images. Change the current branch or use --force to bypass this check.', static fn () => DEFAULT_BRANCH === $currentBranch || $force); $currentChanges = capture(['git', 'status', '--porcelain']); check('Checking git working tree:', 'You have uncommitted changes. Git stash everything before building image or use --force to bypass this check.', static fn () => !$currentChanges || $force); if (!$force) { run(['git', 'pull', ...
[Courte citation de 8% de l'article original]
Loading...