From fd19f76cba9319ff4e23d2d471e94367552372b4 Mon Sep 17 00:00:00 2001 From: Marko Budiselic Date: Wed, 31 May 2017 10:26:53 +0200 Subject: [PATCH] Build, Package & Deploy script. Summary: Build, Packege & Deploy script. Reviewers: teon.banek, mferencevic, mislav.bradac, dgleich Reviewed By: dgleich Subscribers: dgleich, pullbot, buda Differential Revision: https://phabricator.memgraph.io/D397 --- .gitignore | 39 +++++----- release/alpha_interpreter.sh | 25 ------ release/{alpha_compiler.sh => build_compiler} | 7 +- release/build_interpreter | 66 ++++++++++++++++ release/package_deploy | 76 +++++++++++++++++++ 5 files changed, 167 insertions(+), 46 deletions(-) delete mode 100755 release/alpha_interpreter.sh rename release/{alpha_compiler.sh => build_compiler} (90%) create mode 100755 release/build_interpreter create mode 100755 release/package_deploy diff --git a/.gitignore b/.gitignore index ac57d8373..fde375a10 100644 --- a/.gitignore +++ b/.gitignore @@ -1,28 +1,29 @@ -.DS_Store -.ycm_extra_conf.pyc -*.swp -*.swo -*.out -*.so -*.o -*.dSYM/ -memgraph -*~ -*.pyc *.breakpoint +*.dSYM/ +*.o +*.out +*.pyc *.session.yaml -tags +*.so +*.swo +*.swp +*~ +.DS_Store .gdb_history +.idea +.ycm_extra_conf.pyc Testing/ -ve/ -ve3/ -release/memgraph_* -release/libs/ -release/barrier/ -release/barrier_* build/ cmake-build-* -.idea cmake/DownloadProject/ dist/ +memgraph +release/barrier/ +release/barrier_* +release/config/ +release/libs/ +release/memgraph_* src/query/frontend/opencypher/generated/ +tags +ve/ +ve3/ diff --git a/release/alpha_interpreter.sh b/release/alpha_interpreter.sh deleted file mode 100755 index b824593f4..000000000 --- a/release/alpha_interpreter.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -# Initial version of script that is going to be used for release builds. - -# NOTE: do not run this script as a super user - -echo "Memgraph Release Building..." - -# compile memgraph -cd ../build -rm -rf ./* -cmake -DCMAKE_BUILD_TYPE:String=debug .. -make -j8 - -# get the most recent version of memgraph exe -exe_name=`ls -t memgraph_* | head -1` - -# create dst directory -mkdir -p ../release/${exe_name} - -# copy all relevant files -cp ${exe_name} ../release/${exe_name}/memgraph -cp -r ../config ../release/${exe_name}/config - -echo "Memgraph Release Building DONE" diff --git a/release/alpha_compiler.sh b/release/build_compiler similarity index 90% rename from release/alpha_compiler.sh rename to release/build_compiler index 2540a23f2..e9d7eaa79 100755 --- a/release/alpha_compiler.sh +++ b/release/build_compiler @@ -2,10 +2,13 @@ # Initial version of script that is going to be used for release builds. -# NOTE: do not run this script as a super user - echo "Memgraph Release Building..." +if [[ $EUID -eq 0 ]]; then + echo "This script must NOT be run as root!" 1>&2 + exit 1 +fi + # compile memgraph cd ../build rm -rf ./* diff --git a/release/build_interpreter b/release/build_interpreter new file mode 100755 index 000000000..1c07d7031 --- /dev/null +++ b/release/build_interpreter @@ -0,0 +1,66 @@ +#!/bin/bash + +# Initial version of script that is going to be used for release builds. +# Build & package (collect all required files in a folder). + +function print_help () { + echo "Usage: $0 [--skip-compile]" +} + +echo "Memgraph Release Building..." + +if [[ $EUID -eq 0 ]]; then + echo "This script must NOT be run as root!" 1>&2 + exit 1 +fi + +release_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +project_dir="${release_dir}/.." + +skip_compile=false +while [[ $# -gt 0 ]] +do + case $1 in + -h|--help) + print_help + exit -1 + ;; + --skip-compile) + skip_compile=true + ;; + *) + # unknown option + ;; + esac + shift # past argument or value +done + +echo "Skip compile: ${skip_compile}" + +if [[ "${skip_compile}" == false ]]; then + # init (download libraries) + cd ${project_dir} + ./init + + # compile memgraph + cd ${project_dir}/build + rm -rf ./* + cmake -DCMAKE_BUILD_TYPE:String=debug .. + make -j8 +fi + +# get the most recent version of memgraph exe +cd ${project_dir}/build +exe_name=`ls -t memgraph_* | head -1` +release_folder=${release_dir}/${exe_name} + +# extract only required files +# create dst directory +cd ${release_dir} +mkdir -p ${release_folder} +echo "Full build name: ${exe_name}" > ${release_folder}/build.info +# copy binary & config +cp ${project_dir}/build/${exe_name} ${release_folder}/memgraph +cp -r ${project_dir}/config ${release_folder}/config + +echo "Memgraph Build ${exe_name} DONE" diff --git a/release/package_deploy b/release/package_deploy new file mode 100755 index 000000000..5d91803a9 --- /dev/null +++ b/release/package_deploy @@ -0,0 +1,76 @@ +#!/bin/bash + +# Build, Package (docker image) & Deploy Memgraph + +function print_help () { + echo "Usage: $0 [-h|--help] -s|--server deploy_server_domain -u|--user username -k|--key private_user_key [--skip-compile]" +} + +working_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +project_dir="${working_dir}/.." + +# argument parsing +required_args_no=0 +skip_compile=false +while [[ $# -gt 0 ]] +do + case $1 in + -h|--help) + print_help + exit -1 + ;; + -s|--server) + deploy_server="$2" + required_args_no=$((required_args_no+1)) + shift # past argument + ;; + -u|--user) + deploy_user="$2" + required_args_no=$((required_args_no+1)) + shift # past argument + ;; + -k|--key) + deploy_key="$2" + required_args_no=$((required_args_no+1)) + shift # past argument + ;; + --skip-compile) + skip_compile=true + ;; + *) + # unknown option + ;; + esac + shift # past argument or value +done +if [[ ${required_args_no} -ne 3 ]]; then + print_help + exit 1 +fi + +echo "Deploy server: ${deploy_server}" +echo "Deploy user: ${deploy_user}" +echo "Deploy key: ${deploy_key}" +echo "Skip compile: ${skip_compile}" + +## build binary +if [[ "${skip_compile}" == true ]]; then + ${working_dir}/build_interpreter --skip-compile +else + ${working_dir}/build_interpreter +fi + +## build package (docker image) +cd ${working_dir} +package_name=`ls -t -d memgraph_*/ | head -1 | sed 's/.$//'` +docker build -t ${package_name} -f ${working_dir}/alpha_interpreter.dockerfile --build-arg build_name=${package_name} . +docker save ${package_name} > ${package_name}.tar.gz + +## deploy +# copy package +scp -i ${deploy_key} ${package_name}.tar.gz ${deploy_user}@${deploy_server}:/home/${deploy_user} +# load package +ssh -i ${deploy_key} ${deploy_user}@${deploy_server} docker load -i /home/${deploy_user}/${package_name}.tar.gz +# spin up the instance +public_port=$(echo ${package_name} | grep -o "memgraph_[0-9]*_" | sed 's/[^0-9]*//g') +ssh -i ${deploy_key} ${deploy_user}@${deploy_server} docker run -d --name ${package_name} -p ${public_port}:7687 ${package_name}