Skip to content
This repository was archived by the owner on Jul 2, 2024. It is now read-only.

Commit 5579d15

Browse files
Finish CD
1 parent 90f421f commit 5579d15

File tree

1 file changed

+127
-3
lines changed

1 file changed

+127
-3
lines changed

lesson49.md

Lines changed: 127 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
![](https://www.memecreator.org/static/images/memes/5391580.jpg)
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+
![](https://miro.medium.com/max/998/1*mdosfNhm7Lmp20b8LEW7tQ.png)
842+
843+
Не забываем, что это только одна из тысяч возможных конфигураций, причём не самая удачная на самом деле еще и упускающая
844+
многие нужные детали и подробности! В крупных компаниях всей этой настройкой занимаются отдельные люди, их
845+
называют `DevOps`, сокращение от Development and Operation, а еще бывают `DevSecOps` - Development Secure Operation.
846+
847+
Но в небольших компаниях вся эта настройка тоже на вас :)
848+
849+
850+
727851

728852

729853

0 commit comments

Comments
 (0)