Cloud Build kubectl - Как применить вывод предыдущего шага к кластеру Kubernetes - PullRequest
1 голос
/ 02 февраля 2020

У меня есть простой cloudbuild.yaml файл, который запускает команду Bazel. Эта команда возвращает конфигурацию Kubernetes в форме как вывод журнала.

Моя цель - взять вывод первого шага и применить его к моему кластеру Kubernetes.

steps:
  - name: gcr.io/cloud-builders/bazel
    args: ["run", "//:kubernetes"]

  - name: "gcr.io/cloud-builders/kubectl"
    args: ["apply", "<log output of previous step>"]
    env:
      - "CLOUDSDK_COMPUTE_ZONE=europe-west3-a"
      - "CLOUDSDK_CONTAINER_CLUSTER=cents-ideas"

Обновление

Я пробовал следующее:

- name: gcr.io/cloud-builders/bazel
  entrypoint: /bin/bash
  args:
    [
      "bazel",
      "run",
      "//:kubernetes",
      " > kubernetes.yaml",
    ]

- name: "gcr.io/cloud-builders/kubectl"
  args: ["apply", "-f", "kubernetes.yaml"]
  env:
    - "CLOUDSDK_COMPUTE_ZONE=europe-west3-a"
    - "CLOUDSDK_CONTAINER_CLUSTER=cents-ideas"

Но тогда я получаю эту ошибку:

Running: kubectl apply -f kubernetes.yaml
error: the path "kubernetes.yaml" does not exist

Ответы [ 3 ]

2 голосов
/ 03 февраля 2020

Вот как смонтировать том:

https://cloud.google.com/cloud-build/docs/build-config#volumes

В основном добавьте:

  volumes:
  - name: 'vol1'
    path: '/persistent_volume'

Затем укажите полный путь /persistent_volume/filename/ при записи / чтении в ваш файл.

2 голосов
/ 03 февраля 2020

Том монтирует один и тот же каталог (не файл) в оба этапа.

Передает вывод команды Bazel в файл.

Ссылка на этот файл в шаге kubectl apply --filename=

Пример

options:
  volumes:
    - name: test
      path: /test
steps:
  - name: busybox
    args:
      - "ls"
      - "-l"
      - "/test"
  - name: busybox
    entrypoint: "/bin/sh"
    args:
      - "-c"
      - "touch /test/freddie"
  - name: busybox
    args:
      - "ls"
      - "-l"
      - "/test"
  - name: busybox
    args:
      - "cp"
      - "/test/freddie"
      - "/workspace"
  - name: busybox
    args:
      - "ls"
      - "-l"
      - "/workspace"

Использование options для определения volumes применяет громкость ко всем шагам; в качестве альтернативы вы можете просто повторить volumes на каждом шаге.

Пример - надеюсь - показывает, как использовать как стандартный /workspace, так и определяемый пользователем том /test для создания файла в том (и скопировать этот файл на том /workspace по умолчанию, чтобы доказать, что он добавлен.

Вывод:

BUILD
Starting Step #0
Step #0: Already have image: busybox
Step #0: total 0
Finished Step #0
Starting Step #1
Step #1: Already have image: busybox
Finished Step #1
Starting Step #2
Step #2: Already have image: busybox
Step #2: total 0
Step #2: -rw-r--r--    1 root     root             0 Feb  4 17:53 freddie
Finished Step #2
Starting Step #3
Step #3: Already have image: busybox
Finished Step #3
Starting Step #4
Step #4: Already have image: busybox
Step #4: total 4
Step #4: -rw-r--r--    1 1000     1000           460 Feb  4 17:53 cloudbuild.yaml
Step #4: -rw-r--r--    1 root     root             0 Feb  4 17:53 freddie
Finished Step #4
PUSH
DONE
1 голос
/ 04 февраля 2020

Как все уже предложили, используйте тома .

Настройте файл cloudbuild.yaml следующим образом:

- name: gcr.io/cloud-builders/bazel
  entrypoint: /bin/bash
  args:
    [
      "bazel",
      "run",
      "//:kubernetes",
      " > /workspace/kubernetes.yaml",
    ]

- name: "gcr.io/cloud-builders/kubectl"
  args: ["apply", "-f", "/workspace/kubernetes.yaml"]
  env:
    - "CLOUDSDK_COMPUTE_ZONE=europe-west3-a"
    - "CLOUDSDK_CONTAINER_CLUSTER=cents-ideas"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...