Top.Mail.Ru
Тестируем Rust-проекты с помощью Docker и Makefile


Jun 10, 2025

Тестируем Rust-проекты с помощью Docker и Makefile

Когда проект становится частью CI/CD-пайплайна или работает в гетерогенной среде, удобно использовать контейнеризированную среду для тестирования, чтобы избежать различий в версиях Rust и зависимостях. Ниже — пример того, как это можно сделать с помощью Docker и Makefile.


📁 Структура проекта

project-root/
├── Makefile          # Makefile на верхнем уровне
└── ehatrom/          # Исходный код Rust-проекта
    ├── Cargo.toml
    └── src/
        └── lib.rs

🐋 Dockerfile

В папке ehatrom/ создаём Dockerfile для окружения с nightly Rust и необходимыми компонентами:

FROM rustlang/rust:nightly

WORKDIR /ehatrom

RUN rustup component add rustfmt clippy

Создаём образ:

docker build -t ehatrom-ci ./ehatrom

🛠️ Makefile

На уровень выше (в project-root/) создаём Makefile, чтобы упростить сборку и тестирование:

build:
	docker build -t ehatrom-ci ./ehatrom

ci:
	docker run --rm -it \
		-v "$(PWD)/ehatrom":/ehatrom \
		-w /ehatrom \
		ehatrom-ci \
		bash -c "cargo +nightly clippy --workspace --all-targets -- -D warnings && \
		         cargo build --workspace --all-targets --verbose && \
		         cargo test --workspace --all-targets --verbose"

🚀 Использование

Теперь мы можем:


✅ Что делает make ci

Контейнер запускает следующую цепочку команд:

cargo +nightly clippy --workspace --all-targets -- -D warnings
cargo build --workspace --all-targets --verbose
cargo test --workspace --all-targets --verbose

Это гарантирует:


🧪 Вывод

Такой подход полезен, если:

Также он хорошо масштабируется в более сложные пайплайны и может быть использован в GitHub Actions, GitLab CI или Drone CI.