GitLab CI审查环境与docker

时间:2016-12-14 12:39:22

标签: docker gitlab-ci

因此,在合并之前在功能分支上进行环境部署以供查看是很好的选择。我有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吗?

1 个答案:

答案 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任务。