2017-05-08 51 views
5

即時設置我的第一個GitLab Ci流水線包括碼頭運行我的項目。我想將我的管道分成幾個階段,所以我創建了「構建」,「測試」和「清理構建」。GitLab Ci與碼頭運動員 - 多個階段

在這種情況下,一切工作正常:

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. 

回答

0

不同階段只與對方共享工件,但他們是單獨的碼頭集裝箱。這意味着如果您在構建階段運行docker-compose up -d,則容器不會在測試階段運行。

將dind與gitlab-ci結合使用僅在非常具體的用例中是必需的。在你的情況下,你根本不需要後顧之憂。您可以在測試步驟中簡單地使用php-fpm圖像,因爲gitlab-ci已經在docker上運行。

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