2016-12-14 111 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 +亭子安装命令和大口的任务。