Оптимизируйте развертывание серверной части Python с помощью автоматической непрерывной интеграции с помощью Github Actions

Оптимизируйте развертывание серверной части Python с помощью автоматической непрерывной интеграции с помощью Github Actions

2 марта 2023 г.

В этой статье вы не узнаете, как выполнить первое развертывание на любом VPS по вашему выбору. На чем он сосредоточен, так это на том, чтобы показать вам, как постоянно автоматизировать развертывание вашего внутреннего приложения Python. Приступим.

Недавно вы разработали приложение и развернули его, а команда клиента или продукта попросила вас добавить новую функцию. Или вы исправляете ошибку, и вам нужно, чтобы эти изменения отражались на рабочем сервере.

Чем ты занимаешься? Укусить пальцы? (Э-э…) Почесать затылок? Сказать, что нельзя? (Хорошо, а теперь давай!)

Скорее всего, у вас есть исходный код приложения на Github. Если это так, то вам не о чем беспокоиться. Я покажу вам, как легко автоматизировать процесс непрерывного развертывания приложений.

Действия на GitHub

Что такое GA?

GA, вероятно, означает бога Аврама. Кто знает? Нет?

Хорошо.

«GitHub Actions — это платформа непрерывной интеграции и непрерывной доставки (CI/CD), которая позволяет автоматизировать процесс сборки, тестирования и развертывания. Вы можете создавать рабочие процессы, которые создают и тестируют каждый запрос на включение в ваш репозиторий, или развертывать объединенные запросы на вытягивание в рабочей среде». - docs.github.com

Приведенное выше заявление говорит о том, что мы можем подготовить (запустить модульные тесты и т. д.) наше приложение перед его развертыванием на сервере разработки, промежуточной подготовки, подготовки к производству и даже на рабочем сервере.

Рабочий процесс действий

Рабочий процесс действия — это настраиваемый автоматизированный процесс, который запускает одно или несколько заданий. Рабочие процессы определяются файлом YAML, зарегистрированным в вашем репозитории, и будут запускаться при запуске по событию, вручную или по заданному расписанию.

Запустите новый сеанс терминала и напишите следующую команду, чтобы создать каталог рабочих процессов:

mkdir .github/workflows/

Создайте файл рабочего процесса и назовите его python-deploy.yml. Скопируйте и вставьте следующие коды во вновь созданный рабочий процесс:

name: Pull Changes & Deploy
on:
    push:
        branches:
          - dev

jobs:
    pull_changes:
        runs-on: ubuntu-latest
        steps:
          - name: Pull New Changes
            uses: appleboy/ssh-action@v0.1.5
            with:
                host: ${{ secrets.SSH_HOST }}
                port: ${{ secrets.SSH_PORT }}
                username: ${{ secrets.SSH_USERNAME }}
                key: ${{ secrets.SSH_KEY }}
                script: |
                  cd /path/to/project_dir
                  git pull origin dev

    deploy_backend:
        runs-on: ubuntu-latest
        steps:
        - name: Deploy Backend
          uses: appleboy/ssh-action@v0.1.5
          with:
            host: ${{ secrets.SSH_HOST }}
            port: ${{ secrets.SSH_PORT }}
            username: ${{ secrets.SSH_USERNAME }}
            key: ${{ secrets.SSH_KEY }} 
            script: |
                cd /path/to/project_dir
              # ---------------------------------
              # INSERT COMMAND(S) HERE
              # ---------------------------------

Давайте разберем описанный выше рабочий процесс:

  • название — это то, как вы хотели бы назвать этот рабочий процесс.

* on: — это триггер, который вы хотите прослушивать, чтобы сообщить этому рабочему процессу, когда его запускать. В нашем случае, когда есть новый пуш на ветку «dev».

* задания: это задания, для запуска которых вам нужен рабочий процесс.

* pull_changes: — это имя задания, которое будет отвечать за внесение новых изменений в наше приложение.

* deploy_backend: — это имя задания, которое будет отвечать за развертывание нашего приложения.

* runs-on: образ Docker, на котором должен выполняться этот рабочий процесс. Я бы порекомендовал ubuntu-latest, так как это предпочтительный контейнер для тестирования вашего кода и, скорее всего, того, на чем ваш код будет работать в производственной среде.

* шаги: это список шагов, которые должен выполнить рабочий процесс.

* имя: название шага.

