Сборка, тестирование, доставка приложения на onescript с помощью gitlab-ci







Сборка, тестирование, доставка приложения на onescript с помощью gitlab-ci на примере портирования на onescript функции daСклонение.

Будем использовать:

onescript

gitlab-ci

docker (как вариант раннера в gitlab-ci)

Функция daСклонение не раз была использована для печатных форм, в которых необходимо склонять ФИО, должности, ect…Основная причина использования именно этого метода была в том, что ВПФ должны были выполняться в безопасном режиме, а в нем ни NameDecl, ни morpher ни могут быть использованы.

При портировании пришлось заменить методы Вычислить и ЧислоПрописью, метод ЧислоПрописью «временно» взят из этой публикации. Реализованы тесты из примеров описания функции.

Итак, к делу. Исходники будем держать на github (куда без него), а ci будет на gitlab. По сути на gitlab будет зеркало нашего репозитория из github. Для связи репозиторие создадим новый проект на gitlab, и выберим вариант CI/CD for external repo. Инструкция по интеграции с github

CI/CD for external repo

После интеграции сервисов нажмем кнопку Connect repositories from GitHub, и выбираем наш репозиторий из github.

Для запуска CI/CD в gitlab необходимо наличие файла .gitlab-ci.yml в корне репозитория. Для начала создадим файл следующего содержания

image: "evilbeaver/onescript:latest" # для всех этапов укажем что будем использовать образ контейнера с последней версией oscript

stages: # здесь указываются этапы нашего конвеера
- test

test: # задача - имя задачи, тут можно указать даже на кириллице, например: 'Тесты'
stage: test # к какому типу этапов относится задача
script: # что будем выполнять в задаче
- opm install 1testrunner # установим библиотеку для тестирования
- 1testrunner -runall ./tests # запустим тесты

После коммита, в gitlab можно понаблюдать за запуском теста по ссылке https://gitlab.com/myprofile/myproject/-/jobs/

job_test

Для себя решаем, что подобная задача подойдет только для dev ветки и features веток. Конвейер для релизной ветки должен содержать задачи для сборки пакета, установки и тестирования, доставки пакета.

Содержание файла .gitlab-ci.yml:

image: "evilbeaver/onescript:latest"

# добавляем еще два типа этапов
stages:
- build
- test
- deploy

test:
stage: test
script:
- opm install 1testrunner
- 1testrunner -runall ./tests
except: # исключаем эту задачу из мастер ветки или тегов
- master
- tags

build:
stage: build
script:
# в файле packagedef устанавливаем имя тега как версию пакета
- grep '%ver' -P -R -I -l packagedef | xargs sed -i 's/%ver/'$CI_COMMIT_REF_NAME'/g'
- mkdir ./build
- opm build . -out ./build # собираем пакет
artifacts:
paths:
- build/*.ospx # говорим что из задачи надо забрать все файлы с расширением .ospx из папки  build
expire_in: 1 day # храним артефактов этой задачи 1 день
only: # говорим что задача только для тегов
- tags

test-master:
stage: test
script:
# изменяем Использовать ".." на Использовать далее устанавливаемый пакет daSklonenie в файле с тестами
- grep '#Использовать ".."' -P -R -I -l ./tests/Тесты_daСклонение.os | xargs sed -i 's/#Использовать ".."/#Использовать daSklonenie/g'
# ставим наш пакет, в эту задачу он был передан как артефакт
- opm install -f ./build/daSklonenie-$CI_COMMIT_REF_NAME.ospx
# далее все как и в первом тесте
- opm install 1testrunner
- 1testrunner -runall ./tests
only: # говорим что задача только для тегов
- tags

daSklonenie:
stage: deploy
variables:
GIT_STRATEGY: none # скажем что не надо получать данные из репозитория, работать будем только с артефактов
script:
# переместим файл в основной каталог - для красоты
- mv ./build/daSklonenie-$CI_COMMIT_REF_NAME.ospx ./daSklonenie-$CI_COMMIT_REF_NAME.ospx
artifacts:
name: "daSklonenie-$CI_COMMIT_REF_NAME" # укажем имя архива артефактов
paths:
- daSklonenie-$CI_COMMIT_REF_NAME.ospx # укажем какой файл будем забирать как артефактов задачи
only:
- tags

Сделаем коммит с тегом версии и проследим за нашим конвеером.

pepiline

Cборка

build

Установка и тестирования

test-master

Доставка пакета

deploy

В данном случае описан простой пример доставки, но можно добавить сообщение в месседжеры, отправка пакета по почте, на ftp или обновление файла в публикации на infostart по api

После выполнения всего конвеера можно скачать результат из интерфейса gitlab, сделать это можно из коммита, конвеере, задачи доставки, тега, ветки, во всех местах где имеется значок облака.

artifacts

Как быстро попробовать

  1. форкаем репозиторий на github
  2. настраиваем интеграцию gitlab и github
  3. создаем проект на gitlab c вариантом CI/CD for external repo
  4. указываем, какой проект из github будем подключать
  5. делаем изменения в проекте, коммит
  6. устанавливаем тег
  7. ждем завершения конвейера, смотрим артифакты

3 Comments

  1. kirillkr

    Вот такую бы статью по созданию и тестированию например внешней печатной формы для БСП, было бы круто.

    Reply
  2. pallid

    (2) да, но там не про docker будет, а как в статье https://infostart.ru/public/826495/ надо будет сначала настроить раннеры на тестовом контуре.

    есть в плане описание vanessa-behavior + vanessa-runner + gitlab-ci

    Reply
  3. daMaster

    Мда, использовать в коде «Вычислить» было не лучшей идеей, можно было банально в структуру загнать все эти таблицы правил)

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *