diff --git a/.circleci/README.md b/.circleci/README.md new file mode 100644 index 0000000..64cf8d9 --- /dev/null +++ b/.circleci/README.md @@ -0,0 +1,37 @@ +# Непрерывная интеграция (CI/CD) для проекта "Individual Task 1" + +## Обзор + +Данный проект использует CircleCI для автоматизации процессов сборки, тестирования и контейнеризации. + +## Конфигурация + +Конфигурация CI/CD находится в файле `.circleci/config.yml` и включает следующие этапы: + +### 1. Сборка проекта + +- Использует официальный образ .NET 8.0 SDK +- Восстанавливает зависимости проекта +- Выполняет сборку проекта в режиме Release + +### 2. Тестирование + +- Запускает программу с тестовыми данными +- Проверяет корректность вывода и результатов + +### 3. Сборка и проверка Docker-образа + +- Собирает Docker-образ на основе Dockerfile +- Запускает контейнер для проверки работоспособности +- Логирует вывод контейнера для анализа + +## Как использовать + +1. Настройте проект в CircleCI, связав его с GitHub/GitLab репозиторием +2. При каждом пуше в репозиторий автоматически будет запускаться процесс CI/CD +3. Результаты выполнения можно отслеживать в интерфейсе CircleCI + +## Примечания + +- Для локального тестирования CI/CD процесса можно использовать [CircleCI CLI](https://circleci.com/docs/local-cli) +- Для успешного завершения процесса необходимо, чтобы все этапы выполнялись без ошибок \ No newline at end of file diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..794f6c7 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,63 @@ +version: 2.1 + +jobs: + build: + docker: + - image: mcr.microsoft.com/dotnet/sdk:8.0 + + steps: + - checkout + - run: + name: Восстановление зависимостей + command: dotnet restore "Individual Task 1/Individual Task 1.fsproj" + - run: + name: Сборка проекта + command: dotnet build "Individual Task 1/Individual Task 1.fsproj" -c Release + - persist_to_workspace: + root: . + paths: + - Individual Task 1 + - .git + + test: + docker: + - image: mcr.microsoft.com/dotnet/sdk:8.0 + + steps: + - attach_workspace: + at: . + - run: + name: Запуск на тестовых данных + command: cd "Individual Task 1" && dotnet run + + docker_build: + machine: + image: ubuntu-2204:current + + steps: + - attach_workspace: + at: . + - run: + name: Сборка Docker образа + command: docker build -t euler-105:${CIRCLE_SHA1} -f "Individual Task 1/Dockerfile" "Individual Task 1" + - run: + name: Запуск контейнера + command: | + docker run --name euler-test euler-105:${CIRCLE_SHA1} + docker logs euler-test + - run: + name: Очистка контейнера + command: docker rm euler-test + when: always + +workflows: + version: 2 + build_test_deploy: + jobs: + - build + - test: + requires: + - build + - docker_build: + requires: + - test \ No newline at end of file diff --git a/Makefile b/Makefile index d781fae..547299c 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,7 @@ help: @echo " make help - Показать это сообщение" @echo " make docker-build - Собрать Docker образ" @echo " make docker-run - Запустить проект в Docker" + @echo " make ci-local - Запустить CircleCI локально" clean: dotnet clean @@ -17,3 +18,7 @@ docker-build: docker-run: docker compose up +ci-local: + circleci config validate + circleci local execute +