* использует appleboy/ssh-action@v0.1.5: это действие позволит вам выполнять удаленные команды ssh в среде (dev, staging, pre-prod, prod) вы хотите. Подробнее читайте здесь

.

* с: это обязательные конфигурации, необходимые для действия.

* host: IP-адрес сервера, к которому вы хотите подключиться по SSH.

* port: номер порта сервера, к которому вы хотите подключиться по SSH. Значение по умолчанию: 22

.

* имя пользователя: пользователь сервера, к которому вы хотите подключиться по SSH. По умолчанию используется ubuntu

.

* ключ: закрытый ключ сервера или файла pem для экземпляра ec2.

* сценарий: это список команд, которые вы хотите выполнить для действия. Замените /path/to/project_dir на каталог, в котором находится код вашего приложения. Замените dev на ветку, из которой вы хотите получить изменения.

<цитата>

Не забудьте добавить секреты: SSH_HOST, SSH_PORT, SSH_USERNAME и SSH_KEY в секреты вашего репозитория. .

В разделе, где вы видите: "ВСТАВЬТЕ КОМАНДЫ ЗДЕСЬ", пожалуйста, замените весь комментарий на команды, которые вы хотите выполнить.

Примеры команд развертывания Framework

1). Для Django обновите следующее:

# using docker - option: 1
# --------------------------------
# run database migrations, etc
sudo docker-compose run <compose_service_name> python manage.py makemigrations
sudo docker-compose run <compose_service_name> python manage.py migrate

# using gunicorn - option 2
# -----------------------------------
source venv/bin/activate
python manage.py makemigrations
python manage.py migrate
systemctl restart gunicorn # add other services like celery

Замените <compose_service_name> именем службы.

2). Для FastAPI обновите следующее:

# using docker - option 1
# --------------------------------------------------------------------------
# run database migrations, etc
sudo docker-compose run <compose_service_name> alembic upgrade head


# without docker - option 2
# -------------------------------
# run database migrations, etc
# alembic upgrade head
# -------------------------------

Замените <compose_service_name> именем службы.

3). Для Flask обновите следующее:

# using docker - option 1
# -----------------------------
# run database migrations, etc
sudo docker-compose run <compose_service_name> alembic upgrade head


# without docker - option 2
# -------------------------------
# run database migrations, etc
# alembic upgrade head
# -------------------------------

Замените <compose_service_name> именем службы.

Секреты настройки и настройки Час истины

Час истины вот-вот наступит. Я буду использовать серверную систему бухгалтерской книги, которую я создал с помощью FastAPI для демонстрационных целей.

Вы можете следить за приложением, которое хотите повторно развернуть. Перейдите на вкладку настроек вашего репозитория, перейдите на вкладку «Безопасность» и нажмите «Действия». Найдите изображение ниже того, что вы увидите, если предпримете шаги:

screenshot showing the actions page: secrets and variables

Нажмите кнопку с надписью «Новый секрет репозитория» и добавьте секреты, необходимые для работы рабочего процесса действия.

screenshot showing how to add a new repository secret

Помните, что вы добавляете следующее: SSH_HOST, SSH_PORT, SSH_USERNAME и SSH_KEY.

screenshot showing added secrets

Исходный код вашего приложения готов к повторному развертыванию. Когда вы сделаете новый толчок, вы увидите уведомление в виде желтого кружка в крайнем правом углу коммита. Если вы нажмете на нее, вы увидите задания, которые были поставлены в очередь на выполнение или выполняются в данный момент.

screenshot showing jobs queued to run / that are running

Нажмите на любую из вакансий «Подробнее». Если вы добавите секреты репозитория и обновите файл рабочего процесса python-deploy.yml в соответствии со своими потребностями. Вы должны увидеть, что ваше приложение было успешно повторно развернуто.

screenshot showing the workflow action ran successfully

Заключение

Если вы дочитали до этого места, поздравляем.

Вы доверяли мне; и следовал за мной от начала до самого конца. Для меня большая честь.

Использование непрерывного развертывания (CD) позволяет командам часто и быстро предоставлять клиентам обновления. Внедрение CI/CD приводит к повышению скорости работы всей команды, включая выпуск новых функций и исправление ошибок.

Должен сообщить вам, что я прекращу работу инстанса EC2, чтобы мне не выставили счет, ха-ха.

Я активен в LinkedIn. Свяжитесь со мной, если у вас есть какие-либо вопросы или вы ищете бэкэнд-инженера, который присоединился бы к вашей удаленной команде разработчиков/разработчиков продукта.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE