2017-12-19 21 views
1

Docker,Kubernetes,Google Cloud Platform(GCP)およびGitlab最近ではCI/CDcommitからstagingに達成しています。 これまでのところ、私は、buildingpushingの画像をContainer registry of Gitlabに引き継いだ。KubernetesとGitlab CI/CDを使用してGoogle Cloud Platformにステージングを導入するにはどうすればよいですか?

小さなノードとドッカーアプリケーションがあり、出力は'Hello world'です。また、ドッカーの画像をContainer registry of Gitlabに作りました。現在のところ、このプロセスはドッキング・イン・ドッキング・ドッカーです。 GCPの画像をGitlab container registryからKubernetes engineにプッシュしたい私はkubectlgcloud sdkの両方をインストールしました。 Auto DevOpsは有望なようですが、私は自分の.gitlab-ci.ymlファイルを実装したいと思います。

はここにある私の.gitlab-ci.yml以下:

stages: 
    - testing 
    - build 
    - staging 

variables: 
    CONTAINER_TEST_IMAGE: registry.gitlab.com/surajneupane55/node-app- 
    testing 
CONTAINER_RELEASE_IMAGE: registry.gitlab.com/surajneupane55/node- 
app-testing:latest 


test: 
    stage: testing 
    image: node:boron 
    script: 
    - npm install 
    - npm test 


build_image: 
    stage: build 
    only: [master] 
    image: docker:git 
    services: 
    - docker:dind 
    script: 
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN 
     registry.gitlab.com/surajneupane55 
    - docker build -t $CONTAINER_TEST_IMAGE . 
    - docker push $CONTAINER_TEST_IMAGE 


staging_site: 

//I need help here!!! 
//For staging my project in Kubernetes cluster in GCP 
//Already created node-app Kubernetes cluster 

、これはCI/CDと私の最初の学習プロジェクトですので、私のアプローチが間違っている場合は私に知らせてください。

答えて

1

Google Container Registry(GCR)を使用してGKEで構築および展開する単純なgitlab-ci.ymlファイル。まず、イメージを構築してGCRにプッシュします。有効な資格情報を使用すると、GCRとGCRを簡単に接続して展開できます。

stages: 
    - build 
    - deploy 

variables: 
    CONTAINER_TEST_IMAGE: gcr.io/node-testing-189614/node-testing:latest 




build_image: 
    stage: build 
    only: [master] 
    image: google/cloud-sdk 
    services: 
    - docker:dind 

    script: 
    - echo "$GOOGLE_KEY_SECRET" > key.json # Google Cloud service accounts 
    - gcloud auth activate-service-account --key-file key.json 
    - gcloud config set project node-testing-189614 
    - gcloud container builds submit -t $CONTAINER_TEST_IMAGE . 




deploy_staging: 
    image: google/cloud-sdk 
    stage: deploy 
    script: 
    - echo "$GOOGLE_KEY_SECRET" > key.json # Google Cloud service accounts 
    - gcloud auth activate-service-account --key-file key.json 
    - gcloud config set project node-testing-189614 
    - gcloud config set compute/zone europe-west1-b 
    - gcloud config set container/use_client_certificate True 
    - gcloud container clusters get-credentials node-testing 
    - kubectl delete pods --all 
    - kubectl apply -f staging.yml 

    environment: 
    name: staging 
    url: http://***.***.**.***:****/ //External IP from Kubernetes 
    only: 
    - master 

上記の画像は常に最新のタグで画像を更新したいのでGKEでポッドを削除します。これまで利用可能な最良の解決策は、ポッドを削除して、staging.ymlファイルが利用できない場合に新しいファイルを作成させることです。最後に

staging.ymlは次のようになります。

apiVersion: apps/v1beta1 
kind: Deployment 
metadata: 
    name: node-testing 
spec: 
    replicas: 2 
    template: 
    metadata: 
     labels: 
     app: node-testing 
    spec: 
     containers: 
     - name: node-testing 
     image: gcr.io/node-testing-189614/node-testing:latest 
     imagePullPolicy: Always 
     ports: 
     - containerPort: 8080 
     imagePullSecrets: 
     - name: gcr.io/node-testing-189614/node-testing 
0

あなたはGCRで使用できるように実際に画像をGCRに保存する必要はありませんが、近くにあるのはいいですが。 gcloudにサービスアカウントが必要なので、期限切れでないGCRへの認証が必要です(またはGCRに認証するためにgcloud cliを使用する必要があります)。その後、画像にタグを付けてプッシュします。

kubernetesで実行することは別の話ですが、複数の環境で再利用できるアプリケーションのインストールチャートを作成するHelmも見てください。

0

あなたはGitOpsアプローチに従うならば、それは、より信頼性と安全性にするためにCIからあなたの設定を切り離すことができます。

もう一度私の答えを見てください。similar question。より高レベルの概要については

、以下を参照してください。


免責事項:私はKubernetesの貢献者とWeaveworksの従業員をしています。私たちは、人々がKubernetesでより早く製品を手に入れるためのオープンソースツールと商用ツールを構築します。

関連する問題