Pipeline de publication Docker en local
Publiez la gem jekyll-theme-zer0 depuis un conteneur Docker propre, en reproduisant le chemin de release CI pour des builds reproductibles sans toucher au Ruby de l'hôte.
Table of Contents
Pipeline de publication Docker en local
Vous pouvez compiler et publier la gem jekyll-theme-zer0 entièrement à l’intérieur d’un conteneur Docker. Cela reproduit exactement le chemin de release CI, évitant les problèmes de décalage de version causés par des environnements Ruby différents sur l’hôte.
Pourquoi exécuter les releases dans Docker ?
| Problème | Solution Docker |
|---|---|
| Incompatibilité de version Ruby sur l’hôte | Le conteneur utilise le même Ruby que la CI |
| Environnement de gems pollué | Conteneur propre supprimé après exécution |
| « Ça marche sur ma machine » | Environnement CI exact reproduit en local |
| Fuites de données sensibles | Identifiants injectés via des variables d’environnement, jamais stockés |
Fichiers Compose
| Fichier | Objet |
|---|---|
docker-compose.publish.yml |
Compile et pousse l’image Docker vers un registre |
docker-compose.prod.yml |
Déploiement en production avec des tags d’image figés |
Publier la gem en local
L’approche recommandée est le script de release unifié, qui gère tout :
./scripts/bin/release patch # or minor / major
Ce script :
- Analyse les commits depuis le dernier tag pour confirmer le type d’incrément
- Met à jour
lib/jekyll-theme-zer0/version.rb - Exécute la validation (
./scripts/bin/validate) - Compile la gem (
gem build jekyll-theme-zer0.gemspec) - Crée un tag git et le pousse
- Publie sur RubyGems (
gem push)
Passez --dry-run pour prévisualiser sans publier :
./scripts/bin/release patch --dry-run
Exécution dans un conteneur Docker
Pour exécuter manuellement la release dans un conteneur Docker :
# Start a clean Jekyll container
docker compose -f docker-compose.yml run --rm jekyll bash
# Inside the container:
./scripts/bin/release patch
Ou avec le fichier compose de publication :
docker compose -f docker-compose.yml \
-f docker-compose.publish.yml \
build publish
Variables d’environnement
Définissez les identifiants dans .env (ne committez jamais ce fichier) :
RUBYGEMS_API_KEY=rubygems_...
GITHUB_TOKEN=ghp_...
DOCKER_IMAGE=amrabdel/zer0-mistakes
IMAGE_TAG=latest
Le fichier .env est déjà présent dans .gitignore.
Équivalent du pipeline CI
GitHub Actions exécute automatiquement le même pipeline de release sur les tags de version :
# .github/workflows/release.yml (simplified)
- name: Build gem
run: gem build jekyll-theme-zer0.gemspec
- name: Publish to RubyGems
run: gem push jekyll-theme-zer0-$.gem
env:
GEM_HOST_API_KEY: $
Dépannage
« Clé API invalide »
Définissez RUBYGEMS_API_KEY dans votre shell ou votre fichier .env :
export RUBYGEMS_API_KEY=$(cat ~/.gem/credentials | grep rubygems_api_key | cut -d' ' -f2)
Gem déjà publiée pour cette version
Incrémentez la version et relancez. RubyGems n’autorise pas l’écrasement d’une version déjà publiée.
Échec de la compilation Docker
docker compose down -v
docker compose build --no-cache
Ressources associées
Voir aussi
- [[Development]]
- [[Docker]]
- [[Release Management]]