保持 GitLab 环境在 Docker 容器中运行

保持 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 runners 不会轻易允许这种情况发生。我刚刚改用了一个 shell 执行器来运行启动和停止所需的 docker 命令:

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

相关内容