@@ -422,8 +422,6 @@ CI/CD - Continuous Integration / Continuous Deployment
422422
423423![ ] ( https://habrastorage.org/getpro/habr/upload_files/29f/f1c/c39/29ff1cc39f1ccbfb7e93ad2e31c509e9.png )
424424
425- ![ ] ( https://www.memecreator.org/static/images/memes/5391580.jpg )
426-
427425Непрерывная интеграция (Continuous Integration, CI) и непрерывная поставка (Continuous Delivery, CD) представляют собой
428426культуру, набор принципов и практик, которые позволяют разработчикам чаще и надежнее развертывать изменения программного
429427обеспечения.
@@ -581,7 +579,7 @@ jobs:
581579
582580` jobs` - описание самих выполняемых команд
583581
584- ` build` - просто название, тут можно было написать, что угодно
582+ ` build` - просто название, тут можно было написать что угодно
585583
586584` matrix/python-version` - список версий питона на которых необходимо запускать команды, предлагаю оставить только 3.9
587585
@@ -633,6 +631,8 @@ jobs:
633631
634632По сути в максимально простом виде CI степ уже настроен, и для определённых условий будет даже работать.
635633
634+ 
635+
636636Но, чего тут не хватает? Настройки базы данных! Ведь для запуска тестов, практически всегда необходима база данных!
637637
638638Давайте добавим её в настройки.
@@ -724,6 +724,130 @@ else:
724724
725725Теперь наш CI полностью готов к работе!
726726
727+ # ### Теперь рассмотрим правую часть схемы (CD)
728+
729+ Release -> Deploy -> Operate -> Monitor
730+
731+ - Release - Выпустить продукт. По сути, когда код оказался в ветке мастер, продукт релизнут.
732+
733+ - Deploy - Загрузка и развёртывание кода на сервере.
734+
735+ - Operate - Провести все необходимые для работы операции, в нашем случае, пересобрать статику и перезапустить NGINX и
736+ gunicorn.
737+
738+ - Monitor - Убедиться что действия успешны. В нашем случае просто обновить сайт и увидеть, что всё хорошо
739+
740+ На самом деле для того, что бы собрать CD и у гитхаба и у практически любого другого инструмента существует большое
741+ кол-во разных уже встроенных инструментов, но так как сейчас мы хотим сделать всё наглядно, то и все команды я пропишу
742+ вручную
743+
744+ *Не желательно использовать такой способ на реальных проектах, это только демонстрация логики!!!*
745+
746+ Для того что бы заставить гитхаб выполнять CD мы создадим еще один воркфлоу, который будет выглядеть примерно так
747+
748+ ` ` ` yaml
749+ name: Django CD
750+
751+ on:
752+ push:
753+ branches: [ "master" ]
754+
755+ jobs:
756+ deploy:
757+ runs-on: ubuntu-latest
758+ strategy:
759+ max-parallel: 4
760+ matrix:
761+ python-version: [ 3.9 ]
762+ steps:
763+ - name: deploy command
764+ uses: JimCronqvist/action-ssh@master
765+ with:
766+ command: |
767+ source venv/bin/activate
768+ cd project_name; git pull
769+ python manage.py collectstatic --no-input
770+ sudo systemctl restart gunicorn; sudo systemctl restart nginx
771+ hosts: ${{ secrets.HOST }}
772+ privateKey: ${{ secrets.PRIVATE_KEY}}
773+
774+ ` ` `
775+
776+ Давайте разбираться, что именно будет делать такой файл.
777+
778+ Срабатывать он будет на push на ветку master. Но мы же запретили пуш в ветку? Прямой да, но при мёрже пулл реквеста
779+ выполняется точно такой же пуш. А значит этот ворк флоу, будет срабатывать при мёрже нашего пулл реквеста, что нам и
780+ нужно
781+
782+ Название новой джобы, `deploy`, просто что бы удобно было читать логи.
783+
784+ Мы будем запускать python команды, а значит нам понадобится раздел `strategy`, точно такой же как для CI.
785+
786+ И добавим один единственный шаг, который выполнит ряд команд сразу на нашем сервере. Вообще это не лучшее решение, но
787+ для наглядности, это самый удобный способ продемонстрировать CD
788+
789+ Мы воспользуемся сторонним модулем `JimCronqvist/action-ssh`
790+
791+ В качестве параметров передадим `command`, `hosts`, `privateKey`.
792+
793+ ` hosts` - Параметр в котором мы укажем куда именно нужно подключаться (в нашем случае url который выдаёт нам амазон)
794+
795+ ` privateKey` - Закрытый ключ, который выдал нам амазон при создании сервера.
796+
797+ Обратите внимание, в обоих случаях в качестве значения я указываю `${{ secrets.VAR_NAME }}`, что это такое?
798+
799+ Это переменные для Github-actions, мы же не хотим показывать путь к нашему серверу, или тем более ключи от него,
800+ конфигурационных файл всё еще лежит в репозитории
801+
802+ Как их создать?
803+
804+ *Settings > Secrets > Action* - и там можно создавать переменные.
805+
806+ И давайте разберём какие команды я указал выполнить.
807+
808+ ` ` ` yaml
809+ source venv/bin/activate
810+ cd project_name; git pull
811+ python manage.py collectstatic --no-input
812+ sudo systemctl restart gunicorn; sudo systemctl restart nginx
813+ ` ` `
814+
815+ 1. Активировать виртуальное окружение, так как мы собираемся собирать статику через `manage.py` этот шаг нам необходим
816+ 2. Перейти в папку с проектом и спулить последние изменения
817+ 3. Собрать статику, параметр --no-input позволит сделать это без дополнительных подтверждений
818+ 4. Перезапустить сервисы Nginx и Gunicorn
819+
820+ Название проекта и путь к виртуальному окружению можно было так же скрыть через SECRETS
821+
822+ Мерж пулл реквеста это `release`
823+
824+ Шаги 1-2 это `deploy`
825+
826+ Шаги 3-4 это `operate`
827+
828+ Остаётся только `monitor`, в нашем случае мы сделаем это руками
829+
830+ Создадим любые видимые изменения (например поменять что-то в html, или заменить статический файл), в новой ветке,
831+ допустим `cicd_test`
832+
833+ Создадим пулл реквест, посмотрим как гитхаб не позволит нам смержить его, пока не пройдёт шаг с тестами.
834+
835+ Смержим после успешных тестов.
836+
837+ В разделе actions посмотрим как выполняется деплой, после чего проверим, что изменения действительно вступили в силу.
838+
839+ Радуемся, что простейший CI/CD работает.
840+
841+ 
842+
843+ Не забываем, что это только одна из тысяч возможных конфигураций, причём не самая удачная на самом деле еще и упускающая
844+ многие нужные детали и подробности! В крупных компаниях всей этой настройкой занимаются отдельные люди, их
845+ называют `DevOps`, сокращение от Development and Operation, а еще бывают `DevSecOps` - Development Secure Operation.
846+
847+ Но в небольших компаниях вся эта настройка тоже на вас :)
848+
849+
850+
727851
728852
729853
0 commit comments