GitLab CI 使用 docker 审查环境

GitLab CI review enviroment with docker

因此,在合并之前将环境部署在功能分支上进行审查是一个不错的选择。我有 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 重定向例程。最后一部分,合并后或几天后我需要 romove 审查 docker.

我相信这个 https://github.com/jwilder/nginx-proxy 可以帮助我控制端口,但我需要生成它们(使用 CI 构建 ID 作为端口似乎有问题,总有一天我会构建 #65536 ) 并且仍然对自动 start/stop/destroy 容器有疑问。

可能有一些用于独立服务器的开源 docker 云解决方案?

第一部分已解决。

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

我运行 启动代理:

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

--环境VIRTUAL_HOST=test.domain.com 将说 nginx-proxy 至极子域到 link 与容器

--暴露80 如果您的容器本身不公开端口。这将在 docker 网络中打开 80 端口。 nginx-proxy 将自动生成新配置,为您的子域添加部分。

第二部分已解决:

我让我的 docker 运行ner 在 gitlab 运行ner config.toml 中享有特权。然后我的 运行ner 工作是这样的:

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