Как вы настраиваете CI/CD-трубопровод Для серверов без прослушивания?
Этот пост блога объяснит, как использовать Трэвис СИ , Смертная рамка и AVA Testing Framework Чтобы настроить полностью автоматизированную сборку, развертывание и испытательный трубопровод для приложения без сервеса. Это будет использовать реальный пример продукции Безсекретное приложение , построенный с помощью Apache openwhisk и работает на IBM Облачные функции Отказ Трубопровод CI/CD будет выполнять следующие задачи …
- Запустите тесты проекта.
- Развернуть приложение для тестирования среды.
- Запустите принять тесты против тестовой среды.
- Развернуть приложение к производственной среде.
- Запустите дымовые испытания против производственной среды.
Перед погружением в детали настройки трубопровода CI/CD, давайте начнем с указания приложения приложения безвесочного приложения для этого проекта …
Serverless Project — http://apache.jamesthom.as/
Проект « » Apache Openwhisk Release Verification «Проект » — это веб-приложение через серверы без сердца, чтобы помочь коммитателям подтвердить отпуск кандидатов на проект с открытым исходным кодом. Он автоматизирует выполнение шагов проверки от Контрольный список выпуска ASF
Проект состоит из статических веб-активов (HTML, JS, CSS-файлов) и HTTP API. Статические веб-активы размещены страницами GitHub из Репозиторий проекта Отказ HTTP API реализованы как Apache Openwhisk Действия и выставлен с использованием API Gateway услуга. IBM Облачные функции используется для размещения приложения Apache Openwhisk.
Никаких других облачных сервисов, таких как базы данных, необходимы бэкэнда. Открытие информации о кандидате в режиме реального времени извлекается в режиме реального времени путем разбора HTML страница с веб-сайта ASF.
Конфигурация
Смертная рамка (С помощью Plugin-провайдера Apache Presswiskisk ) используется для определения функций без сервеса, используемых в приложении. Конечные точки HTTP также определены в файле конфигурации YAML.
service: release-verfication provider: name: openwhisk runtime: nodejs:10 functions: versions: handler: index.versions events: - http: GET /api/versions version_files: handler: index.version_files events: - http: method: GET path: /api/versions/{version} resp: http ... plugins: - serverless-openwhisk
Рамка обрабатывает все задачи развертывания и конфигурации для приложения. Настройка приложения в новой среде так же просто, как работает неверное развертывание
команда Отказ
Среда
Apache OpenWhisk использует пространства имен Чтобы группировать отдельные пакеты, действия, триггеры и правила. Различные пространства имен могут быть использованы для предоставления изолированных средов для приложений.
IBM Cloud Functions автоматически создает пользовательские пространства имен в платформенных экземплярах. Эти автоматически сгенерированные пространства имен отражают организацию и пространство IBM Cloud и пространство, используемое для доступа к экземпляру. Создание Новые пробелы в организации предоставит дополнительные пространства имен.
Я использую пользовательскую организацию для приложения с тремя различными пространствами: dev , Тест и продлицо .
dev Используется в качестве тестовой среды для развертывания функций во время разработки. Тест Используется конвейером CI/CD для развертывания временного экземпляра приложения во время приемочных испытаний. прод Является ли производственная среда, принимающая внешние действия.
Реквизиты для входа
IBM Cloud Cli Используется для обработки учетных данных IBM Cloud функций. Клавиши API платформы будет использоваться для входа в CLI из системы CI/CD.
Когда выдаются функции CLI CLI (после нацеления нового региона, организации или пространства), ключи API для этих облачных функций экземпляра автоматически извлекаются и сохраняются локально. Смертная рамка знает, как использовать эти локальные учетные данные при взаимодействии с платформой.
Высокая доступность?
Apache OpenWhiskisk Release Verifier не является критическим облачным применением, которое нуждается в « пятью нитьми » доступности. Приложение простаивает большую часть времени. Это не нужно очень доступно Смертная архитектура. Это означает, что строительный трубопровод не должен …
- Разверните экземпляры приложений в нескольких областях облачных областей.
- Установите глобальный балансировщик нагрузки между региональными экземплярами.
- Поддержка « нулевое время простоя от развертывания », чтобы минимизировать время простоя во время развертывания.
- Автоматическое отката к предыдущим версиям по вопросам производства.
Новые развертывания будут просто перезаписать ресурсы в пространстве производственных имен в одном регионе. Если производственная площадка сломана после развертывания, дымовые испытания должны поймать это и по электронной почте, чтобы исправить это!
Тестирование
Учитывая этот инструмент будет использоваться для проверки отпуска кандидатов на проект с открытым исходным кодом, я хотел, чтобы он работал правильно! Неправильные результаты валидации могут привести к опубликованному опубликованному архиву источника.
Я решил сильно полагаться на тесты подразделения, чтобы проверить основную бизнес-логику. Эти тесты обеспечивают правильность работы всех задач валидации, включая проверку подписи PGP, Cryptographic Chasth Chash Contacing, содержимое файла лицензии и другие требования к ASF для выпусков проекта.
Кроме того, я использовал сквозные тесты приема для подтверждения работы API HTTP, как ожидается. HTTP-запросы отправляются на конечные точки API GW, с ответами по сравнению с ожидаемыми значениями. Все имеющиеся кандидаты освобождения проходят через процесс проверки, чтобы проверить ошибки.
Агрегатные тесты
Агрегаты тесты реализованы с AVA Testing Framework Отказ Устройства тесты живут в Блок/тест/
Папка Отказ
NPM тест
Команда псевдоним работает AVA Test/Unit/
Команда для выполнения всех модульных тестов. Эта команда может быть выполнена локально, во время разработки или с трубопровода CI/CD.
$ npm test > release-verification@1.0.0 test ~/code/release-verification > ava test/unit/ 27 tests passed
Приемные тесты
Приемные тесты Проверьте конечные точки API Вернуть ожидаемые ответы на действительные (и недействительные) запросы. Приемные тесты выполняются на конечных точках шлюза API для экземпляра приложения.
Имя хоста, используемое для HTTP-запросов, контролируется с использованием переменной среды ( Host
). Поскольку теми же тест на тестовый набор используется для приема и дымовых испытаний, установка этой переменной среды является единственной конфигурацией, необходимой для запуска тестов против различных сред.
Конечные точки API в тестовых и производственных средах выставляются с использованием различных пользовательских подгруппов ( apache-api.jamesthom.as
и apache-api-test.jamesthom.as
). NPM Сценарии используются Для предоставления команд ( Teasce-Test
& Принятие-prod
), которые устанавливают имя хоста среды перед запуском тестового набора.
"scripts": { "acceptance-test": "HOST=apache-api-test.jamesthom.as ava -v --fail-fast test/acceptance/", "acceptance-prod": "HOST=apache-api.jamesthom.as ava -v --fail-fast test/acceptance/" },
$ npm run acceptance-prod > release-verification@1.0.0 acceptance-prod ~/code/release-verification > HOST=apache-api.jamesthom.as ava -v --fail-fast test/acceptance/ ✔ should return list of release candidates (3.7s) ℹ running api testing against https://apache-api.jamesthom.as/api/versions ✔ should return 404 for file list when release candidate is invalid (2.1s) ℹ running api testing against https://apache-api.jamesthom.as/api/versions/unknown ... 6 tests passed
Приемные тесты также реализуются с помощью структуры тестирования AVA. Все признаки тесты живут в одном Тестовый файл ( Блок/Прием/API.JS
).
CI/CD трубопровод
Когда новые коммиты подтолкнутся к Мастер
Филиал на репозитории проекта, следующие шаги, необходимые для того, чтобы выгнать конвейеров постройки …
- Запустите тесты проекта.
- Развернуть приложение для тестирования среды.
- Запустите принять тесты против тестовой среды.
- Развернуть приложение к производственной среде.
- Запустите дымовые испытания против производственной среды.
Если какой-либо из шагов не удается, конвейер сборки должен остановиться и отправить мне письмо с уведомлением.
Трэвис
Трэвис CI используется для реализации конвейера постройки CI/CD. Трэвис CI использует Пользовательский файл ( .travis.yml
) в репозитории проекта для настройки конвейера сборки. Этот файл YAML определяет команды для выполнения во время каждого этапа построения конвейера. Если какая-либо из команд выходит из строя, сборка остановится на этой фазе, не проводимая.
Вот завершено .travis.yml.yml.yml Файл для этого проекта: https://github.com/jthomas/openwhisk-release-verification/blob/master/.travis.yml
Я использую следующую трамсу CI построить фазы Для реализации трубопровода: Установить С до_script , Сценарий , до_deploy и Развертывание Отказ Команды будут работать в среде сборки Node.js 10, которая предварительно устанавливает языковое время выполнения и менеджер пакетов.
language: node_js node_js: - "10"
установить
В Установить
фаза Мне нужно настроить среду сборки для развертывания приложений и прогонских испытаний.
Это означает установку IBM Cloud CLI, Облачные функции CLI плагин Serverless Framework (с плагином Apache OpenWoSkisk), Framework Test Pream (Avajs) и другие проектные зависимости.
CLI IBM CLI CLI установлен с помощью скрипта оболочки. Запуск CLI Sub-Command устанавливает Плагин облачных функций Отказ
Serverless Framework устанавливается как глобальный пакет NPM (используя NPM -G Установить
). Плагин поставщика Apache OpenWhisk обрабатывается как Нормальная зависимость проекта вместе с тестовой структурой. Оба эти зависимости устанавливаются с использованием NPM.
install: - curl -fsSL https://clis.cloud.ibm.com/install/linux | sh - ibmcloud plugin install cloud-functions - npm install serverless -g - npm install
до_script
Это фаза Используется для запуска модульных тестов, ловить ошибки в основной бизнес-логике, перед настройкой учетных данных (используемых в сценарии Фаза) для приема тестовой среды. Отказы для тестирования подразделений немедленно остановят сборку, пропущенные тесты и развертывание производства.
Пользовательские переменные предоставляют клавишу API, конечную точку, организация и идентификаторы пространства, которые используются для тестовой среды. CLI аутентифицируется с использованием этих значений, прежде чем работать IBMCloud FN API Список
команда. Это обеспечивает учетные данные облачных функций доступны локально, используемые безвесовой структурой.
before_script: - npm test - ibmcloud login --apikey $IBMCLOUD_API_KEY -a $IBMCLOUD_API_ENDPOINT - ibmcloud target -o $IBMCLOUD_ORG -s $IBMCLOUD_TEST_SPACE - ibmcloud fn api list > /dev/null - ibmcloud target
скрипт
С помощью конфигурированной системы сборки приложение может быть развернуто для тестирования среды, а затем запущенные тесты приема. Если тесты развертывания или приема не удаются, построение остановится, пропуская развертывание производства.
Приемные тесты используют переменную среды для настройки тестируемых случаев хоста. NPM запустить принять тест
Команда псевдонима устанавливает это значение для имени хоста тестовой среды ( apache-api-test.jamesthom.as
) Перед запуском тестового набора.
script: - sls deploy - npm run acceptance-test
до_deploy.
Перед развертыванием до производства облачных функций учетных данных необходимо обновить. CLI IBM CLI используется для нацеления производственной среды, прежде чем запустить команду CLI-функций облачных функций. Это обновляет локальные учетные данные с учетными данными производственной среды.
before_deploy: - ibmcloud target -s $IBMCLOUD_PROD_SPACE - ibmcloud fn api list > /dev/null - ibmcloud target
развертывать
Если все этапы разбирательства успешно заканчиваются, приложение может быть развернуто для производства. После этого окончательного развертывания дымовые тесты используются для проверки производственных API, все еще работают, как и ожидалось.
Дымовые испытания — это только те же тесты приемки, выполненные против производственной среды. NPM запустить приемки-прод
Команда псевдонима устанавливает значение конфигурации хоста к производственной среде ( apache-api.jamesthom.as
) Перед запуском тестового набора.
deploy: provider: script script: sls deploy && npm run acceptance-prod skip_cleanup: true
С помощью Skip_cleanup. Параметры листья установлены артефакты из предыдущих фаз в среде сборки. Это означает, что мы не должны повторно установить IBM Cli CLI, неверные рамки или зависимости NPM, необходимые для запуска развертывания производства и дымовых испытаний.
успех?
Если все построить фазы Успешны, последний код проекта должен был развернуть в производственной среде. 💯💯💯.
Если сборка не удалась из-за сбоев тестирования единиц, тестовый набор может быть проведен локально, чтобы исправить любые ошибки. Отказы развертывания могут быть исследованы с использованием журналов выходных данных консоли из TRUVIS CI. Проблемы о принятии теста, против тестируемых или производственных сред, могут быть отладки, войдя в эти среду локально и выполняем тестовый набор из моей машины для разработки.
Вывод
Использование TRAVIS CI с каркасом без сервеса и структурой тестирования JavaScript, я смог настроить полностью автоматизированный конвейер развертывания CI/CD для Apache Openwiskisk Release Community Tool.
Использование конвейера CI/CD, а не ручной подход для развертывания имеет следующие преимущества …
- Больше никаких ручных и прерываемых ошибок развертывается полагаясь на человека 👨💻:)
- Автоматическое отделение и приемочное тестовое тестовое исполнение ошибок до развертывания.
- Производственная среда доступ к системе CI/CI/CI/CD, снижая случайные поломки.
- Все облачные ресурсы должны быть настроены в код. Нет » Снежинка » среды разрешены.
Закончив код для новых функций проекта или исправлений ошибок, все, что мне нужно сделать, это толкать изменения в репозиторий GitHub. Это пожалирует конвейеров постройки TRAVIS CI, который автоматически развернут обновленное приложение к производственной среде. Если есть какие-либо проблемы, из-за неудачных тестов или развертываний, я буду уведомлен по электронной почте.
Это позволяет мне вернуться к добавлениям новых функций для инструмента (и исправления ошибок), а не борьба с развертыванием, управляющими учетными данными для нескольких сред, а затем попытка забывать, чтобы запустить тесты против правильных экземпляров!
Оригинал: «https://dev.to/ibmdeveloper/serverless-ci-cd-with-travis-ci-serverless-framework-and-ibm-cloud-functions-4laj»