Outils & Workflow Back-End
Comment un back-end dev organise son quotidien : Git, branches, PR, CI/CD, conteneurs, tests, environnements locaux & collaboration pour livrer réguliÚrement, en sécurité et sans casser la prod.
Git, branches, PR & qualité de code CI/CD : pipelines, tests & releases Environnements, Docker & dev local
Git, branches, PR & qualité de code
3 modĂšles de branches
- GitFlow :
develop, branches release, hotfix â adaptĂ© aux releases rares. - Trunk-based : tout part et revient sur
main; feature flags obligatoires. - âGitHub flowâ : branche â PR â merge â deploy, trĂšs courant en SaaS.
Conventional Commits
feat: nouvelle fonctionnalité (impacte la version MINOR).fix: correction de bug (impacte la version PATCH).chore,refactor,docs,test, etc.- Permet de générer changelog & versions automatiquement.
feat(api): add filters on /orders
fix(db): correct index on invoices
chore(ci): cache pip dependencies in GitHub ActionsQualitĂ© de code âoutillĂ©eâ
- Formatteurs auto (Black, Prettier, gofmtâŠ) â moins de dĂ©bats sur le style.
- Linters (flake8, ESLint, golangci-lintâŠ) branchĂ©s en CI.
- Analyse statique : mypy, SonarQube, Pylint, etc.
Exemple de config .pre-commit-config.yaml
repos:
- repo: https://github.com/psf/black
rev: 24.4.2
hooks:
- id: black
- repo: https://github.com/pycqa/flake8
rev: 7.0.0
hooks:
- id: flake8
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.10.0
hooks:
- id: mypyCI/CD : pipelines, tests automatisés & releases
Stages typiques
- Check : lint, format, analyse statique.
- Test : unitaires + intégration, coverage.
- Build : image Docker, artefacts (wheel, jar, binaire).
- Deploy : staging puis prod (manuelle ou auto).
Matrice & parallélisme
- Tester sur plusieurs versions de langage / DB.
- Lancer les jobs en parallÚle pour réduire le temps total.
strategy:
matrix:
python-version: ["3.10", "3.11", "3.12"]Releases contrÎlées
- Tag + changelog généré automatiquement depuis les commits.
- Promotion staging â prod via âdeploy buttonsâ + approbation.
- Rollbacks scriptĂ©s : revenir Ă lâimage N-1 + migrations down.
Environnements, Docker & dev local
Stack dev local
- Un simple
make devpour lancer API + DB + Redis + outils. - Scripts pour importer un dump anonymisé, créer un admin, etc.
- Ăviter la âdoc oraleâ : tout dans le README / docs dev.
Configs par env
.env.dev,.env.staging,.env.prodignorĂ©s par Git.- Valeurs par dĂ©faut raisonnables pour lâonboarding dâun nouveau dev.
Parité dev/prod
- MĂȘmes versions majeures de DB, mĂȘme runtime (Python, NodeâŠ).
- Limitation des âça marche chez moiâ grĂące Ă Docker/Compose.
1) Git & gestion du code source
Structurer le repo
- Répertoires clairs :
src/ouapp/,tests/,infra/,scripts/,docs/. - Fichier
README.mdqui explique comment lancer, tester, déployer. - Pour un monorepo : dossiers par service + scripts communs.
Historique utile
- Commits atomiques, pas des âbig-bang refactor + features + testsâ.
- Utiliser
git bisectquand un bug est introduit pour trouver le commit fautif. - Tags de versions cohérentes (semver).
Rebase vs merge
- Merge : garde lâhistorique exact, mais peut ĂȘtre trĂšs verbeux.
- Rebase : historique linĂ©aire, plus lisible â Ă utiliser avant PR.
- RĂšgle classique : rebase libre sur branches perso, jamais sur
mainpartagé.
Snippet : alias Git utiles
[alias]
st = status -sb
co = checkout
cm = commit
ca = commit --amend
lg = log --oneline --graph --decorate --all2) Branching, PR & revues de code
Workflow dâune feature
- Créer branche
feature/1234-checkout-couponsdepuismain. - Code + tests, rebase réguliÚrement sur
main. - Ouvrir PR en âdraftâ tĂŽt pour feedback.
- CI verte, review, corrections, squash & merge.
Template de PR minimal
## Objet
- Ajouter la pagination sur /orders
## Changements
- nouveau paramĂštre `page` et `page_size`
- mise Ă jour de l'OpenAPI
- nouveaux tests
## Impacts
- DB : aucun
- Perf : +1 requĂȘte sur les totaux
## Checklist
- [x] tests unitaires
- [x] tests intégration
- [x] docs OpenAPIChecklist de review (cÎté reviewer)
- Compréhension : le but de la PR est-il clair ? (sinon demander un résumé).
- Risques : sécurité, données, perf, compat ascendante.
- Tests : cas heureux + cas dâerreur sont-ils couverts ?
- Lisibilité : noms de fonctions/variables parlants, duplication évitée.
3) Environnements de dev & dépendances
Gestion des versions
pyenv,asdfou équivalent pour gérer plusieurs versions de Python/Node.- Fichier
.python-versionou.tool-versionscommitté.
Virtualenv & requirements
- Un env par projet (
python -m venv .venv). - Fichier lock (
poetry.lock,requirements.txt) versionnĂ©. - Scripts pour rĂ©gĂ©nĂ©rer lâenv :
make venv.
Secrets & config en dev
- Variables dâenvironnement via
.env(non committé). - Secrets fictifs ou comptes de test, jamais les secrets prod.
Exemple de Makefile dev
dev:
\tuvicorn app.main:app --reload
test:
\tpytest -q
lint:
\tblack app tests
\tflake8 app tests
db-reset:
\t./scripts/reset_local_db.sh4) Conteneurs, Docker & docker-compose
Multi-stage build (image légÚre)
FROM python:3.12-slim AS base
FROM base AS build
WORKDIR /app
COPY pyproject.toml poetry.lock ./
RUN pip install poetry && poetry install --no-dev
FROM base AS runtime
WORKDIR /app
COPY --from=build /usr/local /usr/local
COPY . .
USER 1000
CMD ["gunicorn", "app.wsgi:application", "-b", "0.0.0.0:8000"]docker-compose pour dev complet
services:
api:
build: .
env_file: .env.dev
ports: ["8000:8000"]
depends_on: [db, redis]
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: dev
volumes:
- dbdata:/var/lib/postgresql/data
redis:
image: redis:7
volumes:
dbdata:- Ne pas lancer en root en prod ; utiliser
USERnon privilégié. - Limiter la taille des images (layers inutiles, caches de build).
- Un Dockerfile pour dev + overrides pour prod (env séparés).
5) CI/CD & automatisation des livraisons
Pipeline complet
- Push sur branche â build & tests.
- Merge sur main â build image + push registry.
- Tag release â dĂ©ploiement staging / prod.
Migrations DB dans la CI/CD
- Commandes dédiées :
migrate,check,rollback. - Test des migrations sur env éphémÚre dans le pipeline.
- Documenter les migrations destructives (DROP, TRUNCATEâŠ).
Artefacts & registry
- Images Docker versionnĂ©es dans un registry (ECR, GHCRâŠ).
- Artefacts de build (packages, binaires) dans un store central.
- Permet de reproduire exactement un déploiement N-1.
# Exemple trÚs simplifié (GitLab CI)
stages: [check, test, build, deploy]
check:
stage: check
script: ["make lint"]
test:
stage: test
script: ["make test"]
build:
stage: build
script: ["docker build -t registry/app:$CI_COMMIT_SHA .",
"docker push registry/app:$CI_COMMIT_SHA"]
deploy_prod:
stage: deploy
when: manual
script: ["./infra/deploy_prod.sh $CI_COMMIT_SHA"]6) Stratégie de tests : unitaires, intégration, e2e & perf
Pyramide de tests
- Beaucoup dâunitaires, moins dâintĂ©gration, peu dâe2e, quelques tests de perf.
- Les tests lents doivent ĂȘtre limitĂ©s mais fiables.
Organisation du dossier tests/
tests/unit/pour la logique pure.tests/integration/pour API, DB, queuesâŠtests/e2e/pour les parcours complets.
Mocks & doubles de test
- Mocker les appels externes (APIs tierces, e-mailsâŠ).
- Utiliser des fixtures réutilisables (Pytest).
# Exemple Pytest : test API avec client
def test_create_order(api_client, db_session):
payload = {"customer_id": 1, "items": [{"sku": "P1", "qty": 2}]}
resp = api_client.post("/orders", json=payload)
assert resp.status_code == 201
data = resp.json()
assert data["total"] > 0â Pour la perf : tests Locust/K6 sur les endpoints critiques, intĂ©grĂ©s Ă la CI ou dĂ©clenchĂ©s avant les grosses releases.
7) Collaboration, tickets & documentation
Tickets & flux
- Un ticket = un problĂšme / feature, pas un fourre-tout.
- CritĂšres dâacceptation clairs (Given / When / Then).
- Limiter le WIP pour Ă©viter lâĂ©parpillement.
Documentation âvivanteâ
- OpenAPI pour les contrats dâAPI (gĂ©nĂ©rĂ© par le code si possible).
- ADR (Architecture Decision Records) pour les grosses décisions.
- Docs proches du code plutÎt que ppt dispersés.
Collaboration
- Pair/mob programming pour les sujets complexes ou sensibles.
- Canaux Slack/Teams par domaine (api-payments, infra, dataâŠ).
- Rétros réguliÚres pour ajuster tooling & process.
8) HygiÚne & productivité quotidienne du back-end dev
Organisation perso
- Bloc âdeep workâ quotidien sans Slack/mail (code, design).
- Regrouper les revues de code, les réunions, la comm.
- Limiter le multi-task & garder peu de tĂąches ouvertes.
Automatisation & dotfiles
- Alias shell, fonctions, scripts de bootstrap de nouvelle machine.
- Config dâĂ©diteur versionnĂ©e (VSCode, vim, etc.).
Feedback loop
- Mesurer les irritants : builds lents, tests flakys, onboarding compliqué.
- Proposer des améliorations concrÚtes : cache CI, tests refactorés, scripts.
