与docker运动员的GitLab Ci – 多阶段

即时通讯设置我的第一个GitLab Cipipe道,包括docker运行我的项目。 我想把我的pipe道分成几个阶段,所以我创build了“build”,“test”和“clean-build”。

在这种情况下一切工作正常:

stages: - build - test - clean image: docker:latest services: - docker:dind before_script: - export RELEASE=${CI_BUILD_REF_NAME} - docker version build: stage: build tags: - sendis-dind script: - echo "Hallo in Build Stage" test: stage: test tags: - sendis-dind script: - echo "Hallo in TEST Stage" clean-build: stage: clean tags: - sendis-dind script: - echo "Hallo beim Clean Up" when: always 

所有3个阶段都成功运行

但是这个失败了:

 stages: - build - test - clean image: docker:latest services: - docker:dind before_script: - export RELEASE=${CI_BUILD_REF_NAME} - docker version build: stage: build tags: - sendis-dind script: - apk add --update py-pip - pip install docker-compose - docker --version - docker-compose --version - docker-compose -p ${RELEASE} build - docker-compose -p ${RELEASE} up -d test: stage: test tags: - sendis-dind script: - docker exec ${RELEASE}_phpfpm_1 bash -c "cd /app; composer install; make runTests" clean-build: stage: clean tags: - sendis-dind script: - docker-compose -p ${RELEASE} down --volumes when: always 

从第二阶段收到以下消息

 Running with gitlab-ci-multi-runner 9.1.1 (6104325) on sendis-dind-runner (8b9eca1e) Using Docker executor with image docker:latest ... Starting service docker:dind ... Pulling docker image docker:dind ... Using docker image docker:dind ID=sha256:559dd16b4e0a64d9de2447d3de234743046443f770bf5226f45f9b7f9c68887b for docker service... ERROR: Preparation failed: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? Will be retried in 3s ... Using Docker executor with image docker:latest ... Starting service docker:dind ... Pulling docker image docker:dind ... Using docker image docker:dind ID=sha256:559dd16b4e0a64d9de2447d3de234743046443f770bf5226f45f9b7f9c68887b for docker service... ERROR: Preparation failed: Error response from daemon: Conflict. The container name "/runner-8b9eca1e-project-140-concurrent-0-docker" is already in use by container "db166f7894856c245c6a4f5318326c5f3b6ab82d82157961d18b079444153113". You have to remove (or rename) that container to be able to reuse that name. Will be retried in 3s ... Using Docker executor with image docker:latest ... Starting service docker:dind ... Pulling docker image docker:dind ... Using docker image docker:dind ID=sha256:559dd16b4e0a64d9de2447d3de234743046443f770bf5226f45f9b7f9c68887b for docker service... ERROR: Preparation failed: Error response from daemon: Conflict. The container name "/runner-8b9eca1e-project-140-concurrent-0-docker" is already in use by container "db166f7894856c245c6a4f5318326c5f3b6ab82d82157961d18b079444153113". You have to remove (or rename) that container to be able to reuse that name. Will be retried in 3s ... ERROR: Job failed (system failure): Error response from daemon: Conflict. The container name "/runner-8b9eca1e-project-140-concurrent-0-docker" is already in use by container "db166f7894856c245c6a4f5318326c5f3b6ab82d82157961d18b079444153113". You have to remove (or rename) that container to be able to reuse that name. 

不同的阶段只能彼此共享工件,但它们是不同的docker集装箱。 这意味着如果在构build阶段运行docker-compose up -d ,则容器不会在testing阶段运行。

将dind和gitlab-ci结合起来只在非常具体的用例中是必需的。 在你的情况下,你根本不需要后悔。 您可以简单地在testing步骤中使用php-fpm图像,因为gitlab-ci已经在docker上运行了。

 test: stage: test image: <your php-fpm image here> script: - cd /app - composer install - make runTests