Cloud Build kubectl - 如何将上一步的输出应用到 Kubernetes 集群
Cloud Build kubectl - How to Apply Output of Previous Step to Kubernetes Cluster
我有一个运行 Bazel 命令的简单 cloudbuild.yaml
文件。此命令returns 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
将同一目录(不是文件)卷挂载到两个步骤中。
将 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
安装卷的方法如下:
https://cloud.google.com/cloud-build/docs/build-config#volumes
基本加上:
volumes:
- name: 'vol1'
path: '/persistent_volume'
然后在写入/读取文件时引用完整路径/persistent_volume/filename/
。
正如大家已经在这里建议的那样,使用 volumes。
像这样调整您的 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"
我有一个运行 Bazel 命令的简单 cloudbuild.yaml
文件。此命令returns 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
将同一目录(不是文件)卷挂载到两个步骤中。
将 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
安装卷的方法如下:
https://cloud.google.com/cloud-build/docs/build-config#volumes
基本加上:
volumes:
- name: 'vol1'
path: '/persistent_volume'
然后在写入/读取文件时引用完整路径/persistent_volume/filename/
。
正如大家已经在这里建议的那样,使用 volumes。
像这样调整您的 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"