Развертывание новой серверной версии + Kubernetes + Gitlab CI + Google Cloud - PullRequest
0 голосов
/ 02 декабря 2018

Я не знаю, как обновить рабочую нагрузку на сервер в кластере Kubernetes.Мой Gitlab Pipeline работает без ошибок.Моя активная ревизия все еще находится на моем первом нажатии, так как я могу обновить ревизию, чтобы вызвать скользящее обновление?Могу ли я интегрировать автоматическое развертывание в Gitlab Ci?

.gitlab-ci

image: docker:latest
    services:
      - docker:dind

    variables:
      DOCKER_DRIVER: overlay
      SPRING_PROFILES_ACTIVE: gitlab-ci

    stages:
      - build
      - package
      - deploy

    maven-build:
      image: maven:3-jdk-8
      stage: build
      script: "mvn package -B"
      artifacts:
        paths:
          - target/*.jar

    docker-build:
      stage: package
      script:
      - docker build -t registry.gitlab.com/projectX/ft-backend .
      - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com
      - docker push registry.gitlab.com/projectX/ft-backend

    k8s-deploy:
      image: google/cloud-sdk
      stage: deploy
      script:
      - echo "$GOOGLE_KEY" > key.json
      - gcloud auth activate-service-account --key-file key.json
      - gcloud config set compute/zone europe-west3-a
      - gcloud config set project projectX
      - gcloud config unset container/use_client_certificate
      - gcloud container clusters get-credentials development --zone europe-west3-a --project projectX
      - kubectl delete secret registry.gitlab.com
      - kubectl create secret docker-registry registry.gitlab.com --docker-server=https://registry.gitlab.com --docker-username=MYNAME --docker-password=$REGISTRY_PASSWD --docker-email=MYMAIL
      - kubectl apply -f deployment.yml

deploy.yml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: ft-backend
spec:
  replicas: 2
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  minReadySeconds: 5
  template:
    metadata:
      labels:
        app: ft-backend
    spec:
      containers:
      - name: ft-backend
        image: registry.gitlab.com/projectX/ft-backend
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
      imagePullSecrets:
        - name: registry.gitlab.com

Google Cloud Workload enter image description here

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Как уже говорилось в комментариях, вы должны обновить развертывание .spec.template до , чтобы запустить развертывание .Самый простой способ сделать это - пометить свое изображение после выпуска.

В вашем файле .gitlab-ci.yml вы можете использовать переменную CI_COMMIT_SHA:

# in your docker-build job, update build and push:
- docker build -t registry.gitlab.com/projectX/ft-backend:${CI_COMMIT_SHA} .
- docker push registry.gitlab.com/projectX/ft-backend:${CI_COMMIT_SHA}

# in your k8s-deploy job add this:
- kubectl set image deployment/ft-backend ft-backend=registry.gitlab.com/projectX/ft-backend:${CI_COMMIT_SHA}

Это будет как версияваше изображение в реестре проекта GitLab и запуск развертывания.

0 голосов
/ 02 декабря 2018

Как и Clorichel , упомянутых в комментариях, вам нужно изменить свое развертывание, чтобы вызвать развертывание.Вы можете использовать что-то вроде Gitflow и Semantic Versioning (если вы этого еще не сделали), чтобы пометить изображение контейнера.Например, в .gitlab-ci вы можете добавить тег Git к своему образу контейнера:

script:
  - docker build -t registry.gitlab.com/projectX/ft-backend:$CI_COMMIT_TAG .
  - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com
  - docker push registry.gitlab.com/projectX/ft-backend:$CI_COMMIT_TAG

В файле deploy.yml вы бы ссылались на новую версию:

spec:
  containers:
  - name: ft-backend
    image: registry.gitlab.com/projectX/ft-backend:YOUR_NEW_GIT_TAG
    imagePullPolicy: Always
    ports:
    - containerPort: 8080
...