GitLab CI审查环境与docker工人

所以在合并之前环境部署在function分支上进行审查是很好的select。 我有10多个具有相同结构和相同docker图像的项目。 前端和后端的php框架都有一些问题。 我在.gitlab-ci.yml中做了一些修改:

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 

而我configurationnginx加载每个子域的文件夹。 这对于复习前面的部分非常有用。 但是我想用docker作为后端部分。 所以我需要以某种方式在gitlab所在的服务器上启动docker。 那么我需要保持所有的端口生成,也许nginxredirect例程。 最后一部分,合并后或几天后,我需要匆匆审查docker。

我相信这个https://github.com/jwilder/nginx-proxy可以帮助我控制端口,但我需要生成它们(使用CI构buildID作为端口似乎是越野车,有一天,我会build立#65536)并仍然有关自动启动/停止/销毁容器的问题。

可能是有一些开源Docker云解决scheme的独立服务器?

第一部分解决了。

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这个子域与容器链接

如果您的容器不公开端口本身,则表示为80 。 这将在dockernetworking内部打开80端口。 而nginx的代理将自动生成新的configuration,为您的子域添加部分。

第二部分解决:

我让我的docker运行特权在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 + bower安装命令和gulp任务。