Docker также предоставляет команду cp
, которую можно использовать для извлечения файла из контейнера. Например, чтобы извлечь двоичный файл docker cp abc123:/greeter ./
, где вам следует заменить abc123
идентификатором контейнера, из которого следует извлечь файл.
Даже если ваш проект предназначен для внутреннего использования, Docker все равно может быть хорошим инструментом для организации развертываний, поскольку каждая версия проекта существует в своем собственном образе. Это позволяет различным инструментам, таким как Kubernetes, легко масштабировать и развертывать после их настройки.
Через менеджер(ы) пакетов
Другой способ распространения двоичного файла — добавить его в выбранные вами менеджеры пакетов. Хотя описание того, как это сделать, немного выходит за рамки этой книги, стоит упомянуть, что это может значительно улучшить пользовательский опыт (UX), поскольку пользователь может устанавливать/обновлять ваш проект точно так же, как они делают остальные пакеты. Некоторые распространенные менеджеры пакетов, которые можно использовать, включают следующее:
• Snap
• macOS's Homebrew
• Arch Linux's AUR
В конечном счете, это необязательный шаг. Предоставления предварительно собранного двоичного файла и инструкций по сборке из исходного кода, скорее всего, будет достаточно для начала.
Резюме
Благодаря единственному двоичному файлу и переносимости двоичных файлов Crystal развертывание приложения, по сути, так же просто, как копирование двоичного файла куда-либо и его запуск. Нет необходимости включать исходный код или исключать непроизводственные файлы в процесс сборки, поскольку все это делается за вас, когда используются правильные параметры.
Однако, несмотря на то, что этот процесс относительно прост, в сочетании с выполнением тестов и созданием документации, требуется выполнить довольно много шагов, которые через некоторое время могут стать утомительными для выполнения вручную каждый раз, когда новая версия готова к выпуску. В следующей и заключительной главе мы рассмотрим, как автоматизировать некоторые из этих процессов.
Дальнейшее чтение
Существует гораздо больше материалов, связанных с развертыванием проектов, чем мы можем охватить в этой главе. Ознакомьтесь со следующими ссылками для получения дополнительной информации по темам, которые мы рассмотрели:
• https://crystal-lang.org/reference/guides/static_linking. html
• https://docs.docker.com/develop/develop-images/baseimages
17. Автоматизация
Поздравляем с тем, что вы зашли так далеко! Мы рассмотрели многое, но, увы, дошли до последней главы. В нескольких предыдущих главах мы рассмотрели, как превратить работающий проект в полностью пригодный для использования и простой в обслуживании путем написания тестов, документирования того, как он работает, и распространения его среди конечных пользователей. Однако можно легко забыть выполнить один или несколько из этих шагов, что сведет на нет всю цель. В этой главе мы собираемся изучить, как автоматизировать эти процессы, а также несколько новых, чтобы вам вообще о них не приходилось думать! При этом мы собираемся охватить следующие темы:
• Код форматирования.
• Линтинг-код
• Непрерывная интеграция с GitHub Actions.
Технические требования
Требования к этой главе следующие:
• Рабочая установка Crystal.
• Специальный репозиторий GitHub.
Вы можете обратиться к
Все примеры кода, использованные в этой главе, можно найти в папке
Форматирование кода
Некоторые из самых горячих споров в программировании могут возникать из-за самых незначительных вещей, например, следует ли использовать табуляции или пробелы для отступов или сколько каждого из них. Crystal пытается предотвратить возникновение подобных сценариев, предоставляя стандартизированный, осуществимый стиль кода, который следует использовать в каждом проекте.
Вот некоторые примеры того, что делает форматтер:
• Удаляет лишние пробелы в конце строк.
• Отменить экранирование символов, которые не нужно экранировать, например F\oo
и Foo
.
• При необходимости добавляет/удаляет отступы, включая замену ;
с символами новой строки в некоторых случаях.