Concourse CI — как запускать функциональные тесты?

мы находимся в середине процесса перехода с Jenkins на Concourse CI, и до сих пор все было довольно гладко. Но теперь у меня проблема, которую я не знаю, как решить. Я хотел бы получить какие-либо советы от сообщества.

То, что я пытаюсь сделать, - это работа, которая может запускать интеграционные или функциональные (веб) тесты с использованием Selenium. Для нас есть несколько вопросов:

  1. Для запуска веб-тестов мне нужно настроить базу данных (и, возможно, поисковую систему, прокси и т. д.) прокси, чтобы максимально точно имитировать производственную среду. В идеале он должен быть настроен с помощью docker-compose.
  2. Эта служба базы данных должна работать параллельно с моими тестами.
  3. Эта служба базы данных не должна ничего возвращать, ни ошибки, ни успеха, потому что она только запускает базу данных и ничего больше
  4. Мои веб-тесты не должны запускаться, пока база данных не будет готова
  5. Эта служба базы данных должна быть остановлена ​​после завершения всех веб-тестов.

Как видите, задача довольно нетривиальная. Конечно, я могу создать большой убер-контейнер, в котором будет все, что мне нужно, но это плохое решение. Другой вариант — создать для этого shell-скрипт, но это недостаточно гибко.

Есть ли какой-нибудь пример того, как я мог бы реализовать это, или передовой опыт для этой проблемы?

Спасибо!


person Ilja Hämäläinen    schedule 20.06.2016    source источник


Ответы (3)


Начиная с версии 1.3.0 вы можете запускать Docker-compose в задаче: https://github.com/concourse/concourse/issues/324

Похоже, это работает:

jobs:
  - name: docker-compose
    public: true
    serial: true
    plan:
      - do:
        - task: docker-compose
          timeout: 20m
          privileged: true
          config:
            platform: linux
            image_resource:
              type: docker-image
              source: {repository: "mumoshu/dcind", tag: "latest"}
            run:
              path: sh
              args:
                - -exc
                - |
                  source /docker-lib.sh
                  start_docker
                  docker ps
                  docker-compose version
person Benedict Dodd    schedule 28.06.2016
comment
Я попробовал ваше предложение, и оно работает. Может быть, код задачи выглядит немного коряво, но теперь я могу запускать более сложные тесты, чем Unit-тесты. Ваше здоровье! - person Ilja Hämäläinen; 07.07.2016

Это комментарий от автора Concourse:

На хосте нет двоичного файла или сокета Docker — они просто используют серверную часть Garden (вероятно, Guardian). Concourse работает на уровне абстракции выше Docker, поэтому предоставление какой-либо магии там на самом деле не имеет смысла.

Единственное, чего не хватает после версии 1.3, — это то, что Docker требует, чтобы вы сами настраивали cgroups. Я забыл, как это раздражает. Я бы хотел, чтобы они сделали то, что делает Guardian, и автоматически настроили его, но что поделаешь.

Итак, полный набор инструкций:

Используйте или создайте образ с докером, например. докер: динд. В начале задачи выполните следующее: https://github.com/concourse/docker-image-resource/blob/master/assets/common.sh#L1-L40 Запустите Docker с помощью демона docker &.

Затем вы можете запустить docker-compose и друзей как обычно.

Недостатком этого является то, что вы будете получать изображения каждый раз. # 230 решит эту проблему.

В конечном счете, #324 (комментарий) — это то направление, в котором я хочу двигаться.

См. здесь https://github.com/concourse/concourse/issues/324

как и в принятом ответе, данные архива Slack удаляются (из-за лимита Slack)

Образ докера, специально предназначенный для варианта использования: https://github.com/meAmidos/dcind.

person HVNSweeting    schedule 09.03.2017

Мне это не кажется таким уж сложным. Я написал пост о том, как создать и запустить нечто подобное здесь. Я использую несколько разных контейнеров для стека и средства запуска тестов и запускаю все из официального образа docker:dind с установленным на нем docker-compose...

Помимо обычного набора ресурсов CI для извлечения ресурсов и т. Д. Выполнение тестового прогона будет состоять из:

  1. Запуск Интернета, отдыха и других сервисов с помощью docker-compose up.
  2. Запуск службы Testrunner и запуск наборов тестов на веб-странице, которая взаимодействует с остальным уровнем, который, в свою очередь, зависит от ответов других служб.
  3. Выполнение docker-compose down после завершения выполнения теста и определение кода возврата задачи (0 = сбой, 1 = успех) на основе кода возврата набора тестов.

Чтобы аккуратно настроить и удалить стек и запустить тест, вы можете сделать что-то вроде приведенного ниже (возможно, вы могли бы использовать зависит если ваш сервис не запущен при запуске теста, у меня он работает без него)

# Setup the SUT stack:
docker-compose up -d
‌‌
# Run the test-runner container outside of the SUT to be able to teardown the SUT when testing is completed:
docker-compose run --rm test-runner --entrypoint '/entrypoint.sh /protractor/project/conf-dev.js --baseUrl=http://web:9000/dist/ --suite=my_suite'
‌‌
# Store the return-code from the tests and teardown:
rc=$?
docker-compose down
echo "exit code = $rc "
kill %1
exit $rc
person David Karlsson    schedule 26.12.2016
comment
Спасибо за ваш комментарий! Да, у меня получилось что-то похожее на ваше решение, и я недавно говорил об этом. Вот мои слайды и ссылки: speakerdeck.com/w32blaster/introduction-to-concourseci - person Ilja Hämäläinen; 27.12.2016
comment
Ссылка на статью мертва. - person Richard; 04.12.2019