मैं Docker, Kubernetes, Google Cloud Platform(GCP) और Gitlab के साथ हाल ही में commit से staging तक CI/CD हासिल करने के लिए खेल रहा हूं। अब तक मैंने testing, building और pushing इमेज को Container registry of Gitlab तक पहुंचा दिया है।

मेरे पास एक छोटा नोड और डॉकर एप्लिकेशन है जो 'Hello world' आउटपुट करता है। साथ ही, मैंने अपनी डॉकर छवि को Container registry of Gitlab में बनाया है। इस समय प्रक्रिया डॉकटर-इन-डॉकर है। मैं GCP में अपनी छवि को Gitlab container registry से Kubernetes engine पर धकेलना चाहता हूं। मैंने kubectl और gcloud 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

कृपया, मुझे बताएं कि क्या मेरा दृष्टिकोण गलत है क्योंकि यह सीआई/सीडी के साथ मेरी पहली सीखने की परियोजना है।

3
surajnew55 19 पद 2017, 16:24

2 जवाब

सबसे बढ़िया उत्तर

Google Container Registry(GCR) के साथ GKE में बनाने और परिनियोजित करने के लिए एक साधारण gitlab-ci.yml फ़ाइल। सबसे पहले, हम छवि बनाते हैं और इसे GCR पर धकेलते हैं। मान्य क्रेडेंशियल के साथ, हम आसानी से GKE को 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
6
surajnew55 2 जिंदा 2018, 16:14

यू को अपने जीकेई में इसका उपयोग करने में सक्षम होने के लिए छवि को वास्तव में जीसीआर में संग्रहीत करने की आवश्यकता नहीं है, हालांकि इसे पास में रखना अच्छा है। आपको gcloud पर एक सेवा खाते की आवश्यकता है ताकि आपके पास GCR के लिए एक गैर-समाप्त होने वाला प्रमाणीकरण हो (या आपको gcloud cli to auth to GCR का उपयोग करने की आवश्यकता हो) फिर बस छवि को टैग करें और इसे पुश करें।

कुबेरनेट्स पर इसे चलाना एक अलग कहानी है, और मैं आपको अपने एप्लिकेशन के लिए इंस्टॉलेशन चार्ट बनाने के लिए हेल्म को देखने के लिए दृढ़ता से प्रोत्साहित करता हूं जिसे कई वातावरणों के लिए पुन: उपयोग किया जा सकता है।

0
Radek 'Goblin' Pieczonka 19 पद 2017, 18:12