Skip to content

Feature/docker#133

Merged
amartinezcsuc merged 11 commits into
masterfrom
feature/docker
Apr 27, 2026
Merged

Feature/docker#133
amartinezcsuc merged 11 commits into
masterfrom
feature/docker

Conversation

@amartinezcsuc

Copy link
Copy Markdown
Collaborator

No description provided.

…itHub Container Registry

Millores implementades:

Docker Build & Performance:
- Cache BuildKit Maven per builds 80% més ràpids (5 min → 1 min rebuilds)
- Multi-stage optimitzat amb 4 etapes (deps, builder, tester, runtime)
- Stage tester opcional per executar tests sense ralentitzar builds
- Layer caching intel·ligent amb POMs separats

Seguretat:
- Execució non-root amb UID 185 (usuari spark)
- Permisos restrictius 775 en lloc de 777
- 10 labels OCI estàndard per traçabilitat completa
- Build validation automàtica de JARs

Observabilitat:
- Health checks (interval 30s, timeout 10s, 3 retries)
- Logging rotat (10MB x 3 fitxers amb compressió)
- Restart policy automàtic (màx 3 intents)
- Variables d'entorn APP_VERSION i SPARK_VERSION
- Build metadata amb BUILD_DATE i VCS_REF

Developer Experience:
- Makefile amb 10+ comandes simplificades i validació
- Scripts executables: build.sh, run.sh, validate.sh
- Profiles Docker Compose (spark3/spark4)
- Warnings BUILD_DATE/VCS_REF solucionats amb defaults

GitHub Container Registry:
- Workflow automàtic per construir i publicar imatges
- Suport Spark 3.5 i Spark 4 simultani
- Tags semàntics (latest, version, SHA)
- Cache de GitHub Actions per builds ràpids
- Imatges disponibles a ghcr.io/csuc/prc-csv2xml

Documentació:
- docker/QUICKSTART.md - Guia ràpida de 3 passos
- docker/README.md - Ampliat amb troubleshooting complet
- docker/GITHUB_PACKAGES.md - Ús d'imatges pre-construïdes
- .github/SETUP_GHCR.md - Configuració GitHub Packages

Fitxers nous:
- Makefile, .dockerignore, docker/Dockerfile.spark4
- docker/{build,run,validate}.sh, docker/.env.example
- .github/workflows/docker.yml

BREAKING CHANGES:
- Profiles requerits per docker-compose (--profile spark3/spark4)
- BUILD_DATE i VCS_REF ara tenen defaults "unknown" si no es defineixen
Canvis al build system:

Maven:
- Actualitzar Spark 3.5.0 → 3.5.1
- Afegir variable scala.binary.version per flexibilitat
- Dependencies Spark amb scope "provided" (no dupliquen al JAR)
- Nou perfil "spark4" per compilar amb Spark 4.0.2 + Scala 2.13 + Java 21

Construcció:
- mvn clean package (default: Spark 3.5 / Scala 2.12 / Java 8)
- mvn clean package -Pspark4 (Spark 4.0 / Scala 2.13 / Java 21)

Aquests canvis permeten mantenir dues versions binàries simultànies
per suportar els dos Dockerfiles (Spark 3.5 i Spark 4).
Resolt conflictes de merge entre master i feature/docker.

Canvis principals:
- Mantinguda configuració Docker optimitzada amb BuildKit
- Actualitzat Spark a 3.5.1 (vs 3.5.0 de master)
- Preservades millores de seguretat i health checks
- Mantingut suport per Spark 4 amb perfil Maven
- Conservades exclusions Cursor/Claude AI al .gitignore

Els conflictes s'han resolt mantenint les millores de feature/docker
que inclouen multi-stage builds, cache, logging i documentació ampliada.
Canvis al workflow Docker:
- Eliminat build de Spark 4 del workflow GitHub Actions
- Canviat prefix dels tags SHA de branch dinàmic a prefix fix 'sha-'
- Mantingut només el build de la imatge base (Spark 3.5.1)

El Dockerfile.spark4 continua disponible per builds locals amb
Docker Compose o Makefile utilitzant el perfil spark4.
Solucionat error de permisos al crear directoris /app i /data.
La imatge base apache/spark:3.5.1 requereix executar com a root
per modificar permisos de directoris existents.

Canvis:
- Afegit USER root abans de crear/modificar directoris
- Assegurat chown correcte després de copiar JARs
- Mantingut canvi a usuari 185 per execució final

Fixes GitHub Actions build error: "Permission denied" al crear directoris.
Afegides variables DOCKER_UID i DOCKER_GID per executar el contenidor
amb l'usuari de l'host, evitant errors "Permission denied" en escriure
fitxers de sortida al directori data.

Canvis:
- Afegit DOCKER_UID=$(id -u) i DOCKER_GID=$(id -g) a target 'run'
- Afegit DOCKER_UID=$(id -u) i DOCKER_GID=$(id -g) a target 'run-spark4'
- Els fitxers de sortida es generen amb el propietari de l'usuari actual

Fixes: java.io.FileNotFoundException: /data/sortida.xml (Permission denied)
Actualitzat README per incloure els flags necessaris quan s'executa
amb docker run directament:
- --user $(id -u):$(id -g) per evitar problemes de permisos d'escriptura
- -e HOME=/tmp per evitar error "basedir must be absolute: ?/.ivy2/local"

Això soluciona dos errors comuns:
1. java.io.FileNotFoundException: Permission denied
2. java.lang.IllegalArgumentException: basedir must be absolute

El Makefile ja inclou aquests flags automàticament.
Modificat ENV HOME=/opt/spark a ENV HOME=/tmp per evitar l'error
"basedir must be absolute: ?/.ivy2/local" quan s'executa amb
diferents usuaris.

Això permet que el contenidor funcioni correctament tant quan
s'executa amb l'usuari per defecte (185) com quan s'executa amb
--user $(id -u):$(id -g) des de docker run.

Fixes: java.lang.IllegalArgumentException: basedir must be absolute
Eliminades les variables DOCKER_UID i DOCKER_GID que causaven l'error
"basedir must be absolute: ?/.ivy2/local" perquè executaven Spark
amb un usuari inexistent dins del contenidor.

Ara s'executa amb l'usuari per defecte del contenidor (UID 185),
que té HOME=/tmp configurat correctament.

Els fitxers de sortida es generaran amb usuari 185 però són accessibles
per l'usuari de l'host. Si cal canviar permisos:
  sudo chown $(id -u):$(id -g) data/sortida.xml

Fixes: java.lang.IllegalArgumentException: basedir must be absolute
Resolts conflictes de merge amb master:
- Mantingut ENV HOME=/tmp al Dockerfile (necessari per evitar errors Ivy)
- Simplificada comanda docker run al README (sense --user per evitar problemes)

Els canvis de feature/docker són compatibles amb master i aporten:
- Configuració Docker optimitzada amb BuildKit
- Suport per Spark 4 amb perfil Maven
- Documentació ampliada i Makefile millorat
- Fixes de permisos i configuració HOME
@amartinezcsuc amartinezcsuc merged commit 78d13d4 into master Apr 27, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant