From 305b9f5d8d6ed340e5e62e95dc2bff2af5211a3d Mon Sep 17 00:00:00 2001 From: dbjpanda Date: Wed, 10 Oct 2018 02:00:25 +0530 Subject: [PATCH] fix --- .env.example | 1 - .gitignore | 2 + README.md | 4 +- docker-compose.yml | 2 +- travis/deploy.sh | 130 +++++++++++++++++++++++++-------------------- 5 files changed, 78 insertions(+), 61 deletions(-) diff --git a/.env.example b/.env.example index 54cd490..ad1add5 100644 --- a/.env.example +++ b/.env.example @@ -7,7 +7,6 @@ NETWORK_NAME=traefik-network DRUPAL_VERSION=8 # Database Config -MYSQL_HOSTNAME=test.mariadb MYSQL_DATABASE=drupal MYSQL_USER=test MYSQL_PASSWORD=pass diff --git a/.gitignore b/.gitignore index b2e00ce..fac648f 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ # Ignore .env files as they are personal .env +travis_rsa +travis_rsa.pub diff --git a/README.md b/README.md index f25f98b..7c4d797 100644 --- a/README.md +++ b/README.md @@ -36,9 +36,9 @@ Step 1 ./travis/server-setup.sh `````` -Step 2 (Change travis env variables such as DEPLOY_SERVER, SECURE etc. as per your requirement. If you want to encrypt any sensitive variables execute below commands) +Step 2 (Change travis env variables such as DEPLOY_SERVER, secure etc. according to your requirement and encrypt sensitive variables like below) `````` -travis encrypt MASTER_MYSQL_USER=travis MASTER_MYSQL_PASSWORD=travistest MASTER_MYSQL_ROOT_PASSWORD=helloworld MASTER_ADMIN_PASS=pass DEV_MYSQL_USER=travis DEV_MYSQL_PASSWORD=travistest DEV_MYSQL_ROOT_PASSWORD=helloworld DEV_ADMIN_PASS=pass DOCKER_USERNAME=dbjpanda DOCKER_PASSWORD=pass +travis encrypt MYSQL_USER=travis MYSQL_PASSWORD=travistest MYSQL_ROOT_PASSWORD=helloworld ADMIN_PASS=pass DOCKER_USERNAME=dbjpanda DOCKER_PASSWORD=pass `````` Step 3 diff --git a/docker-compose.yml b/docker-compose.yml index bc9574c..c1f45a2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -23,7 +23,7 @@ services: PROJECT_NAME: ${PROJECT_NAME} DOMAIN_NAME: ${DOMAIN_NAME} DRUPAL_VERSION: ${DRUPAL_VERSION} - MYSQL_HOSTNAME: ${MYSQL_HOSTNAME} + MYSQL_HOSTNAME: ${PROJECT_NAME}.mariadb MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} diff --git a/travis/deploy.sh b/travis/deploy.sh index f1b4a3a..9367b65 100755 --- a/travis/deploy.sh +++ b/travis/deploy.sh @@ -1,73 +1,89 @@ #!/usr/bin/env bash -# Prepare Env variables -PROJECT_NAME=${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH} -MYSQL_HOSTNAME=${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH}.mariadb -if [ ${TRAVIS_BRANCH} == master ]; then -SERVER=${MASTER_SERVER} -DOMAIN_NAME=${MASTER_DOMAIN} -MYSQL_HOSTNAME=${PROJECT_NAME}.mariadb -MYSQL_USER=${MASTER_MYSQL_USER} -MYSQL_PASSWORD=${MASTER_MYSQL_PASSWORD} -MYSQL_ROOT_PASSWORD=${MASTER_MYSQL_ROOT_PASSWORD} -ADMIN_PASS=${MASTER_ADMIN_PASS} -fi -if [ ${TRAVIS_BRANCH} == dev ]; then -SERVER=${DEV_SERVER} -DOMAIN_NAME=${DEV_DOMAIN} -MYSQL_HOSTNAME=${PROJECT_NAME}.mariadb -MYSQL_USER=${DEV_MYSQL_USER} -MYSQL_PASSWORD=${DEV_MYSQL_PASSWORD} -MYSQL_ROOT_PASSWORD=${DEV_MYSQL_ROOT_PASSWORD} -ADMIN_PASS=${DEV_ADMIN_PASS} -fi +set -xe +ssh -o StrictHostKeyChecking=no "${DEPLOY_USER}"@"${SERVER_IP}" << EOF +echo "#################################################################################################################" -ssh -o StrictHostKeyChecking=no "${DEPLOY_USER}"@"${SERVER}" << EOF - -# Functions Definition -drupal_install(){ if [ \$(docker network ls | grep -c traefik-network) == 0 ]; then - echo "Creating traefik network"; - docker network create -d bridge traefik-network; + echo "Creating traefik network" + docker network create -d bridge traefik-network fi + if [ \$(docker ps | grep -c traefik) == 0 ]; then - echo "Creating traefik container"; - docker run -d --network=traefik-network -p 80:80 -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock --name=traefik traefik:latest --api --docker; - fi - if [ ! -e .env ]; then - cp .env.example .env; + echo "Creating traefik container" + docker run -d --network=traefik-network -p 80:80 -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock --name=traefik traefik:latest --api --docker fi - PROJECT_NAME=${PROJECT_NAME} DOMAIN_NAME=${DOMAIN_NAME} MYSQL_HOSTNAME=${MYSQL_HOSTNAME} MYSQL_USER=${MYSQL_USER} MYSQL_PASSWORD=${MYSQL_PASSWORD} docker-compose up -d; - docker exec -i ${PROJECT_NAME} composer install --no-dev --no-progress --optimize-autoloader --no-interaction --no-ansi; - docker exec -i ${PROJECT_NAME} drush si --account-pass=${ADMIN_PASS} --yes; -} + EXISTING_MASTER_PROJECT=\$(ls | grep 'master' | grep -v 'backup') + EXISTING_DEV_PROJECT=\$(ls | grep 'dev') + if [ ${TRAVIS_BRANCH} == 'dev' ]; then + if [ ! -d ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH}-* ]; then + git clone -b ${TRAVIS_BRANCH} --single-branch git@github.com:${TRAVIS_REPO_SLUG}.git ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH}-$RANDOM + cd ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH}-* + git checkout ${TRAVIS_COMMIT::8} + cp .env.example .env + PROJECT_NAME=${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH} DOMAIN_NAME=${DEV_DOMAIN} MYSQL_USER=${MYSQL_USER} MYSQL_PASSWORD=${MYSQL_PASSWORD} MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} docker-compose up -d + else + cd ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH}-* + git pull origin ${TRAVIS_BRANCH} + git checkout ${TRAVIS_COMMIT::8} + PROJECT_NAME=${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH} DOMAIN_NAME=${DEV_DOMAIN} MYSQL_USER=${MYSQL_USER} MYSQL_PASSWORD=${MYSQL_PASSWORD} MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} docker-compose up -d + fi + docker exec -i ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH} composer install --no-dev --no-progress --optimize-autoloader --no-interaction --no-ansi + docker exec -i ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH} drush si --account-pass=${ADMIN_PASS} --yes; -if [ ! -d "${PROJECT_NAME}" ]; then - git clone -b ${TRAVIS_BRANCH} --single-branch git@github.com:${TRAVIS_REPO_SLUG}.git ${PROJECT_NAME}; - cd ${PROJECT_NAME}; - drupal_install; -else - cd ${PROJECT_NAME}; - git pull origin ${TRAVIS_BRANCH}; - if [ \$(docker exec ${PROJECT_NAME} drush status bootstrap | grep -c Successful) == 0 ]; then - echo "Previous Drupal has been corrupted. Install a fresh Drupal again"; - docker rm -f \$(docker ps -a -q) - docker system prune -f - cd .. - sudo rm -rf ${PROJECT_NAME} - git clone -b ${TRAVIS_BRANCH} --single-branch git@github.com:${TRAVIS_REPO_SLUG}.git ${PROJECT_NAME}; - cd ${PROJECT_NAME}; - drupal_install; + if [ \$(docker exec \${EXISTING_MASTER_PROJECT} drush status bootstrap 2> /dev/null | grep -c Successful) == 1 ]; then + docker exec -i \${EXISTING_MASTER_PROJECT} drush sql-dump --result-file=../dump.sql + sudo mv ../${TRAVIS_REPO_SLUG#*/}-master-*/code/drupal/dump.sql ./code/drupal + docker exec -i ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH} drush sql-cli < ./code/drupal/dump.sql + docker exec -i ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH} drush -y cim + else + docker exec -i ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH} drush cim --partial + docker exec -i ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH} drush -y csim live_config + fi + + docker exec -i ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH} drush -y dcdi + docker exec -i ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH} drush updb + docker exec -i ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH} drush cr fi - PROJECT_NAME=${PROJECT_NAME} DOMAIN_NAME=${DOMAIN_NAME} MYSQL_HOSTNAME=${MYSQL_HOSTNAME} MYSQL_USER=${MYSQL_USER} MYSQL_PASSWORD=${MYSQL_PASSWORD} docker-compose up -d; - docker exec -i ${PROJECT_NAME} composer install --no-dev --no-progress --optimize-autoloader --no-interaction --no-ansi; - docker exec -i ${PROJECT_NAME} drush cim; - docker exec -i ${PROJECT_NAME} drush cr; -fi + if [ ${TRAVIS_BRANCH} == 'master' ]; then + if [ ! -d ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH}-* ]; then + git clone -b ${TRAVIS_BRANCH} --single-branch git@github.com:${TRAVIS_REPO_SLUG}.git ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH}-${TRAVIS_COMMIT::8} + cd ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH}-${TRAVIS_COMMIT::8} + cp .env.example .env + PROJECT_NAME=${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH}-${TRAVIS_COMMIT::8} DOMAIN_NAME=${PRO_DOMAIN} MYSQL_USER=${MYSQL_USER} MYSQL_PASSWORD=${MYSQL_PASSWORD} MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} docker-compose up -d + docker exec -i ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH}-${TRAVIS_COMMIT::8} composer install --no-dev --no-progress --optimize-autoloader --no-interaction --no-ansi + docker exec -i ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH}-${TRAVIS_COMMIT::8} drush si --account-pass=${ADMIN_PASS} --yes; + docker exec -i ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH}-${TRAVIS_COMMIT::8} drush cim --partial + docker exec -i ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH}-${TRAVIS_COMMIT::8} drush -y csim live_config + docker exec -i ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH}-${TRAVIS_COMMIT::8} drush -y dcdi + docker exec -i ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH}-${TRAVIS_COMMIT::8} drush updb + docker exec -i ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH}-${TRAVIS_COMMIT::8} drush cr + + else + if [ -d backup-${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH}-* ]; then + echo "Removing previous backup" + docker rm -f -v \$(docker ps -a -q --filter name=backup) + sudo rm -rf backup-${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH}-* + fi + + mv \${EXISTING_MASTER_PROJECT} backup-\${EXISTING_MASTER_PROJECT} + mv \${EXISTING_DEV_PROJECT} ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH}-${TRAVIS_COMMIT::8} + + cd ${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH}-${TRAVIS_COMMIT::8} + PROJECT_NAME=${TRAVIS_REPO_SLUG#*/}-${TRAVIS_BRANCH}-${TRAVIS_COMMIT::8} DOMAIN_NAME=${PRO_DOMAIN} MYSQL_USER=${MYSQL_USER} MYSQL_PASSWORD=${MYSQL_PASSWORD} MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} docker-compose -p \${EXISTING_DEV_PROJECT} up -d + cd .. + + ACTIVE_MASTER_PROJECT_NAME=\$(docker inspect --format "{{ index .Config.Labels \"com.docker.compose.project\"}}" \${EXISTING_MASTER_PROJECT}) + cd backup-\${EXISTING_MASTER_PROJECT} + PROJECT_NAME=backup-\${EXISTING_MASTER_PROJECT} DOMAIN_NAME=${PRO_DOMAIN} MYSQL_USER=${MYSQL_USER} MYSQL_PASSWORD=${MYSQL_PASSWORD} MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} docker-compose -p \${ACTIVE_MASTER_PROJECT_NAME} up --no-start + rm .env + fi + fi +echo "#################################################################################################################" EOF