Простой сценарий непрерывного развертывания - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь написать простой сценарий непрерывного развертывания, который связан с нашим локальным Git сервером и развертывает изменения нашего кода на каждом sh pu *, в зависимости от ветки.

Сервер использует cPanel (в случае, если это имеет значение), и мы используем Gitolite для детального контроля доступа к репозиториям Git. Все это находится на одном сервере.

Вот код, который я пытался собрать. Должен признать, что у меня почти нет опыта Linux администрирования или Bash, но теоретически код должен быть работоспособным:

#!/bin/bash

deploy() {
        [[ $1 =~ /home/([^/]+)/ ]] && USERNAME=${BASH_REMATCH[1]}

        if sudo test -d "$1/.git"
        then
                sudo git --work-tree $1 clean -fd
                sudo git --work-tree $1 reset --hard $2
                sudo git --work-tree $1 pull origin $2
        else
                sudo git clone -b $2 --no-local --no-hardlinks . $1
        fi

        sudo composer update --no-plugins --no-scripts -d $1

        sudo chown -R -h $USERNAME:$USERNAME $1
        sudo find $1 -type d -exec chmod 711 {} \;
        sudo find $1 -type f -exec chmod 644 {} \;
}

if [ ! -z "$GL_OPTION_STAGING_PATH" ]
then
        deploy "$GL_OPTION_STAGING_PATH" "staging" #&>/dev/null
fi


if [ ! -z "$GL_OPTION_PRODUCTION_PATH" ]
then
        deploy "$GL_OPTION_PRODUCTION_PATH" "master" #&>/dev/null
fi

Пользователь, запускающий этот код (с именем «git»), должен имеют разрешения sudo, потому что после команды pull ему необходимо изменить права доступа к файлам и владельца файлов, чтобы они соответствовали пользователю cPanel, которому файлы выводятся.

Проблема с этим кодом в том, что он выглядит как Git создает какие-то ссылки (жесткие ссылки или символические ссылки, не знаю), и когда я выполняю команду chown, она портит исходные (голые) файлы репо.

Я отладил его до уровня, когда Выяснил, что эти ссылки делает команда "сбросить". Когда я вызываю перезагрузку и делаю "чавн", получается беспорядок. Так что в основном я думаю, что мне нужен параметр или другой способ избежать создания таких ссылок между файлами. Я хочу, чтобы голое репо и рабочие копии были полностью разделены. Есть идеи?

...