@@ -532,6 +532,197 @@ Plan -> Code -> Build -> Test
532532
533533Если автоматически не предложит, то всегда можно найти в поиске.
534534
535+ При нажатии кнопки ` Configure ` github предложит нам добавить файл ` .github/workflows/django.yml ` , причем название файл
536+ можно поменять, а путь нет, потому что как мы уже знаем ` .github ` это скрытая папка с точки зрения линукса, а ` workflow `
537+ папка в которой github будет искать файлы конфигурации CI
538+
539+ Стандартный файл ` django.yml ` :
540+
541+ ``` yaml
542+ name : Django CI
543+
544+ on :
545+ push :
546+ branches : [ "master" ]
547+ pull_request :
548+ branches : [ "master" ]
549+
550+ jobs :
551+ build :
552+
553+ runs-on : ubuntu-latest
554+ strategy :
555+ max-parallel : 4
556+ matrix :
557+ python-version : [ 3.7, 3.8, 3.9 ]
558+
559+ steps :
560+ - uses : actions/checkout@v3
561+ - name : Set up Python ${{ matrix.python-version }}
562+ uses : actions/setup-python@v3
563+ with :
564+ python-version : ${{ matrix.python-version }}
565+ - name : Install Dependencies
566+ run : |
567+ python -m pip install --upgrade pip
568+ pip install -r requirements.txt
569+ - name : Run Tests
570+ run : |
571+ python manage.py test
572+
573+ ` ` `
574+
575+ Давайте рассмотрим это файл
576+
577+ ` name` - название, тут может быть что угодно
578+
579+ ` on` - команда которая описывает когда должна выполнятся текущая конфигурация, по дефолту это пуш в ветку мастер, или
580+ пул реквест на мастер, так как мы уже запретили пуш на мастер, этот пункт можно удалить
581+
582+ ` jobs` - описание самих выполняемых команд
583+
584+ ` build` - просто название, тут можно было написать, что угодно
585+
586+ ` matrix/python-version` - список версий питона на которых необходимо запускать команды, предлагаю оставить только 3.9
587+
588+ ` steps` - выполняемые шаги и зависимые модули. В нашем примере используется два дополнительных
589+ модуля `actions/checkout@v3`, `actions/setup-python@v3`. Первый для взаимодействия с пул реквестом, второй для запуска
590+ питона. И сами команды, обновить `pip`, запустить установку `requirements.txt` и запуск команды `python manage.py test`.
591+
592+ Весь этот процесс запустится на виртуальной машине принадлежащей github, но нам это и не важно, главное, что мы получим
593+ результат выполнения тестов, и если тесты не пройдут, то мы не сможем смержить пул реквест.
594+
595+ После наших небольших изменений мы получим такой файл :
596+
597+ ` ` ` yaml
598+ name: Django CI
599+
600+ on:
601+ pull_request:
602+ branches: [ "master" ]
603+
604+ jobs:
605+ build:
606+
607+ runs-on: ubuntu-latest
608+ strategy:
609+ max-parallel: 4
610+ matrix:
611+ python-version: [ 3.9 ]
612+
613+ steps:
614+ - uses: actions/checkout@v3
615+ - name: Set up Python ${{ matrix.python-version }}
616+ uses: actions/setup-python@v3
617+ with:
618+ python-version: ${{ matrix.python-version }}
619+ - name: Install Dependencies
620+ run: |
621+ python -m pip install --upgrade pip
622+ pip install -r requirements.txt
623+ - name: Run Migrations # run migrations to create table in side car db container
624+ run: python manage.py migrate
625+ - name: Run Tests
626+ run: |
627+ python manage.py test
628+
629+ ` ` `
630+
631+ Сохраняем. Если мы добавили невозможность прямого коммита в мастер, то гитхаб предложит нам создать новую ветку и пул
632+ реквест, не забудьте его смержить!!!
633+
634+ По сути в максимально простом виде CI степ уже настроен, и для определённых условий будет даже работать.
635+
636+ Но, чего тут не хватает? Настройки базы данных! Ведь для запуска тестов, практически всегда необходима база данных!
637+
638+ Давайте добавим её в настройки.
639+
640+ Первым делом, нам необходимо добавить базу в описание запуска флоу. И добавить степ с миграцией нашей базы.
641+
642+ ` ` ` yaml
643+ name: Django CI
644+
645+ on:
646+ pull_request:
647+ branches: [ "master" ]
648+
649+ jobs:
650+ build:
651+
652+ runs-on: ubuntu-latest
653+ services:
654+ postgres: # we need a postgres docker image to be booted a side car service to run the tests that needs a db
655+ image: postgres
656+ env: # the environment variable must match with app/settings.py if block of DATBASES variable otherwise test will fail due to connectivity issue.
657+ POSTGRES_USER: postgres
658+ POSTGRES_PASSWORD: postgres
659+ POSTGRES_DB: github-actions
660+ ports:
661+ - 5432:5432 # exposing 5432 port for application to use
662+ # needed because the postgres container does not provide a healthcheck
663+ options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
664+ strategy:
665+ max-parallel: 4
666+ matrix:
667+ python-version: [ 3.9 ]
668+
669+ steps:
670+ - uses: actions/checkout@v3
671+ - name: Set up Python ${{ matrix.python-version }}
672+ uses: actions/setup-python@v3
673+ with:
674+ python-version: ${{ matrix.python-version }}
675+ - name: Install Dependencies
676+ run: |
677+ python -m pip install --upgrade pip
678+ pip install -r requirements.txt
679+ - name: Migrate
680+ run: python manage.py migrate
681+ - name: Run Tests
682+ run: |
683+ python manage.py test
684+
685+ ` ` `
686+
687+ В параметре `env` можно увидеть настроенные юзер, пароль и название базы.
688+
689+ Обратите внимание на параметр `options`, он нужен, что-бы мы выполняли все команды только после того как postgres
690+ загрузится.
691+
692+ Так же нам необходимо убедиться, что у нас в `requirements.txt` указан `psycopg2`
693+
694+ И внести изменения в `settings.py`
695+
696+ ` ` ` python
697+ if os.getenv('GITHUB_WORKFLOW'):
698+ DATABASES = {
699+ 'default': {
700+ 'ENGINE': 'django.db.backends.postgresql',
701+ 'NAME': 'github-actions',
702+ 'USER': 'postgres',
703+ 'PASSWORD': 'postgres',
704+ 'HOST': 'localhost',
705+ 'PORT': '5432'
706+ }
707+ }
708+ else:
709+ DATABASES = {
710+ 'default': {
711+ 'ENGINE': 'django.db.backends.postgresql',
712+ 'NAME': os.getenv('DB_NAME'),
713+ 'USER': os.getenv('DB_USER'),
714+ 'PASSWORD': os.getenv('DB_PASSWORD'),
715+ 'HOST': os.getenv('DB_HOST'),
716+ 'PORT': os.getenv('DB_PORT')
717+ }
718+ }
719+
720+
721+ ` ` `
722+
723+ Обратите внимание переменная `GITHUB_WORKFLOW` будет добавлена автоматически при запуске.
724+
725+ Теперь наш CI полностью готов к работе!
535726
536727
537728
0 commit comments