Google Cloud Build развернуть определенный / текущий тег изображения - PullRequest
0 голосов
/ 22 января 2020

У меня есть следующий конвейер Google Cloud Build:

# gcloud builds submit --config cloud-build/cloudbuild.yaml --substitutions=_GIT_USER="<your user>",_GIT_PASS="<your password here>,_GIT_TAG="<tag name>"
steps:
# Git
- name: 'gcr.io/cloud-builders/git'
  args: ['clone', 'https://${_GIT_USER}:${_GIT_PASS}@bitbucket.my-company.com/scm/my-project/my-app.git',
         '--branch', '${_GIT_TAG}', '--single-branch']
# Build
- name: 'gcr.io/cloud-builders/mvn'
  args: ['package', '-DskipTests=true']
  dir: my-app/backend
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', 
        '--no-cache', 
        '-t', 'gcr.io/$PROJECT_ID/my-app-test:latest', 
        '-f', './cloud-build/Dockerfile-backend', 
        '--build-arg', 'JAR_FILE=./my-app/backend/target/my-app-0.0.1-SNAPSHOT.jar', 
        '.']
- name: "gcr.io/cloud-builders/docker"
  args: ["push", "gcr.io/$PROJECT_ID/my-app-test:latest"]
# Deploy
# The Deploy step requires the role 'Kubernetes Engine Developer' for the service account `<project_number>@cloudbuild.gserviceaccount.com`
- name: 'gcr.io/cloud-builders/kubectl'
  id: Deploy
  args:
  - 'apply'
  - '-f'
  - 'cloud-build/deployment-backend.yaml'
  env:
  - 'CLOUDSDK_COMPUTE_ZONE=${_K8S_COMPUTE_ZONE}'
  - 'CLOUDSDK_CONTAINER_CLUSTER=${_K8S_CLUSTER}'
substitutions:
    _K8S_COMPUTE_ZONE: us-central1-a
    _K8S_CLUSTER: my-cluster-1
    _GIT_USER: my-git-user
    _GIT_PASS: replace-me-in-cloudbuild-file # default value

deploy-backend.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-backend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-backend
  template:
    metadata:
      labels:
        app: my-backend
    spec:
      containers:
      - name: my-backend
        image: gcr.io/<my-project>/my-app-test:latest
...

Проблема заключается в том, что на шаге 3 мне нужно построить образ как my-app-test:latest чтобы я мог снова использовать самое последнее изображение в deployment.yaml (image: gcr.io/<my-project>/my-app-test:latest). Я хотел бы иметь возможность использовать имя тега для тега изображения следующим образом:

шаг 3:

- name: 'gcr.io/cloud-builders/docker'
  args: ['build', 
        '--no-cache', 
        '-t', 'gcr.io/$PROJECT_ID/my-app-test:${_GIT_TAG}', 
        '-f', './cloud-build/Dockerfile-backend', 
        '--build-arg', 'JAR_FILE=./my-app/backend/target/my-app-0.0.1-SNAPSHOT.jar', 
        '.']

но в таком случае каков наилучший способ указать шагу развертывания использовать образ, названный в честь используемого тега?

Я обнаружил, что Kustomize - это идиоматика c способ «параметризации» kubernetes, но мне все еще нужно знать имя изображения заранее и сохранить его в файле.

Замена тега изображения на sed может работать, но не кажется хорошим решением.

Ответы [ 2 ]

1 голос
/ 29 января 2020

Есть ли причина, по которой вы повторно применяете их развертывание? Или вы делаете это только один раз? Вы можете просто использовать встроенную команду для замены / обновления образа вместо повторного применения конфигурации (если это то, что вы делаете)

kubectl set image deployment/my-deployment mycontainer=myimage

Или другой способ похож на вас сказал, просто используйте sed. (В основном, что делает Kustomize) Bash в kubectl, а затем

cat deploy-file | sed “/latest/${_TAG_NAME}/“ | kubectl.bash apply -f -

1 голос
/ 22 января 2020

Не уверен в Kustomize, я думаю, что он будет поддерживать переменные среды, наконец.

Но с Helm теперь можно.

После того, как у вас есть готовая диаграмма руля, когда вам нужно подать некоторые значения на лету, вы можете выполнить команду ниже

helm install --set GIT_TAG=${GIT_TAG} ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...