Commit cc5b3b09 authored by Илья Рассадин's avatar Илья Рассадин
Browse files

Merge branch 'refactor_path_vars' into 'master'

Refactored deployment paths

See merge request boilerplate/ci!2
parents 032075f9 9e1c7f0a
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -4,7 +4,10 @@
    name: $ENVIRONMENT_NAME
  extends: .before_deploy_code
  script:
    - rsync --links --safe-links-avz --chown=$user:$group -e "ssh $SSH_OPTS" $CI_PROJECT_DIR/www/ root@${!PROJECT_SERVER}::www/${!PROJECT_SITE}/www/
    - rsync --links --safe-links-avz --chown=$user:$group -e "ssh $SSH_OPTS" $CI_PROJECT_DIR/www/ $DEPLOY_HOST_PATH/www/
  needs:
    - job: setup_environment_vars
      artifacts: true
  only:
    refs:
    - beta
@@ -35,9 +38,13 @@
    - curl -O https://gitlab.cetera.ru/boilerplate/ci/raw/master/rsync-filter-std
    - *set_rsync_filter
    - echo PROJECT_FILTER set to $PROJECT_FILTER
    - rsync --links --safe-links -avz --chown=$user:$group -e "ssh $SSH_OPTS" --filter="merge rsync-filter-std" --filter="merge $PROJECT_FILTER" $RSYNC_PARAMS $CI_PROJECT_DIR/ root@${!PROJECT_SERVER}::www/${!PROJECT_SITE}/
    - if [ $PROJECT_CMS_TYPE = bitrix ]; then curl -o /tmp/.settings_extra.php https://gitlab.cetera.ru/boilerplate/ci/raw/master/.settings_extra.php; fi
    - if [ $PROJECT_CMS_TYPE = bitrix ]; then rsync -avz --chown=$user:$group -e "ssh $SSH_OPTS" /tmp/.settings_extra.php root@${!PROJECT_SERVER}::www/${!PROJECT_SITE}/www/bitrix/; fi
    - rsync --links --safe-links -avz --chown=$user:$group -e "ssh $SSH_OPTS" --filter="merge rsync-filter-std" --filter="merge $PROJECT_FILTER" $RSYNC_PARAMS $CI_PROJECT_DIR/ $DEPLOY_HOST_PATH/
  after_script:
    - if [ $PROJECT_CMS_TYPE = bitrix ] && [ $SKIP_SETTINGS_EXTRA_DEPLOYMENT != true ]; then curl -o /tmp/.settings_extra.php https://gitlab.cetera.ru/boilerplate/ci/raw/master/.settings_extra.php; fi
    - if [ $PROJECT_CMS_TYPE = bitrix ] && [ $SKIP_SETTINGS_EXTRA_DEPLOYMENT != true ]; then rsync -avz --chown=$user:$group -e "ssh $SSH_OPTS" /tmp/.settings_extra.php $DEPLOY_HOST_PATH/www/bitrix/; fi
  needs:
    - job: setup_environment_vars
      artifacts: true
  only:
    refs:
    - beta
+4 −2
Original line number Diff line number Diff line
.upload_composer_files: &upload_composer_files |
  if [ -d "$CI_PROJECT_DIR/vendor" ];
  then
    echo "RUNNING rsync -L -avz --delete --chown=$user:$group -e "ssh $SSH_OPTS" $CI_PROJECT_DIR/vendor/ root@${!PROJECT_SERVER}::www/${!PROJECT_SITE}/$COMPOSER_SERVER_DIR;"
    rsync -L -avz --delete --chown=$user:$group -e "ssh $SSH_OPTS" $CI_PROJECT_DIR/vendor/ root@${!PROJECT_SERVER}::www/${!PROJECT_SITE}/$COMPOSER_SERVER_DIR;
    echo "RUNNING rsync -L -avz --delete --chown=$user:$group -e "ssh $SSH_OPTS" $CI_PROJECT_DIR/vendor/ $DEPLOY_HOST_PATH/$COMPOSER_SERVER_DIR;"
    rsync -L -avz --delete --chown=$user:$group -e "ssh $SSH_OPTS" $CI_PROJECT_DIR/vendor/ $DEPLOY_HOST_PATH/$COMPOSER_SERVER_DIR;
  fi

