2016-12-14 74 views
1

因此,在合併之前環境部署在功能分支上進行審查是很好的選擇。我有10多個具有相似結構和相同碼頭圖像的項目。前端和後端的php框架有一些問題。 我做出.gitlab-ci.yml有點變化:GitLab CI審查環境與碼頭

deploy:review: 
    stage: deploy 
    script: 
    - rsync -av --delete httpdocs/ /home/gitlab-runner/dev_env/$CI_BUILD_REF_NAME.$CI_PROJECT_NAME.$CI_PROJECT_NAMESPACE 
    environment: 
    name: review/$CI_BUILD_REF_NAME 
    url: http://$CI_BUILD_REF_NAME.$CI_PROJECT_NAME.$CI_PROJECT_NAMESPACE.env.mydomain.com 
    only: 
    - branches 
    except: 
    - master 

而且我配置用於加載文件夾nginx的每一個子域。這對於審查前面的部分非常有用。 但我想使用docker作爲後端部分。所以我需要以某種方式在gitlab所在的服務器上啓動docker。然後我需要保持所有的端口生成,也許nginx重定向例程。最後一部分,合併後或幾天後,我需要匆忙審查碼頭工人。我認爲這https://github.com/jwilder/nginx-proxy可以幫助我控制端口,但我需要生成它們(使用CI構建ID作爲端口似乎是越野車,有一天我會建立#65536),仍然有關自動啓動/停止的問題/銷燬容器。

可能是有一些開源Docker雲解決方案的獨立服務器?

+0

所以我想kubernetes可能是一個解決方案。但是,在審覈結束並自動刪除審覈環境後,仍然存在關於端口重用的問題。 – MadDocNC

+1

jwilder/nginx-proxy - 完全獲取端口例程。 – MadDocNC

回答

0

第一部分解決。

jwilder/nginx-proxy - 完全獲取端口例程。

我上startap運行代理:

docker run -d -p 80:80 -p 443:443 --name "dnginx" -v /root/certs:/etc/nginx/certs -v /var/run/docker.sock:/tmp/docker.sock:ro -v /var/log/nginx-proxy/:/var/log/nginx/ jwilder/nginx-proxy 

然後運行每個容器是這樣的:

sudo docker run -d --name "nginx-test" --expose 80 --env VIRTUAL_HOST=test.domain.com kitematic/hello-world-nginx 

注VIRTUAL_HOST = test.domain.com和--expose 80

- -env VIRTUAL_HOST = test.domain.com 會說nginx-proxy這個子域與容器鏈接

--expose 80 如果您的容器不公開端口本身。這將在碼頭網絡內打開80端口。而nginx-proxy會自動生成新的配置,爲你的子域添加部分。

第二部分解決:

我做了我的碼頭工人在亞軍亞軍gitlab特權config.toml。然後我的亞軍的工作是這樣的:

deploy to review: 
    image: docker:latest 
    tags: 
    - privileged 
    stage: deploy 
    script: 
    - mkdir -p /home/devenv/$CI_PROJECT_NAMESPACE-$CI_PROJECT_NAME-$CI_BUILD_REF_NAME/project 
    - cp -r ./* /home/devenv/$CI_PROJECT_NAMESPACE-$CI_PROJECT_NAME-$CI_BUILD_REF_NAME/project 
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY 
    - (docker stop $CI_PROJECT_NAMESPACE-$CI_PROJECT_NAME-$CI_BUILD_REF_NAME && docker rm $CI_PROJECT_NAMESPACE-$CI_PROJECT_NAME-$CI_BUILD_REF_NAME) || echo "nothing to stop, starting new container" 
    - docker run -d --env VIRTUAL_HOST="$CI_BUILD_REF_NAME.$CI_PROJECT_NAME.$CI_PROJECT_NAMESPACE.mydomain.com" --name "$CI_PROJECT_NAMESPACE-$CI_PROJECT_NAME-$CI_BUILD_REF_NAME" -v /home/devenv/$CI_PROJECT_NAMESPACE-$CI_PROJECT_NAME-$CI_BUILD_REF_NAME/project:/home/project -v /home/devenv/$CI_PROJECT_NAMESPACE-$CI_PROJECT_NAME-$CI_BUILD_REF_NAME/logs:/var/logs myrepo.com:4567/group/projectimage 
    - docker exec $CI_PROJECT_NAMESPACE-$CI_PROJECT_NAME-$CI_BUILD_REF_NAME /bin/sh /home/project/build.sh 
    environment: 
    name: review/$CI_BUILD_REF_NAME 
    url: http://$CI_BUILD_REF_NAME.$CI_PROJECT_NAME.$CI_PROJECT_NAMESPACE.mydomain.com 
    only: 
    - branches 
    except: 
    - master 

哪裏build.sh是NPM +亭子安裝命令和大口的任務。