From 1f3117e7e5ca7a51d7b047aeee180382e22e5973 Mon Sep 17 00:00:00 2001 From: Juan Ferrer Toribio Date: Wed, 20 Mar 2019 12:21:32 +0100 Subject: [PATCH 1/2] Import SQL changes --- Jenkinsfile | 31 +++++++++++++++----- db/.gitignore | 2 +- db/import-changes.js | 66 ------------------------------------------ db/import-changes.sh | 67 +++++++++++++++++++++++++++++++++++++++++++ db/import-fixtures.js | 19 ------------ 5 files changed, 92 insertions(+), 93 deletions(-) delete mode 100644 db/import-changes.js create mode 100755 db/import-changes.sh delete mode 100644 db/import-fixtures.js diff --git a/Jenkinsfile b/Jenkinsfile index a2185455df..a9b8e3af91 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -6,11 +6,13 @@ pipeline { disableConcurrentBuilds() } environment { - PROJECT_NAME = 'salix' - REGISTRY = 'registry.verdnatura.es' - DOCKER_HOST_1 = 'vch1.verdnatura.es' - DOCKER_HOST_2 = 'vch2.verdnatura.es' - TAG = "${env.BRANCH_NAME}" + PROJECT_NAME = 'salix' + REGISTRY = 'registry.verdnatura.es' + DOCKER_HOST_1 = 'vch1.verdnatura.es' + DOCKER_HOST_2 = 'vch2.verdnatura.es' + PORT_MASTER = '5002' + PORT_TEST = '5001' + TAG = "${env.BRANCH_NAME}" } stages { stage('Checkout') { @@ -29,10 +31,10 @@ pipeline { switch (env.BRANCH_NAME) { case 'master': - env.PORT = 5002 + env.PORT = PORT_MASTER break case 'test': - env.PORT = 5001 + env.PORT = PORT_TEST break } switch (env.BRANCH_NAME) { @@ -126,6 +128,21 @@ pipeline { } } } + stage('Database') { + when { anyOf { + branch 'test' + }} + steps { + configFileProvider([ + configFile(fileId: "config.${env.NODE_ENV}.ini", + variable: 'MYSQL_CONFIG') + ]) { + sh 'cp $MYSQL_CONFIG db/config.$NODE_ENV.ini' + } + + sh 'db/import-changes.sh -f $NODE_ENV' + } + } stage('Cleanup') { when { anyOf { branch 'test' diff --git a/db/.gitignore b/db/.gitignore index f26f7a0a64..34fb917848 100644 --- a/db/.gitignore +++ b/db/.gitignore @@ -1 +1 @@ -connect.ini +config.*.ini diff --git a/db/import-changes.js b/db/import-changes.js deleted file mode 100644 index b72efaa3c8..0000000000 --- a/db/import-changes.js +++ /dev/null @@ -1,66 +0,0 @@ -const mysql = require('mysql2/promise'); -const fs = require('fs-extra'); - -(async () => { - try { - const connection = await mysql.createConnection({ - host: 'localhost', - user: 'root', - multipleStatements: true - }); - let changesDir = './install/changes'; - let results = await connection.query("SELECT dbVersion FROM util.config"); - if (results[0].length != 1) - throw new Error('There must be exactly one row in the configuration table'); - let version = results[0][0].dbVersion; - if (!version) - throw new Error('Database version not defined'); - let dirs = await fs.readdir(changesDir); - dirs.sort(compareVersions); - let lastVersion; - - for (let dir of dirs) { - if (compareVersions(dir, version) <= 0) continue; - if (/^\./.test(dir)) continue; - let path = `${changesDir}/${dir}`; - let files = await fs.readdir(path); - files.sort(); - console.log(dir); - for (let file of files) { - let sql = await fs.readFile(`${path}/${file}`, 'utf8'); - if (/^\s*$/.test(sql)) continue; - await connection.query(sql); - console.log(` - ${file}`); - } - lastVersion = dir; - } - if (lastVersion) { - await connection.query("UPDATE util.config SET dbVersion = ?", [lastVersion]); - console.log(`Database upgraded successfully to version ${lastVersion}`); - } else { - console.log("Database is alredy in the last version"); - } - await connection.end(); - process.exit(); - } catch (err) { - console.error(err); - process.exit(1); - } -})(); - -function compareVersions(ver1, ver2) { - let diff; - ver1 = ver1.split('.'); - ver2 = ver2.split('.'); - - diff = parseInt(ver1[0]) - parseInt(ver2[0]); - if (diff !== 0) return diff; - - diff = parseInt(ver1[1]) - parseInt(ver2[1]); - if (diff !== 0) return diff; - - diff = parseInt(ver1[2]) - parseInt(ver2[2]); - if (diff !== 0) return diff; - - return 0; -} diff --git a/db/import-changes.sh b/db/import-changes.sh new file mode 100755 index 0000000000..d1fb0aca8e --- /dev/null +++ b/db/import-changes.sh @@ -0,0 +1,67 @@ +#!/bin/bash + +FORCE=FALSE + +usage() { + echo "Usage: $0 [-f] [environment]" + exit 1 +} + +while getopts ":f" option +do + case $option in + f) + FORCE=TRUE + ;; + \?|:) + usage + ;; + esac +done + +shift $(($OPTIND - 1)) + +ENV=$1 + +if [ "$ENV" == "production" ]; then + echo "" + echo " ( ( ) ( ( ) ) " + echo " )\ ))\ ) ( /( )\ ) ( * ))\ ) ( /( ( /( " + echo "(()/(()/( )\()|()/( ( )\ ) /(()/( )\()) )\())" + echo " /(_))(_)|(_)\ /(_)) )\ (((_) ( )(_))(_)|(_)\ ((_)\ " + echo "(_))(_)) ((_|_))_ _ ((_))\___(_(_()|_)) ((_) _((_)" + echo "| _ \ _ \ / _ \| \| | | ((/ __|_ _|_ _| / _ \| \| |" + echo "| _/ /| (_) | |) | |_| || (__ | | | | | (_) | . |" + echo "|_| |_|_\ \___/|___/ \___/ \___| |_| |___| \___/|_|\_|" + echo "" + + if [ "$FORCE" != "TRUE" ]; then + read -p "Are you sure? (Default: no) [yes|no]: " ANSWER + + if [ "$ANSWER" != "yes" ]; then + echo "Aborting" + exit; + fi + fi +fi +if [ -z "$ENV" ]; then + ENV="test" +fi + +DIR="$(dirname "${BASH_SOURCE[0]}")" +INI_FILE="$DIR/config.$ENV.ini" + +if [ ! -f "$INI_FILE" ]; then + echo "Config file doesn't exists: $INI_FILE" + exit 2 +fi + +echo "[INFO] Config file: $INI_FILE" +echo "[INFO] Applying changes" + +# Import changes +for file in $DIR/install/changes/*.sql; do + echo "[INFO] -> $file" + mysql --defaults-file="$INI_FILE" < $file +done + diff --git a/db/import-fixtures.js b/db/import-fixtures.js deleted file mode 100644 index 8cd38a750f..0000000000 --- a/db/import-fixtures.js +++ /dev/null @@ -1,19 +0,0 @@ -const mysql = require('mysql2/promise'); -const fs = require('fs-extra'); - -(async () => { - try { - const connection = await mysql.createConnection({ - host: 'localhost', - user: 'root', - multipleStatements: true - }); - sql = await fs.readFile(`install/dump/fixtures.sql`, 'utf8'); - await connection.query(sql); - await connection.end(); - process.exit(); - } catch (err) { - console.error(err); - process.exit(1); - } -})(); From ca4bb9c58e4258adfcc3299c71f4e8750ba78c2a Mon Sep 17 00:00:00 2001 From: Juan Ferrer Toribio Date: Wed, 20 Mar 2019 12:23:53 +0100 Subject: [PATCH 2/2] Import SQL fixes --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index a9b8e3af91..65aae23003 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -137,7 +137,7 @@ pipeline { configFile(fileId: "config.${env.NODE_ENV}.ini", variable: 'MYSQL_CONFIG') ]) { - sh 'cp $MYSQL_CONFIG db/config.$NODE_ENV.ini' + sh 'cp "$MYSQL_CONFIG" db/config.$NODE_ENV.ini' } sh 'db/import-changes.sh -f $NODE_ENV'