Настройка CI/CD на GitHub
Пришлось мне тут срочно перtезжать с bitbacker на GitHub, т.к. битбаскет забанил всех русских разрабов, мудаки…
На битбакете настройка CI/CD решается буквально нажатием пару кнопок, тут же, пришлось повозиться и так расскажу как это было и как настроить быстро за 5 минут буквально. Если знаешь что делать, то делается это быстро, а так потратил пару дней на изучение проблемы.
Я расскажу ТОЛЬКО про настройку CI/CD, без всяких тестов и т.п. только развертывания того, что вы накодили локально и после push, чтобы это быстро задеплоилось на ваш VPS(сервер).
И так ситуация вы создали репозиторий на гитхабе, залили свои локальные изменения, и теперь встал вопрос как это залить на ваш хостинг.
Настройка сервера
Зайдите в папку своего проекта и сделайте инициализацию проекта:
git init
Затем выполните:
git remote add origin git@github.com:feniksdv/microfo.git
Перво-наперво надо сгенерировать локально ваши ssh ключи, если они у вас уже есть и по ssh вы заходите на свой сервер, то этот шаг пропускаем.
Выполните команду, данная командо подходит как для windows, так и для Linux. Для винды нажмите ctrl+r напишите cmd и нажмите ок, а там вводим команду ниже. Для линукса, все выполняемся в терминале.
ssh-keygen
В процессе генерации ключей будут задаваться вопросы, на все отвечаем просто нажатием enter.
Затем у вас в папке .ssh появится два файла id_rsa, id_rsa.pub
У меня сервер крутиться на centos возможно у вас пути могут отличаться.
Берем оба файла и заливаем на сервер в папку root(если у вас есть другой пользователь, то лучше в его папку)/.ssh и прям внутрь этой папки кидаем оба файла.
Дальше если у вас в папке .ssh нет файла authorized_keys, то создаем его. открываем ключ id_rsa и коипуруем из него все в authorized_keys. Все.
Если вы сделали все правильно, то через командную строку можно ввести у себя на компе:
ssh -i .ssh/id_rsa root@ХХ.ХХ.ХХ.ХХ
Вы должны подключиться на сервер свой по ssh без пароля. ХХ.ХХ.ХХ.ХХ – в место это пишите ip своего сервера.
Настройка Actions GitHub
Переходим в свой репозиторий и переходим в settings/ Secrets and variables / Actions
У вас должно получиться так же как и у меня.
- DEPLOY_HOST – тут просто ip вашего сервера.
- DEPLOY_USER – тут имя вашего пользователя.
- DEPLOY_KEY – тут вставляете приватный ключ т.е. содержимое файла id_rsa.
Push
Локально создаем в своем проекте в корне папку с файлом .github/workflows/cicd.yml
и теперь внутрь файла вставляем следующий текст.
name: CICD on: push: branches: - master jobs: deploy: name: deploy only changed-files runs-on: ubuntu-latest if: github.ref == 'refs/heads/master' steps: - name: Checkout code uses: actions/checkout@v3 - name: Run command on remote server uses: D3rHase/ssh-command-action@v0.2.2 with: host: ${{secrets.DEPLOY_HOST}} user: ${{secrets.DEPLOY_USER}} private_key: ${{secrets.DEPLOY_KEY}} command: | /var/www/microfo/data/www/microfo/cicd.sh;
ЗЫ: будут загружаться на сервер, только изменённые файлы.
В этом файле поправьте следующие строки:
- Пятая строка с верху, у меня написано – master, если вы хотите указать другую ветку при пуше в которую должен запускаться сicd, то сделайте это =)
- Последняя строчка command: “/var/www/mocrofo/data/www/mocrofo/” это путь на моем сервере где физически лежит мой проект, у вас он будет другой.
В файле cicd.sh у меня следующие:
#!/bin/bash echo "Script execution started." cd /var/www/microfo/data/www/microfo git pull orign master chown -R microfo:microfo /var/www/microfo/data/www/microfo/ php artisan cache:clear php artisan config:clear php artisan route:clear php artisan view:clear php artisan migrate if [ $? -eq 0 ]; then echo 'git pull success.' else echo 'git pull failure.' exit 1; fi echo "Script execution completed."
Все, пишите замечания, вопросы, дополнения в комментах.
Предыдущая