1

, Kubernetes, Google Cloud Platform(GCP)Gitlab으로 최근에 CI/CD에서 commit에서 staging까지를 달성하고 있습니다. 지금까지 testing, buildingpushing의 이미지를 Container registry of Gitlab에이 렀습니다.Kubernetes 및 Gitlab CI/CD를 사용하여 Google Cloud Platform에 스테이징을 배포하는 방법은 무엇인가요?

출력이 'Hello world' 인 작은 노드와 도커 응용 프로그램이 있습니다. 또한 Container registry of Gitlab에 도커 이미지를 만들었습니다. 현재이 프로세스는 docker-in-docker입니다. 내 이미지를 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은 다음과 같습니다 : 당신이 GitOps 접근 방식을 따르는 경우

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에 대한 만료되지 않은 인증이 있습니다 (또는 gcloud를 사용하여 GCR에 인증해야 함). 그런 다음 이미지에 태그를 지정하고 밀어 넣으십시오.

kubernetes에서 실행하는 것은 다른 이야기이며 여러 환경에서 재사용 할 수있는 응용 프로그램의 설치 차트를 작성하는 Helm을 살펴 보도록 강력히 권합니다.

0

당신은 좀 더 안정적하고 확보하기 위해 CI에서 구성을 분리 할 수 ​​있습니다.

또 다른 답변을보세요. similar question. 더 높은 수준의 개요를

도 참조 :


면책 조항 : 나는는 Kubernetes 기여자 및 Weaveworks 직원입니다. 우리는 사람들이 Kubernetes에서 더 빨리 생산에 들어갈 수 있도록 돕는 오픈 소스 및 상용 도구를 구축합니다.

관련 문제