.deploy_composer_files_to_server:
@@ -13,6 +13,8 @@
  needs:
    - job: build_composer
      artifacts: true
    - job: setup_environment_vars
      artifacts: true
  variables:
    COMPOSER_SERVER_DIR: vendor/
  script:
+76 −18
Original line number Diff line number Diff line
@@ -6,9 +6,6 @@ before_script:
  - 'which rsync || ( apt-get update -y && apt-get install rsync -y )'
  - 'which perl || (apt-get update -y && apt-get install perl -y)'
  - source $CI_PROJECT_DIR/.env.project
variables:
  user: www-data
  group: www-data

.set_layouts: &set_layouts |
  cd $CI_PROJECT_DIR/working/ && export LAYOUTS=(`ls -1 -d ./*/|perl -nE 's{^\./(.+)/$}{$1}; print if /^[^.]/'`)
@@ -29,27 +26,88 @@ variables:
  - mkdir -p ~/.ssh
  - '[[ -f /.dockerenv ]] && echo "$SSH_SERVER_HOSTKEYS" > ~/.ssh/known_hosts'


.set_path_vars: &set_path_vars |
  rm -f $CI_PROJECT_DIR/cetera_build.env
  source $CI_PROJECT_DIR/.env.project

  echo "PROJECT_CMS_TYPE=$PROJECT_CMS_TYPE" >> cetera_build.env

  export CETERA_VAR_PREFIX=$(echo "$CI_COMMIT_REF_NAME" | tr -dc '[:alnum:]' | tr '[:lower:]' '[:upper:]' | sed 's/^[^A-Z]*//g')
  PROJECT_SERVER_VAR="${CETERA_VAR_PREFIX}_PROJECT_SERVER"
  PROJECT_SERVER=${!PROJECT_SERVER_VAR}
  if [ -z "${PROJECT_SERVER+x}" ] || [ -z "$PROJECT_SERVER" ]; then
      echo "Error: PROJECT_SERVER is not set or is empty" >&2
      exit 1
  fi

  SSH_USER_VAR="${CETERA_VAR_PREFIX}_SSH_USER"
  SSH_USER=${!SSH_USER_VAR}
  SSH_USER=${SSH_USER:-"root"}

  PATH_PREFIX_VAR="${CETERA_VAR_PREFIX}_PATH_PREFIX"
  PATH_PREFIX=${!PATH_PREFIX_VAR}
  PATH_PREFIX=${PATH_PREFIX:-":www"}

  PROJECT_SITE_VAR="${CETERA_VAR_PREFIX}_PROJECT_SITE"
  PROJECT_SITE=${!PROJECT_SITE_VAR}
  echo "PROJECT_SITE=$PROJECT_SITE" >> cetera_build.env

  PATH_SUFFIX_VAR="${CETERA_VAR_PREFIX}_PATH_SUFFIX"
  PATH_SUFFIX=${!PATH_SUFFIX_VAR}
  PROJECT_PATH_SUFFIX_DEFAULT=$PROJECT_SITE
  PATH_SUFFIX=${PATH_SUFFIX:-$PROJECT_PATH_SUFFIX_DEFAULT}
  if [ -z "${PATH_SUFFIX+x}" ] || [ -z "$PATH_SUFFIX" ]; then
      echo "Error: PATH_SUFFIX is not set or is empty" >&2
      exit 1
  fi

  DEPLOY_HOST_PATH="$SSH_USER@$PROJECT_SERVER:$PATH_PREFIX/$PATH_SUFFIX"
  echo "DEPLOY_HOST_PATH=$DEPLOY_HOST_PATH"
  echo "DEPLOY_HOST_PATH=$DEPLOY_HOST_PATH" >> cetera_build.env

  PROJECT_PORT_VAR="${CETERA_VAR_PREFIX}_PROJECT_PORT"
  PROJECT_PORT="${!PROJECT_PORT_VAR:-22}"
  export SSH_OPTS="-o StrictHostKeyChecking=no -o IdentitiesOnly=yes -i $HOME/.ssh/deploy.key -p $PROJECT_PORT"
  echo "SSH_OPTS=$SSH_OPTS"
  echo "SSH_OPTS=$SSH_OPTS" >> cetera_build.env

  SKIP_SETTINGS_EXTRA_DEPLOYMENT_VAR="${CETERA_VAR_PREFIX}_SKIP_SETTINGS_EXTRA_DEPLOYMENT"
  SKIP_SETTINGS_EXTRA_DEPLOYMENT=${!SKIP_SETTINGS_EXTRA_DEPLOYMENT_VAR}
  export SKIP_SETTINGS_EXTRA_DEPLOYMENT=${SKIP_SETTINGS_EXTRA_DEPLOYMENT:-"false"}
  echo "SKIP_SETTINGS_EXTRA_DEPLOYMENT=$SKIP_SETTINGS_EXTRA_DEPLOYMENT" >> cetera_build.env

  USER_VAR="${CETERA_VAR_PREFIX}_USER"
  user=${!USER_VAR}
  user=${user:-"www-data"}
  echo "user=$user" >> cetera_build.env
  GROUP_VAR="${CETERA_VAR_PREFIX}_GROUP"
  group=${!GROUP_VAR}
  export group=${group:-"www-data"}
  echo "group=$group" >> cetera_build.env

