From 610723c5615d26462175d6e063ffb3c4f9fb44f6 Mon Sep 17 00:00:00 2001 From: Florian THIERRY Date: Thu, 19 Sep 2024 18:03:23 +0200 Subject: [PATCH] CI/CD drafting. --- backend/codiki-launcher/pom.xml | 11 +++ .../src/main/resources/application-local.yml | 4 + .../src/main/resources/application-prod.yml | 13 +++ .../src/main/resources/application.yml | 4 - ci.bash | 95 +++++++++++++++++++ ci/configuration/backend/application-prod.yml | 13 +++ docker-compose.yml | 37 ++++++++ 7 files changed, 173 insertions(+), 4 deletions(-) create mode 100644 backend/codiki-launcher/src/main/resources/application-prod.yml create mode 100644 ci.bash create mode 100644 ci/configuration/backend/application-prod.yml create mode 100644 docker-compose.yml diff --git a/backend/codiki-launcher/pom.xml b/backend/codiki-launcher/pom.xml index affed10..413acc3 100644 --- a/backend/codiki-launcher/pom.xml +++ b/backend/codiki-launcher/pom.xml @@ -41,6 +41,17 @@ org.springframework.boot spring-boot-maven-plugin + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + diff --git a/backend/codiki-launcher/src/main/resources/application-local.yml b/backend/codiki-launcher/src/main/resources/application-local.yml index 89d5304..4ddc388 100644 --- a/backend/codiki-launcher/src/main/resources/application-local.yml +++ b/backend/codiki-launcher/src/main/resources/application-local.yml @@ -3,6 +3,10 @@ application: path: /home/florian/Developpement/codiki-hexagonal/backend/pictures-folder/ temp-path : /home/florian/Developpement/codiki-hexagonal/backend/pictures-folder/temp/ +logging: + level: + org.springframework.security: DEBUG + server: port: 8987 diff --git a/backend/codiki-launcher/src/main/resources/application-prod.yml b/backend/codiki-launcher/src/main/resources/application-prod.yml new file mode 100644 index 0000000..6874a14 --- /dev/null +++ b/backend/codiki-launcher/src/main/resources/application-prod.yml @@ -0,0 +1,13 @@ +application: + pictures: + path: /opt/codiki/pictures/ + temp-path: /opt/codiki/pictures/temp/ + +server: + port: 8080 + +spring: + datasource: + url: jdbc:postgresql://codiki-database:5432/codiki_db + username: codiki_user + password: password \ No newline at end of file diff --git a/backend/codiki-launcher/src/main/resources/application.yml b/backend/codiki-launcher/src/main/resources/application.yml index 117634a..78889d9 100644 --- a/backend/codiki-launcher/src/main/resources/application.yml +++ b/backend/codiki-launcher/src/main/resources/application.yml @@ -9,10 +9,6 @@ application: path: /opt/codiki/pictures/ temp-path: /opt/codiki/pictures/temp/ -logging: - level: - org.springframework.security: DEBUG - server: http2: enabled: true diff --git a/ci.bash b/ci.bash new file mode 100644 index 0000000..b282b6d --- /dev/null +++ b/ci.bash @@ -0,0 +1,95 @@ +#!/bin/bash + +SERVER_CODIKI_ROOT_FOLDER='/home/florian/codiki-hexagonal' +SERVER_ADDRESS='192.168.0.153' +SERVER_USER='florian' +SERVER_PORT='22' + +function handle_error() { + local resultCode=$1 + if [[ $resultCode -ne 0 ]] + then + echo "$errorMessage" + echo + exit 1 + else + echo 'Operation succeded.' + echo + fi +} + +function change_configuration_files() { + echo 'Copy production configuration file of backend...' + cp ./ci/configuration/backend/application-prod.yml ./backend/codiki-launcher/src/main/resources/application-prod.yml + handle_error $? +} + +function build_backend() { + echo 'Backend docker image building...' + docker build -t codiki-backend -f ./Dockerfile-backend . --no-cache + handle_error $? +} + +function build_frontend() { + echo 'Frontend docker image building...' + docker build -t codiki-frontend -f ./Dockerfile-frontend . --no-cache + handle_error $? +} + +function extract_docker_images() { + echo 'Extraction of backend docker image into an archive...' + docker save codiki-backend:latest -o ./ci/bin/codiki-backend.tar + handle_error $? + + echo 'Extraction of frontend docker image into an archive...' + docker save codiki-frontend:latest -o ./ci/bin/codiki-frontend.tar + handle_error $? +} + +function copy_docker_compose_file_in_bin_folder() { + echo 'Copy of docker compose file in bin folder...' + cp ./docker-compose.yml ./ci/bin/docker-compose.yml + handle_error $? +} + +function upload_files_on_server() { + echo 'Sending of docker images on server' + scp -P $SERVER_PORT ./ci/bin/* $SERVER_USER@$SERVER_ADDRESS:$SERVER_CODIKI_ROOT_FOLDER/ + handle_error $? +} + +# execute_remote_command_on_server +function ercos() { + local command=$1 + ssh -p $SERVER_PORT -l $SERVER_USER $SERVER_ADDRESS $command + handle_error $1 +} + +function deploy_docker_images_on_server() { + echo 'Import backend docker image archive on server...' + ercos "docker load < $SERVER_CODIKI_ROOT_FOLDER/codiki-backend.tar" + + echo 'Import frontend docker image archive on server...' + ercos "docker load < $SERVER_CODIKI_ROOT_FOLDER/codiki-frontend.tar" +} + +function restart_services() { + echo 'Stop services on server...' + ercos "cd $SERVER_CODIKI_ROOT_FOLDER && docker compose down" + + echo 'Start services on server...' + ercos "cd $SERVER_CODIKI_ROOT_FOLDER && docker compose up --detach" +} + +function main() { + change_configuration_files + build_backend + build_frontend + extract_docker_images + copy_docker_compose_file_in_bin_folder + upload_files_on_server + deploy_docker_images_on_server + restart_services +} + +main \ No newline at end of file diff --git a/ci/configuration/backend/application-prod.yml b/ci/configuration/backend/application-prod.yml new file mode 100644 index 0000000..6874a14 --- /dev/null +++ b/ci/configuration/backend/application-prod.yml @@ -0,0 +1,13 @@ +application: + pictures: + path: /opt/codiki/pictures/ + temp-path: /opt/codiki/pictures/temp/ + +server: + port: 8080 + +spring: + datasource: + url: jdbc:postgresql://codiki-database:5432/codiki_db + username: codiki_user + password: password \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..f20347c --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,37 @@ +services: + codiki-database: + image: "postgres:16" + container_name: "codiki-database" + ports: + - "50010:5432" + networks: + - "codiki-network" + environment: + POSTGRES_DB: codiki_db + POSTGRES_USER: codiki_admin + POSTGRES_PASSWORD: password + PGDATA: /var/lib/postgresql/data/pgdata + volumes: + - "./docker/postgresql/pgdata:/var/lib/postgresql/data/pgdata" + + codiki-backend: + image: codiki-backend:latest + container_name: "codiki-backend" + environment: + - "SPRING_PROFILES_ACTIVE=prod" + ports: + - "50011:8080" + networks: + - "codiki-network" + + codiki-frontend: + image: codiki-frontend:latest + container_name: "codiki-frontend" + ports: + - "50012:80" + - "50013:443" + networks: + - "codiki-network" + +networks: + codiki-network: \ No newline at end of file