0

我使用 Laravel Vapor 来部署基于 Laravel 的微服务。到目前为止,如果应用程序及其依赖项不是太大的话,这非常有效。但如果是这样,那就有点棘手了。Vapor 为这种情况提供了 Docker 运行时,您可以部署最大 10GB 大小的应用程序。

对于本地开发,我们通常使用 Laradock.io,因为它简单灵活。

这意味着如果我们从本地环境部署,很容易进入工作区容器并运行 vapor deploy 命令。在为工作空间容器启用 Docker 客户端后,它可以正常与蒸汽 Docker 运行时一起使用。

但是现在我们将部署过程集成到 Gitlab CI Pipeline 中。这对于我们使用 Vapor PHP 运行时的小型服务非常有效。但对于 Docker 运行时,我对 CI 部署感到绝望。

docker 运行时需要一个已安装的 docker 实例,将在其中调用 vapor。这意味着在 Gitlab-ci.yml 中,我必须添加一个安装了 Docker 和 PHP 的图像来调用 Vapor 脚本。

因此,我在 laradock 工作区容器上创建了一个 docker 映像库,但 Gitlab-runner 总是退出并显示错误消息 no docker deamon is available。

这是我的 GitLab-CI yml 的相关部分(图像仅在本地可用):

testing:
  image: 
    name: lexitaldev/vapor-docker-deploy:latest
    pull_policy: never
  securityContext:
    privileged: true
  environment: testing
  stage: deploy
  only:
    - test
  script:
    - composer install
    - php vendor/bin/vapor deploy test

这是具体的输出:

  Error Output:                                                                
  ================                                                             
  Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the   
  docker daemon running? 

我尝试使用标准的“laravelphp/vapor:php80”图像并在脚本部分安装 docker。

before_script:
      - apk add docker
      - addgroup root docker

但没有任何帮助。docker.sock 似乎有问题。

有人设法将 Vapor Docker 运行时部署添加到 CI 脚本吗?

最好的,迈克尔

4

1 回答 1

0

我想告诉你,你只需要添加Service: dind,但是在你这样做之后,它会抛出一个错误,与 Gitlab 为你的管道创建的图像有关。所以你需要用 、 和 来创建一个volumes跑步privileged flagtags

我做到了,gitlab-runner在我的机器上使用。

sudo gitlab-runner register -n \
    --url {{ your_url }} \
    --registration-token {{your_token}} \
    --executor docker \
    --description "{{ Describe your runner }}" \
    --docker-image "docker:20.10.12-alpine3.15" \
    --docker-privileged \
    --docker-volumes="/certs/client" \
    --docker-volumes="cache" \
    --docker-volumes="/var/run/docker.sock:/var/run/docker.sock"
    --tag-list {{ a_tag_for_your_pipeline }}

完成此操作后,您需要docker stable versiongitlab-ci.yml文件中使用 a 。出于某种原因,当我尝试使用version 20latest

image: docker:stable
services:
    -   name: docker:stable:dind

before_script:
    - echo $CI_JOB_TOKEN | docker login $CI_REGISTRY -u $CI_REGISTRY_USER --password-stdin

build:
    tags:
        - {{the tag you defined in your runner}}
    variables:
        IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
    script:
        - echo $IMAGE_TAG
        - docker build -t $CI_REGISTRY_IMAGE -f {{your Dockerfile}} .
        - docker push $CI_REGISTRY_IMAGE

所有的变量都是之前在 Gitlab 中定义的,不用担心,你可以“复制粘贴”。此外,当您需要在 Gitlab 容器中注册 Docker 容器时,我添加了 Gitlab 在其文档中提到的一些建议。

于 2022-02-22T17:20:06.157 回答