Apache Airflow 2.2: практический курс: Деплой Apache Airflow / Настройка CI/CD через GitHub Actions
К моменту этого шага у нас уже должна сформироваться полная картина действий. У нас есть все необходимые данные для настройки CI/CD:
Осталось привести код для автоматизации деплоя через fabric и YAML-файл для запуска GitHub Actions:
import os
from fabric import Connection, task
home = os.path.expanduser('~')
dags_path = os.path.join(home, 'airflow', 'dags')
repo_path = os.path.join(home, 'repositories', 'dataeng_dags')
env_path = os.path.join(home, 'venvs', '.airflow', 'bin', 'activate')
@task
def deploy(context):
with Connection('your_server.com') as conn:
with conn.cd(repo_path):
with conn.prefix(f'source {env_path}'):
conn.run('git pull')
conn.run('pip install -r requirements.txt')
conn.run(f'cp -R dags/* {dags_path}')
Сохраните код под названием fabfile.py
в корне вашего проекта с DAGами. Вам лишь необходимо отредактировать пути. Если разбирать его по шагам, то он выполняет следующие действия:
dags_folder
на ваш репозиторий.А теперь исходный код для GitHub Actions:
name: Airflow DAGs deployment
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: clone repo
uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.8.12
- name: Install SSH key
uses: shimataro/ssh-key-action@v2.3.1
with:
key: ${{ secrets.DEPLOY_KEY }}
name: id_rsa
known_hosts: ${{ secrets.KNOWN_HOSTS }}
config: |
Host <your_server.com>
HostName <your_server.com>
User <username>
IdentityFile ~/.ssh/id_rsa
Port 22
- name: Install python dependencies
run: |
python -m pip install --upgrade pip
pip install fabric==2.6.0
- name: Run fabfile
run: fab deploy
Тут также стоит дать пояснения по шагам:
actions/checkout
3.8.12
fabric
, чтобы запустить наш fabfile
с инструкциями.Готово! Итак, что нужно сделать чтобы всё заработало:
fabfile.py
.github/workflows/deploy.yml
относительно корня репозиторияВсе выполненные или выполняющиеся Workflow можно смотреть в репозитории во вкладке Actions: