#docker #kubernetes #google-cloud-platform #continuous-integration #build-triggers
#docker #kubernetes #google-cloud-platform #непрерывная интеграция #build-триггеры
Вопрос:
Я играл с триггерами GCP для развертывания нового модуля каждый раз, когда выполняется отправка в репозиторий Github. У меня все настроено, и образ docker помещается в реестр контейнеров GCP, и триггер успешно завершается без каких-либо ошибок. В качестве своих тегов я использую теги $ SHORT_SHA, которые генерируются конвейером сборки. Но, однако, развертывание нового модуля не работает. Я не уверен, в чем проблема, потому что я также изменяю кодовую базу с каждым новым нажатием, чтобы протестировать развертывание. Я следил за несколькими руководствами Google по триггерам, но я не могу понять, в чем именно проблема и почему недавно отправленное изображение не развертывается.
cloudbuild.yaml
- name: maven:3-jdk-8
id: Maven Compile
entrypoint: mvn
args: ["package", "-Dmaven.test.skip=true"]
- name: 'gcr.io/cloud-builders/docker'
id: Build
args:
- 'build'
- '-t'
- 'us.gcr.io/$PROJECT_ID/<image_name>:$SHORT_SHA'
- '.'
- name: 'gcr.io/cloud-builders/docker'
id: Push
args:
- 'push'
- 'us.gcr.io/$PROJECT_ID/<image_name>:$SHORT_SHA'
- name: 'gcr.io/cloud-builders/gcloud'
id: Generate manifest
entrypoint: /bin/sh
args:
- '-c'
- |
sed "s/GOOGLE_CLOUD_PROJECT/$SHORT_SHA/g" kubernetes.yaml
- name: "gcr.io/cloud-builders/gke-deploy"
args:
- run
- --filename=kubernetes.yaml
- --image=us.gcr.io/$PROJECT_ID/<image_name>:$SHORT_SHA
- --location=us-central1-c
- --cluster=cluster-1
kubernetes.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: <deployment_name>
spec:
replicas: 1
selector:
matchLabels:
app: <container_label>
template:
metadata:
labels:
app: <container_label>
spec:
nodeSelector:
cloud.google.com/gke-nodepool: default-pool
containers:
- name: <container_name>
image: us.gcr.io/<project_id>/<image_name>:GOOGLE_CLOUD_PROJECT
ports:
- containerPort: 8080
apiVersion: v1
kind: Service
metadata:
name: <service-name>
spec:
selector:
app: <selector_name>
ports:
- port: 80
targetPort: 8080
type: LoadBalancer
Комментарии:
1. Развертывает ли модуль и службу, когда в кластере ничего не существует?
2. Он развертывает службу, а не модуль
Ответ №1:
Я бы рекомендовал внести несколько изменений в работу вашей облачной сборки для развертывания приложения в кластере EKS.
cloudbuild.yaml
- На этапе сборки и нажатия измените аргумент на
gcr.io/$PROJECT_ID/<image_name>:$SHORT_SHA
использоватьgcr.io/$PROJECT_ID/sample-image:latest
. - Создайте этап манифеста — вы можете пропустить / удалить этап.
gke-deploy
этап — удаление шага изображения.
kubernetes.yaml
- В спецификации — вы можете указать изображение, поскольку
gcr.io/$PROJECT_ID/sample-image:latest
оно всегда будет приниматьlatest
при каждом развертывании.
Остальное все кажется хорошим.