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 任务。
因此,在合并之前将环境部署在功能分支上进行审查是一个不错的选择。我有 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 任务。