diff --git a/Jenkinsfile b/Jenkinsfile index fc5134ca2..d6a5f76df 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -4,6 +4,9 @@ node('Node-Dev-100163') { echo 'Pulling...' + env.BRANCH_NAME checkout scm } + stage('Cleanup') { + sh 'make clean_up' + } stage('Build') { sh 'make install' sh 'make stop_server_docker' @@ -12,6 +15,7 @@ node('Node-Dev-100163') { } stage('Start'){ sh 'make run_server_docker' + sh 'make restore_database' } stage('Testing') { sh 'make run_test_docker' @@ -19,9 +23,6 @@ node('Node-Dev-100163') { stage('Publish') { sh 'make push_image' } - // stage('Cleanup') { - // sh 'make clean_up' - // } currentBuild.result = "SUCCESS" // Set success status after all stages complete } catch (err) { currentBuild.result = "FAILURE" diff --git a/Makefile b/Makefile index 7e806f9db..5f7ee912b 100644 --- a/Makefile +++ b/Makefile @@ -13,13 +13,14 @@ SETUP_PATH=${PWD}/setup HASH := $(shell git rev-parse HEAD) CONFIG=odoo.conf ODOO_IMAGE=hub.nextzenos.com/nexterp/odoo -TAG := main +TAG := develop CONTAINER_ID=odoo-${TAG} install: sudo apt -y update && \ sudo apt install -y python3-full python3-pip libldap2-dev libpq-dev libsasl2-dev run_test_docker: - sudo docker exec ${CONTAINER_ID} odoo --test-tags=account --log-level=test --test-enable -d testdb --stop-after-init --config=/etc/odoo/${CONFIG} --xmlrpc-port=8071 + sudo docker exec ${CONTAINER_ID} odoo --test-tags :TestAccountMove.test_out_invoice_auto_post_monthly,TestAccountMove.test_included_tax --log-level=test --test-enable -d testdb --stop-after-init --config=/etc/odoo/${CONFIG} --xmlrpc-port=8071 && \ + sudo docker exec ${CONTAINER_ID} odoo db --config=/etc/odoo/${CONFIG} drop testdb run_test_local: odoo-bin -i all_modules --log-level=test --test-enable -d testdb --stop-after-init --config=${CONFIG} gen_config: @@ -38,6 +39,15 @@ run_server_docker: fi cd ${DEPLOY_PATH} &&\ ${DOCKER_COMPOSE_CMD} up -d +restore_database: + @echo "Checking for backup.zip in container..." + @if sudo docker exec ${CONTAINER_ID} test -f /etc/odoo/backup/backup.zip; then \ + echo "Restoring database from backup..."; \ + sudo docker exec ${CONTAINER_ID} odoo db --config=/etc/odoo/${CONFIG} load new_db /etc/odoo/backup/backup.zip; \ + else \ + echo "Error: backup.zip not found in container. Aborting restore."; \ + fi + stop_server_docker: @if ! docker ps | grep -q "${CONTAINER_ID}"; then \ echo "Container not found. Skipping"; \ @@ -55,6 +65,7 @@ clean_up: find "${DEPLOY_PATH}" -mindepth 1 -maxdepth 1 \ ! -name "etc" \ ! -name "addons" \ + ! -name "backup" \ ! -name "*.sh" \ ! -name "*.template" \ ! -name "*.py" \ diff --git a/deployment/docker-compose.yml b/deployment/docker-compose.yml index 3129771ce..6f4734282 100644 --- a/deployment/docker-compose.yml +++ b/deployment/docker-compose.yml @@ -19,6 +19,7 @@ services: - ${ENTRYPOINT:-./entrypoint.sh}:/entrypoint.sh # use for install additional package (Optional) - ${ODOO_ADDONS:-./addons}:/mnt/extra-addons - ${ODOO_CONFIG:-./etc}:/etc/odoo + - ${ODOO_BACKUP:-./backup/ce}:/etc/odoo/backup restart: always db: image: postgres:16 @@ -26,7 +27,7 @@ services: environment: - POSTGRES_USER=${PG_USER:-changeme} - POSTGRES_PASSWORD=${PG_PASS:-password} - - POSTGRES_DB=${PG_DB:-postgres} + - POSTGRES_DB=postgres ports: - ${PG_PORT:-5432}:5432 restart: always diff --git a/deployment/env.template b/deployment/env.template index 79172edad..61b59b595 100644 --- a/deployment/env.template +++ b/deployment/env.template @@ -7,6 +7,7 @@ ODOO_CONTAINER= # ODOO_CHAT_PORT= ODOO_ADDONS=./addons ODOO_CONFIG=./etc +ODOO_BACKUP=./backup/ce #Database PG_PORT= PG_DB= diff --git a/deployment/etc/odoo.conf b/deployment/etc/odoo.conf new file mode 100644 index 000000000..472333b76 --- /dev/null +++ b/deployment/etc/odoo.conf @@ -0,0 +1,10 @@ +[options] +addons_path = /mnt/extra-addons +data_dir = /var/lib/odoo +db_host = db +db_port = 5432 +db_user = nexterp +db_password = smartyourlife +proxy_mode = True + + diff --git a/setup/clean_up.sh b/setup/clean_up.sh deleted file mode 100755 index fec7e1fe7..000000000 --- a/setup/clean_up.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/bash - -export PATH=/usr/sbin:$PATH -export DEBIAN_FRONTEND=noninteractive - -set -euo pipefail -readonly COLOUR_RESET='\e[0m' -readonly aCOLOUR=( - '\e[38;5;154m' # green | Lines, bullets and separators - '\e[1m' # Bold white | Main descriptions - '\e[90m' # Grey | Credits - '\e[91m' # Red | Update notifications Alert - '\e[33m' # Yellow | Emphasis -) -trap 'onCtrlC' INT -onCtrlC() { - echo -e "${COLOUR_RESET}" - exit 1 -} - -Show() { - # OK - if (($1 == 0)); then - echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[0]} OK $COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2" - # FAILED - elif (($1 == 1)); then - echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[3]}FAILED$COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2" - exit 1 - # INFO - elif (($1 == 2)); then - echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[0]} INFO $COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2" - # NOTICE - elif (($1 == 3)); then - echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[4]}NOTICE$COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2" - fi -} - -Warn() { - echo -e "${aCOLOUR[3]}$1$COLOUR_RESET" -} - -GreyStart() { - echo -e "${aCOLOUR[2]}\c" -} - -ColorReset() { - echo -e "$COLOUR_RESET\c" -} - - -stop_test_db() { - cd "$(pwd)/testing_env" - Show 2 "Stopping containers..." - docker-compose down - rm -f "$(find . -type f \( -name "*.yml" -o -name "*.template" \) -not -name "docker-compose.yml" -not -name "env.template" )" - Show 0 "Test Server is offline" -} - -stop_test_db \ No newline at end of file diff --git a/setup/gen-config.py b/setup/gen-config.py index 6e5fd00b5..d6e9f3c67 100755 --- a/setup/gen-config.py +++ b/setup/gen-config.py @@ -38,24 +38,24 @@ def main(): parser.add_argument('--db_port', type=int, help='') parser.add_argument('--db_user', type=str, help='') parser.add_argument('--deploy_path', type=str, help='') - parser.add_argument('--db', type=str, help='') parser.add_argument('--image', type=str, help='') parser.add_argument('--tag', type=str, help='') parser.add_argument('--addons', type=str, help='') parser.add_argument('--config', type=str, help='') parser.add_argument('--container', type=str, help='') + parser.add_argument('--backup', type=str, help='') args = parser.parse_args() db_port = args.db_port db_pass = "smartyourlife" db_user = args.db_user base_dir= args.deploy_path - db_name=args.db image=args.image tag=args.tag container=args.container addons=args.addons config_path=args.config app_port = 10017 + backup = args.backup # Copy template files os.makedirs(f"{base_dir}/etc", exist_ok=True) color_log.Show(3,f"Copy {base_dir}/odoo.conf.template to {base_dir}/etc/odoo.conf") @@ -79,7 +79,6 @@ def main(): env_file_path = Path("deployment/.env") set_key(dotenv_path=env_file_path, key_to_set="COMPOSE_PROJECT_NAME", value_to_set=f"odoo-{tag}",quote_mode="never") set_key(dotenv_path=env_file_path, key_to_set="PG_PORT", value_to_set=find_available_port(5432),quote_mode="never") - set_key(dotenv_path=env_file_path, key_to_set="PG_DB", value_to_set=db_name,quote_mode="never") set_key(dotenv_path=env_file_path, key_to_set="PG_USER", value_to_set=db_user,quote_mode="never") set_key(dotenv_path=env_file_path, key_to_set="PG_PASS", value_to_set=db_pass,quote_mode="never") set_key(dotenv_path=env_file_path, key_to_set="ODOO_CONFIG", value_to_set=config_path,quote_mode="never") @@ -88,5 +87,9 @@ def main(): set_key(dotenv_path=env_file_path, key_to_set="ODOO_IMAGE", value_to_set=image,quote_mode="never") set_key(dotenv_path=env_file_path, key_to_set="ODOO_TAG", value_to_set=tag,quote_mode="never") set_key(dotenv_path=env_file_path, key_to_set="ODOO_CONTAINER", value_to_set=container,quote_mode="never") + if (backup == 'community'): + set_key(dotenv_path=env_file_path, key_to_set="ODOO_BACKUP", value_to_set=f'{base_dir}/backup/ce',quote_mode="never") + if (backup == 'enterprise'): + set_key(dotenv_path=env_file_path, key_to_set="ODOO_BACKUP", value_to_set=f'{base_dir}/backup/enterprise',quote_mode="never") if __name__ == "__main__": main() diff --git a/setup/init_config.sh b/setup/init_config.sh index 7a45c2b3c..a4b4919ec 100755 --- a/setup/init_config.sh +++ b/setup/init_config.sh @@ -8,7 +8,6 @@ SETUP_PATH=$(pwd)/setup ODOO_IMAGE=$1 ODOO_TAG=$2 ODOO_CONTAINER=$3 -PG_DB=nexterp PG_USER=nexterp ODOO_ADDONS=./addons ODOO_CONFIG=./etc @@ -92,7 +91,8 @@ Generate_Config(){ cp "${DEPLOY_PATH}/env.template" "${DEPLOY_PATH}/.env" fi python "$SETUP_PATH/gen-config.py" --db_port 5432 --db_user $PG_USER --deploy_path "$DEPLOY_PATH" \ - --db ${PG_DB:=odoo} --image "${ODOO_IMAGE}" --container "${ODOO_CONTAINER}" --tag "${ODOO_TAG:=latest}" --addons "${ODOO_ADDONS}" --config "${ODOO_CONFIG}" + --image "${ODOO_IMAGE}" --container "${ODOO_CONTAINER}" --tag "${ODOO_TAG:=latest}" \ + --addons "${ODOO_ADDONS}" --config "${ODOO_CONFIG}" --backup community Show 0 " Generate Config Complete" }