Поддерживайте работу среды GitLab в контейнере Docker.

Я собираюсь развернуть среду для тестирования. Это PHP-приложение, и я мог бы просто обслуживать PHP-файлы с помощью встроенного сервера.

Мой .gitlab-ci.yml прост:

      docker_test:
  stage: deploy
  image: php:7.2
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
  environment:
    name: development/$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
    url: $CI_SERVER_PROTOCOL://$CI_SERVER_HOST:8000/$CI_PROJECT_PATH_SLUG/$CI_ENVIRONMENT_SLUG:8000
    auto_stop_in: 1 hour
  script:
    - php -S 0.0.0.0:8000 -t /builds/$CI_PROJECT_PATH

Я хочу, чтобы при запуске конвейера среда была работоспособной, контейнер должен быть запущен и работать, и тестер должен иметь возможность доступа к нему по URL-адресу. Через час или при нажатии кнопки «Стоп» среда должна остановиться, а контейнер Docker остановлен и удален. Однако я пока не понимаю, как обеспечить работу контейнера в фоновом режиме. Когда конвейер выполняется, он зависает в сценарии, а когда он отменяется, контейнер Docker останавливается.

Есть идеи, как этого добиться?

1 ответ

Кажется, любители докеров не допустят этого легко. Я только что перешел на исполнительную оболочку, которая запускает необходимые команды докера для запуска и остановки:

      docker_test:
  stage: deploy
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
  environment:
    name: development/$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
    url: $CI_SERVER_PROTOCOL://$CI_SERVER_HOST:8000/$CI_PROJECT_NAME/$CI_ENVIRONMENT_SLUG:8000
    auto_stop_in: 1 hour
  script: docker run --name $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME --rm -dt -v $CI_PROJECT_DIR:/app:Z -p 8000:8000 php:7.2 php -S 0.0.0.0:8000 -t /app

stop_docker_test:
  stage: deploy
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
  environment:
    name: development/$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
    action: stop
  when: manual
  script: docker stop $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
Другие вопросы по тегам