Commit ab3f9293 authored by Ilya Rassadin's avatar Ilya Rassadin
Browse files

Fix deployment to beget virtual hosting

Prior this commit, we always tried to set user and group with rsync --chown option. Though some virtual hosting providers can have a very weird permissions on folders.
The noticeable case here is beget:
The $HOME folder and individual websites folders are own by root to quote: "prevent accidental folder deletion". Our rsync params doesn't play nice with that approach.
And actually setting user and group in case we connect to the server on behalf of non-root user doesn't make a lot of sense. This user anyway has not permission to
change owner to not-themselves.

To solve this, I've introduced new RSYNC_ADMIN_PARAMS variable. It encapsulates all common rsync params and conditionally sets chown option in case of we connect on behalf of root user.
parent 5208e42d
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@
          mv "$DEFAULT_DOC_ROOT_NAME" "$DOC_ROOT_NAME"
          echo "renamed www to $DOC_ROOT_NAME"
      fi
    - rsync --links --safe-links -avz --chown=$user:$group -e "ssh $SSH_OPTS" $CI_PROJECT_DIR/$DOC_ROOT_NAME/ $DEPLOY_HOST_PATH/$DOC_ROOT_NAME/
    - rsync $RSYNC_ADMIN_PARAMS -e "ssh $SSH_OPTS" $CI_PROJECT_DIR/$DOC_ROOT_NAME/ $DEPLOY_HOST_PATH/$DOC_ROOT_NAME/
  dependencies:
    - setup_environment_vars
  only:
@@ -62,14 +62,14 @@
          echo "renamed www to $DOC_ROOT_NAME"
      fi
    - |
      rsync --links --safe-links -avz --chown=$user:$group -e "ssh $SSH_OPTS" \
      rsync $RSYNC_ADMIN_PARAMS -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
          rsync -avz --chown=$user:$group -e "ssh $SSH_OPTS" /tmp/.settings_extra.php $DEPLOY_HOST_PATH/$DOC_ROOT_NAME/bitrix/
          rsync $RSYNC_ADMIN_PARAMS -e "ssh $SSH_OPTS" /tmp/.settings_extra.php $DEPLOY_HOST_PATH/$DOC_ROOT_NAME/bitrix/
      fi
  dependencies:
    - setup_environment_vars
+7 −0
Original line number Diff line number Diff line
@@ -108,6 +108,13 @@ before_script:
  export group=${group:-"www-data"}
  echo "group=$group" >> cetera_build.env

  if [ "$SSH_USER" = "root" ]; then
      export RSYNC_ADMIN_PARAMS="--links --safe-links -avz --chown=$user:$group"
  else
      export RSYNC_ADMIN_PARAMS="--links --safe-links -avz"
  fi
  echo "RSYNC_ADMIN_PARAMS=$RSYNC_ADMIN_PARAMS" >> cetera_build.env

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