因此,在合并之前在功能分支上进行环境部署以供查看是很好的选择。我有10个以上具有类似结构和相同的docker图像的项目。后端有一个gulp,后端有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
我为每个子域配置了nginx以加载文件夹。这对于审查前端部分非常有用。 但我想使用docker作为后端部分。所以我需要以某种方式在gitlab所在的同一台服务器上启动docker。然后我需要保持所有端口生成和nginx重定向例程。最后一部分,合并后或几天后我需要退出审查码头。
我相信这个https://github.com/jwilder/nginx-proxy可以帮助我控制端口,但是我需要生成它们(使用CI构建ID作为端口似乎有缺陷,有一天我将构建#65536)仍然有问题关于自动启动/停止/销毁容器。
对于独立服务器可能有一些开源docker cloudsolution吗?
答案 0 :(得分: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与子容器
链接的子域名- 曝光80 如果您的容器没有暴露端口本身。这将打开docker网络内的80端口。并且nginx-proxy将自动生成新配置,为您的子域添加部分。
第二部分解决了:
我让我的docker runner在gitlab runner 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 install命令和gulp任务。