Spec-Zone.ru › Crystal

CircleCI

В этом разделе мы будем использовать CircleCI в качестве сервиса непрерывной интеграции. В двух словах, CircleCI автоматизирует сборку, тестирование и развертывание вашего программного обеспечения. Сервис поддерживает разные языки программирования и, в частности, язык Crystal.

В этом разделе мы рассмотрим примеры конфигурации, чтобы увидеть, как CircleCI реализует некоторые концепции непрерывной интеграции.

Орбы CircleCI

Прежде чем перейти к примерам, стоит упомянуть орбы CircleCI. Согласно официальной документации:

Орбы определяют повторно используемые команды, исполнители и задания, позволяя объединить часто используемые фрагменты конфигурации в одну строку кода.

В нашем случае мы будем использовать орб Crystal

Сборка и запуск спецификаций

Простой пример с использованием latest

Начнем с простого примера. Мы запустим тесты с использованием последней версии Crystal:

.circleci/config.yml
workflows:
  version: 2
  build:
    jobs:
      - crystal/test

orbs:
  crystal: manastech/crystal@1.0
version: 2.1

Вот и всё! Это было просто! Орбы предоставляют уровень абстракции, благодаря которому файл конфигурации становится более понятным и удобным для чтения.

Если вам интересно, что делает задание crystal/test, вы всегда можете посмотреть исходный код.

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

Использовать ночную сборку Crystal так же просто:

.circleci/config.yml
workflows:
  version: 2
  build:
    jobs:
      - crystal/test:
          name: test-on-nightly
          executor:
            name: crystal/default
            tag: nightly

orbs:
  crystal: manastech/crystal@1.0
version: 2.1

Использование определенной версии Crystal

.circleci/config.yml
workflows:
  version: 2
  build:
    jobs:
      - crystal/test:
          name: test-on-0.30
          executor:
            name: crystal/default
            tag: 0.30.0

orbs:
  crystal: manastech/crystal@1.0
version: 2.1

Установка пакетов shards

Об этом не нужно беспокоиться, поскольку задание crystal/test выполняет команду орба crystal/shard-install.

Установка бинарных зависимостей

Нашему приложению или некоторым shards могут потребоваться библиотеки и пакеты. Эти бинарные зависимости можно установить с помощью команды Apt.

Вот пример установки пакета разработки libsqlite3:

.circleci/config.yml
workflows:
  version: 2
  build:
    jobs:
      - crystal/test:
          pre-steps:
            - run: apt-get update && apt-get install -y libsqlite3-dev

orbs:
  crystal: manastech/crystal@1.0
version: 2.1

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

Теперь запустим тесты с использованием внешнего сервиса (например, MySQL):

.circleci/config.yml
executors:
  crystal_mysql:
    docker:
      - image: 'crystallang/crystal:latest'
        environment:
          DATABASE_URL: 'mysql://root@localhost/db'
      - image: 'mysql:5.7'
        environment:
          MYSQL_DATABASE: db
          MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'

workflows:
  version: 2
  build:
    jobs:
      - crystal/test:
          executor: crystal_mysql
          pre-steps:
            - run:
                name: Waiting for service to start (check dockerize)
                command: sleep 1m
            - checkout
            - run:
                name: Install MySQL CLI; Import dummy data
                command: |
                        apt-get update && apt-get install -y mysql-client
                        mysql -h 127.0.0.1 -u root --password="" db < test-data/setup.sql

orbs:
  crystal: manastech/crystal@1.0
version: 2.1

Примечание

Явное checkout в pre-steps нужно, чтобы файл test-data/setup.sql был доступен.

Кэширование

При использовании задания crystal/test кэширование включено по умолчанию, поскольку внутри оно использует команду command with-shards-cache

To the extent possible under law, the persons who contributed to this workhave waived
all copyright and related or neighboring rights to this workby associating CC0 with it.
https://crystal-lang.org/reference/1.2/guides/ci/circleci.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API