.set_ssh_keys: &set_ssh_keys |
  mkdir -p ~/.ssh
  echo "$PRODUCTION_DEPLOY_KEY" | base64 -d > ~/.ssh/deploy.key
  chmod 0400 ~/.ssh/deploy.key

setup_environment_vars:
  stage: prebuild
  script:
    - *set_path_vars
    - cat cetera_build.env
  artifacts:
    reports:
      dotenv: cetera_build.env

.before_deploy_code:
  stage: deploy
  environment:
    url: https://${!PROJECT_SITE}
    name: $ENVIRONMENT_NAME
  before_script:
  - source $CI_PROJECT_DIR/.env.project
  - mkdir -p ~/.ssh
  - export CETERA_VAR_PREFIX=$(echo "$CI_COMMIT_REF_NAME" | tr -dc '[:alnum:]' | tr '[:lower:]' '[:upper:]' | sed 's/^[^A-Z]*//g')
  - export PROJECT_SERVER="${CETERA_VAR_PREFIX}_PROJECT_SERVER"
  - export PROJECT_SITE="${CETERA_VAR_PREFIX}_PROJECT_SITE"
  - export PROJECT_PORT="${CETERA_VAR_PREFIX}_PROJECT_PORT"
  - echo PROJECT_SERVER is ${!PROJECT_SERVER}
  - echo PROJECT_SITE is ${!PROJECT_SITE}
  - export REAL_PROJECT_SITE_NAME=${!PROJECT_SITE}
#  - bash -c '[ ${#REAL_PROJECT_SITE_NAME} -le 5 ] && echo "PROJECT_SERVER is not correctly set"'
  - rm -f ~/.ssh/deploy.key
  - echo "$PRODUCTION_DEPLOY_KEY" | base64 -d > ~/.ssh/deploy.key
  - chmod 0400 ~/.ssh/deploy.key
  - export SSH_OPTS="-o StrictHostKeyChecking=no -o IdentitiesOnly=yes -i $HOME/.ssh/deploy.key -p ${!PROJECT_PORT:-22}"
  - echo $SSH_OPTS
    - *set_ssh_keys
    - echo $DEPLOY_HOST_PATH
  script: []

workflow: