Lista zadań i pipeline'y w Pythonie: makefile/invoke/fabric

Kacper Sieradziński
Kacper Sieradziński
20 stycznia 2025Edukacja1 min czytania

Lista zadań i pipeline'y to nieodzowny element profesjonalnej automatyzacji — pozwalają na standardyzację komend, tworzenie powtarzalnych procesów oraz zapewnienie, że każdy w zespole używa tych samych narzędzi i metodologii. Zamiast pamiętać długie, skomplikowane komendy, możesz stworzyć proste aliasy i pipeline'y, które wykonują sekwencje zadań w odpowiedniej kolejności. Python oferuje zaawansowane narzędzia do zarządzania zadaniami, takie jak invoke (do lokalnych zadań), fabric (do zadań zdalnych) oraz klasyczne Makefile, które pozwalają na definiowanie zależności między zadaniami i automatyzację całych workflow'ów budowania, testowania i wdrażania projektów.

Obraz główny Lista zadań i pipeline'y w Pythonie: makefile/invoke/fabric

Invoke - lista zadań

Biblioteka invoke do definiowania zadań:

Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 # tasks.py from invoke import task @task def test(ctx): """Uruchamia testy.""" ctx.run("pytest tests/") @task def lint(ctx): """Sprawdza jakość kodu.""" ctx.run("flake8 .") ctx.run("black --check .") @task def format(ctx): """Formatuje kod.""" ctx.run("black .") @task(pre=[lint, test]) def build(ctx): """Buduje projekt.""" ctx.run("python setup.py build") # Użycie: invoke test, invoke lint, invoke build

Makefile dla Pythona

Klasyczny Makefile dla automatyzacji:

MAKEFILE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 .PHONY: help install test lint format clean help: @echo "Dostępne komendy:" @echo "make install- Instalacja zależności" @echo "make test - Uruchomienie testów" @echo "make lint - Sprawdzenie jakości kodu" @echo "make format - Formatowanie kodu" @echo "make clean- Czyszczenie plików tymczasowych" install: pip install -r requirements.txt test: pytest tests/ lint: flake8 . black --check . format: black . clean: find . -type d -name __pycache__ -exec rm -r {} + find . -type f -name "*.pyc" -delete rm -rf .pytest_cache .coverage htmlcov # Użycie: make install, make test, make lint

Fabric - zdalne zadania

Automatyzacja zadań zdalnych:

Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # fabfile.py from fabric import task @task def deploy(c): """Wdraża aplikację.""" c.run("git pull origin main") c.run("pip install -r requirements.txt") c.run("systemctl restart myapp") @task def backup(c): """Tworzy backup bazy danych.""" c.run("pg_dump mydb > backup.sql") # Użycie: fab deploy, fab backup

Pipeline'y z zadania zależne

Tworzenie złożonych pipeline'ów:

Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 from invoke import task @task def clean(ctx): """Czyści pliki tymczasowe.""" ctx.run("rm -rf build dist *.egg-info") @task def test(ctx): """Uruchamia testy.""" ctx.run("pytest tests/") @task def build(ctx): """Buduje pakiet.""" ctx.run("python setup.py sdist bdist_wheel") @task(pre=[clean, test], post=[build]) def release(ctx): """Kompletny proces wydania.""" print("Proces wydania rozpoczęty") # Dodatkowe kroki # Użycie: invoke release (uruchomi clean, test, release, build)

Podsumowanie

Zarządzanie zadaniami w Pythonie obejmuje:

  • Invoke do lokalnych zadań
  • Makefile dla standardowych komend
  • Fabric dla zadań zdalnych
  • Pipeline'y z zależnościami między zadaniami

Te narzędzia standardyzują procesy i zwiększają powtarzalność w projektach Python.


➡️ Następny artykuł

Po opanowaniu zarządzania zadaniami, naucz się automatyzować CI/CD:

Automatyzacja CI/CD w Pythonie: GitHub Actions — kompletny przewodnik po automatyzacji testów, kontroli jakości kodu i wdrożeń z poziomu GitHub Actions.