From c672670b88f39edd01f7b525d80ef31b27a97ea2 Mon Sep 17 00:00:00 2001 From: Vincent Mazenod <vmazenod@gmail.com> Date: Fri, 26 Aug 2022 17:53:13 +0200 Subject: [PATCH] nice docker workflow --- .docker/build/python/Dockerfile | 17 +++++++++++++++++ .docker/scripts/python/command.dev.sh | 4 ---- .env | 1 + .gitlab-ci.yml | 22 ++++++++++++++-------- Makefile | 20 +++++++++++++------- docker-compose.yml | 15 +++++++++------ 6 files changed, 54 insertions(+), 25 deletions(-) create mode 100644 .docker/build/python/Dockerfile diff --git a/.docker/build/python/Dockerfile b/.docker/build/python/Dockerfile new file mode 100644 index 0000000..8a1d3e2 --- /dev/null +++ b/.docker/build/python/Dockerfile @@ -0,0 +1,17 @@ +FROM debian:stable + +RUN apt-get update && apt-get install -y --no-install-recommends \ + python3 \ + python3-pip \ + locales \ + rsync \ + && \ + locale-gen fr_FR \ + locale-gen fr_FR.UTF-8 \ + update-locale LANG=fr_FR.UTF-8 \ + . /etc/default/locale + +COPY requirements.txt . +RUN pip install --user -r requirements.txt + +WORKDIR /srv/blog \ No newline at end of file diff --git a/.docker/scripts/python/command.dev.sh b/.docker/scripts/python/command.dev.sh index 19b564f..9d95f98 100755 --- a/.docker/scripts/python/command.dev.sh +++ b/.docker/scripts/python/command.dev.sh @@ -1,7 +1,3 @@ -apt-get update -apt-get -y --no-install-recommends install python3 python3-pip #python3-gettext -cd /srv/blog -pip install --user -r requirements.txt sed -i 's/\$port &/\$port/g' ./develop_server.sh chmod +x develop_server.sh export PATH=/root/.local/bin:$PATH diff --git a/.env b/.env index 6764631..b36eff3 100644 --- a/.env +++ b/.env @@ -1,3 +1,4 @@ +PORT=8000 REGISTRY_URL=docker.isima.fr NAMESPACE=docker.isima.fr/vimazeno APP_NAME=pelican_perso diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c673508..c9f1818 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,14 +1,24 @@ -image: docker.isima.fr/vimazeno/pelican_perso - cache: paths: - output/ # le répertoire où se trouve le HTML statique généré +install: + image: node:latest + stage: install + script: + - cd /srv/blog/content/slides && yarn + build: + image: docker.isima.fr/vimazeno/pelican_perso_python stage: build + script: + - pelican + +deploy: + image: docker.isima.fr/vimazeno/pelican_perso_kerberos + stage: deploy script: # récupération du KEYTAB en hexa - - ls - echo "$KEYTAB" > my.keytab.hex # conversion du KEYTAB en hexa en binaire - sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' my.keytab.hex | xargs printf > my.keytab @@ -27,8 +37,4 @@ build: - ssh -o StrictHostKeyChecking=no -K vimazeno@perso.local.isima.fr "echo ' Header set Content-Disposition attachment' >> ~/public_html/_/.htaccess" - ssh -o StrictHostKeyChecking=no -K vimazeno@perso.local.isima.fr "echo '</FilesMatch>' >> ~/public_html/_/.htaccess" # rsync du HTML statique généré - - rsync -az --exclude '_' -e "ssh -o StrictHostKeyChecking=no -K" output/ vimazeno@perso.local.isima.fr:~/public_html/ - - ssh -o StrictHostKeyChecking=no -K vimazeno@perso.local.isima.fr "mkdir -p ~/public_html/node_modules" - - rsync -az -e "ssh -o StrictHostKeyChecking=no -K" content/node_modules/ vimazeno@perso.local.isima.fr:~/public_html/node_modules - # le déploiement se fera uniquement lorsque je clique sur le "play" de la CI via l'interface gitlab - when: manual \ No newline at end of file + - rsync -az --exclude '_' -e "ssh -o StrictHostKeyChecking=no -K" output/ vimazeno@perso.local.isima.fr:~/public_html/ \ No newline at end of file diff --git a/Makefile b/Makefile index 767489b..00818ef 100644 --- a/Makefile +++ b/Makefile @@ -22,21 +22,27 @@ include .env build: ## Build required docker compose images @$(DOCKER_COMP) build - @docker image prune -f --filter label=stage=source-image - @docker image prune -f --filter label=stage=build-image .PHONY: build push: ## Push build docker compose images + @TAG=$(shell git rev-parse --short HEAD) @docker login ${REGISTRY_URL} - @docker push ${NAMESPACE}/${APP_NAME}:latest - @docker image tag ${NAMESPACE}/${APP_NAME}:latest ${NAMESPACE}/${APP_NAME}:${TAG} - @docker push ${NAMESPACE}/${APP_NAME}:${TAG} ; + @docker push ${NAMESPACE}/${APP_NAME}_python:latest ; + @docker tag ${NAMESPACE}/${APP_NAME}_python:latest ${NAMESPACE}/${APP_NAME}_python:${TAG} ; + @docker push ${NAMESPACE}/${APP_NAME}_python:${TAG} ; + @docker push ${NAMESPACE}/${APP_NAME}_kerberos:latest ; + @docker tag ${NAMESPACE}/${APP_NAME}_kerberos:latest ${NAMESPACE}/${APP_NAME}_kerberos:${TAG} ; + @docker push ${NAMESPACE}/${APP_NAME}_kerberos:${TAG} ; .PHONY: push up: ## Make required containers up @$(DOCKER_COMP) up --remove-orphans node -# @$(DOCKER_COMP) run dockerize -timeout 180s -wait-retry-interval 3s \ -# -wait file:///tmp/content/node_modules/.yarn-integrity ; + @echo -e "Ⱐ${BOLD}${GREEN}Wait for node to install needed js (there's no problem we're just wait)...${RESET}" + @$(DOCKER_COMP) run dockerize -timeout 180s -wait-retry-interval 3s \ + -wait file:///tmp/content/node_modules/.yarn-integrity ; + @echo -e "Ⱐ${BOLD}${GREEN}Wait for pelican to generate content (there's no problem we're just wait)...${RESET}" + @echo -e "${GREEN}${BOLD}up and running${RESET}" + @echo -e " 🳠blog in docker ${BLUE}${BOLD}http://localhost:${PORT}${RESET}" @$(DOCKER_COMP) up --remove-orphans python .PHONY: up diff --git a/docker-compose.yml b/docker-compose.yml index 189f9cb..4afd73f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,7 +4,7 @@ services: node: image: node:latest - container_name: blog_node_dev + container_name: ${APP_NAME}_node environment: TZ: ${TIMEZONE:-Europe/Paris} working_dir: /srv/blog @@ -13,23 +13,26 @@ services: command: bash /srv/blog/.docker/scripts/node/command.dev.sh python: - image: debian:stable - container_name: blog_python_dev + image: ${NAMESPACE}/${APP_NAME}_python:latest + build: + context: . + dockerfile: .docker/build/python/Dockerfile + container_name: ${APP_NAME}_python environment: TZ: ${TIMEZONE:-Europe/Paris} working_dir: /srv/blog volumes: - .:/srv/blog ports: - - "8000:8000" + - "${PORT-8000}:8000" command: bash /srv/blog/.docker/scripts/python/command.dev.sh kerberos: - image: ${NAMESPACE}/${APP_NAME}_kerberos_dev:latest + image: ${NAMESPACE}/${APP_NAME}_kerberos:latest build: context: . dockerfile: .docker/build/kerberos/Dockerfile - container_name: blog_kerberos_dev + container_name: ${APP_NAME}_kerberos environment: TZ: ${TIMEZONE:-Europe/Paris} volumes: -- GitLab