Поддерживайте работу среды 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