Статья опубликована в рамках: CXIII Международной научно-практической конференции «Научное сообщество студентов XXI столетия. ТЕХНИЧЕСКИЕ НАУКИ» (Россия, г. Новосибирск, 09 мая 2022 г.)
Наука: Информационные технологии
Скачать книгу(-и): Сборник статей конференции
дипломов
ИСПОЛЬЗОВАНИЕ CODESHIP ПРИ РАЗРАБОТКЕ ВЕБ-ПРИЛОЖЕНИЯ
USING CODESHIP IN DEVELOPING A WEB APPLICATION
Nikolai Vasiliev
student, Department of Information Systems and Software Engineering, Baltic State Technical University "VOENMEH" named after D.F. Ustinov,
Russia, St. Petersburg
Anastasiia Barmina
lecturer, Department of Information Systems and Software Engineering, Baltic State Technical University "VOENMEH" named after D.F. Ustinov,
Russia, St. Petersburg
АННОТАЦИЯ
В статье приводится пример использования инструмента непрерывной интеграции и доставки CloudBees Codeship при разработке веб-приложения. Даны рекомендации по конфигурации инструментов управления версиями и развертывания.
ABSTRACT
This article provides an example of using the CloudBees Codeship continuous integration and delivery tool to develop a web application. Recommendations are given on the configuration of version control and deployment tools.
Ключевые слова: веб-приложение; непрерывная интеграция; git; codeship; docker.
Keywords: web application; continuous integration; git; codeship; docker.
В данной статье будет рассмотрено использование инструмента CI/CD CodeShip при разработке веб-приложения, основанного на технологии ASP.NET. Данный пример продемонстрирует применимость методов непрерывной интеграции и непрерывной доставки при разработке различных классов веб-приложений и докажет общую применимость данной методики.
При разработке веб-приложения будет использоваться система управления версиями git, а для развёртывания будут использованы контейнеры Docker. При этом для взаимодействия веб-приложения, развёрнутого во внутренней сети компании будет использован обратный прокси-сервер Traefik.
Docker — это платформа для разработки, доставки и запуска контейнерных приложений. Docker позволяет создавать контейнеры, автоматизировать их запуск и развертывание, управляет жизненным циклом. Он позволяет запускать множество контейнеров на одной хост-машине [1].
Для построения приложения системе непрерывной интеграции потребуется выполнить следующую команду:
dotnet new webapp --no-https --name demoaspnet
Флаг --no-https требуется, чтобы веб-приложение не использовало HTTPS, поскольку вместо этого используется Traefik, который возьмёт на себя работу с SSL [2].
Далее требуется создать файл Docker, который будет хранить образ разрабатываемого веб-приложения, для этого потребуется следующий скрипт:
FROM microsoft/dotnet:2.2-sdk AS build-env
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o out
FROM microsoft/dotnet:2.2-aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app/out .
HEALTHCHECK --interval=5m --timeout=3s \
CMD curl -f http://localhost/ || exit 1
ENTRYPOINT ["dotnet", "demoaspnet.dll"]
В этом скрипте используется многоэтапная сборка, результатом которой будет создание окончательного образа, в котором есть только артефакты проекта. При этом инструкция HEALTHCHECK обеспечит его работоспособность до того, как будут запущены какие-либо зависимые сервисы.
Создание файла докера вручную противоречит практикам CI/CD, поэтому для этого будет использовано средство непрерывной интеграции CloudBees CodeShip.
Для его использования необходимо создать проект на сервере CI и создать файл конфигурации YAML. В случае использование данного инструмента интеграции потребуются два конфигурационных файла – один для хранения настроек контейнеров Docker, и иных внешних средств, используемых на различных шагах конвейера (codeship-services.yml), другой – для хранения непосредственно шагов конвейера (codeship-steps.yml).
Пример файла CodeShip с описанием контейнеров Docker, используемых конвейером CI/CD при развёртывании приложения показан ниже:
myapp:
build:
image: amitsaha/aspnetcore-demo
context: demoaspnet
dockerfile: Dockerfile
curl:
image: pstauffer/curl:latest
depends_on: ["myapp"]
Первый раздел файла настраивает службу myapp — здесь указываются образ Docker, каталог, который необходимо в него поместить (demoaspnet) в качестве содержимого и ранее описанный файл Dockerfile в качестве файла Docker.
Далее описываются зависимые службы, которые также необходимо развернуть для корректной работы разрабатываемого веб-приложения. Список служб может быть обширен, поэтому для примера приведена только одна – curl, которая будет использовать самый свежий из доступных образов данной службы из DockerHub. Для данной службы указано что она является зависимой от создаваемой службы myapp.
Файл codeship-steps.yml, содержащий требуемые шаги конвейера состоит из записей, подобных следующей:
- service: curl
command: curl -I http://myapp
Это выполнит команду curl -I http://myapp внутри созданного контейнера curl. При этом произойдёт сборка требуемого контейнера (и того, от которого он зависит) в случае, если контейнер не был собран до этого.
Это только начало конвейера, которое выполнит сборку самого разрабатываемого веб-приложения, после чего проведёт первичное тестирование собранного веб-приложения с использованием службы curl.
Инструмент непрерывной интеграции CodeShip возьмёт на себя запуск описанного конвейера при каждом обновлении репозитория проекта.
Следующими шагами конвейера должны быть необходимые автоматические тесты, которые позволят убедиться в функциональности разрабатываемого веб-приложения.
После успешного прохождения всех тестов, образ Docker следует добавить в общий реестр для дальнейшего использования.
Далее следует развернуть приложение в рабочей среде. Помимо самого веб-приложения потребуется развернуть контейнер самого Docker и Traefik.
Само развёртывание будет представлять собой выполнение команд Docker, подобных представленным ниже:
docker run -d -p 80:80 -p 443:443 \
-v $PWD/traefik.toml:/etc/traefik/traefik.toml \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $PWD/acme.json:/acme.json \
traefik
docker run \
--label "traefik.backend=aspnetcoredemodemo" \
--label "traefik.frontend.rule=Host:aspnetcoredemo.me" \
--label "traefik.port=80" \
--label "traefik.backend.healthcheck.path=/" \
--label "traefik.backend.healthcheck.interval=5s" \
--label "app=$image" \
-d $image
Данные команды должны будут выполняться как финальные шаги конвейера CI/CD и позволят развернуть созданное веб-приложение и перенаправлять на него внешний трафик средствами Traefik.
Как видно из примера, использование инструментов CI/CD позволяет ускорить развёртывание сложных веб-приложений и настраивать дополнительные службы для автоматического тестирования и перенаправления трафика из внешней сети.
Список литературы:
- Что такое Docker: для чего он нужен и где используется - Блог компании Селектел [электронный ресурс] — Режим доступа. — URL: https://selectel.ru/blog/what-is-docker/ (дата обращения 23.03.2022)
- Traefik [электронный ресурс] — Режим доступа. — URL: https://doc.traefik.io/traefik/ (дата обращения 01.04.2022)
дипломов
Оставить комментарий