Loading .deploy_code_to_server.yml +11 −4 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading .deploy_composer_files_to_server.yml +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: Loading @@ -13,6 +13,8 @@ needs: - job: build_composer artifacts: true - job: setup_environment_vars artifacts: true variables: COMPOSER_SERVER_DIR: vendor/ script: Loading before_script.yml +76 −18 Original line number Diff line number Diff line Loading @@ -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 /^[^.]/'`) Loading @@ -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: Loading Loading
.deploy_code_to_server.yml +11 −4 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading
.deploy_composer_files_to_server.yml +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: Loading @@ -13,6 +13,8 @@ needs: - job: build_composer artifacts: true - job: setup_environment_vars artifacts: true variables: COMPOSER_SERVER_DIR: vendor/ script: Loading
before_script.yml +76 −18 Original line number Diff line number Diff line Loading @@ -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 /^[^.]/'`) Loading @@ -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: Loading