2016-12-14 12 views
1

環境のために、機能ブランチにデプロイしてから、マージするのが最適です。私は同じ構造と同じドッカー画像を持つ10以上のプロジェクトを持っています。フロントエンド用のgulpとバックエンド用のPHPフレームワークがあります。 は私が.gitlab-ci.ymlではほとんど変化作っ:GitLab CIレビュー環境ドックで

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のを構成しました。 Thatsは、正面から見た部分をレビューするのに最適です。 しかし、私はバックエンドの部分にドッカーを使用したい。だから私は何とかgitlabと同じサーバー上でドッカーを起動する必要があります。その後、私はすべてのポートの生成と多分nginxリダイレクトルーチンを保持する必要があります。最後の部分は、マージ後または数日後に私はromoveレビュードッカーをする必要があります。

私はこのポートを制御するのを助けることができると信じていますが、ポートをバグのように見えるので、ビルド#65536のようにCIビルドIDを使って生成する必要があります。 /コンテナを破壊する。

スタンドアロンサーバー用のオープンソースドッカー雲がいくつかありますか?

+0

だから私はkubernetesが解決策かもしれないと思います。しかし、審査が終了した後も港の再利用について質問し、審査環境を自動的に削除する。 – MadDocNC

+1

jwilder/nginx-proxy - 完全にポートルーチンを取得します。 – MadDocNC

答えて

0

最初の部分が解決されました。

jwilder/nginx-proxy - totally get portsルーチン。

私は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をし、80

を--expose - -env VIRTUAL_HOST = test.domain.com コンテナにリンクするサブドメインnginx-proxyを指定します

--expose 80 コンテナがポート自体を公開しない場合。これにより、ドッカーネットワーク内の80ポートが開きます。そしてnginx-proxyはあなたのサブドメインの一部を追加して新しい設定を自動生成します。

第二の部分は解決:

を私はgitlabランナーconfig.tomlの私のドッキングウィンドウのランナーが特権ました。 build.shがNPM +亭コマンドと一息タスクをインストールしている

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 

:その後、私のランナーの仕事は、このように動作します。