jenkins - Docker 映像无法在 Jenkins Kubernetes 构建管道中保持活力
问题描述
我们想使用我们的 Jenkinsfile 中的 ArgoCD 进行部署(这有点不是打算这样做但足够接近),并且在完成一些实验后想尝试使用带有 CLI 的官方容器,所以我们将此片段添加到我们的我们的管道 Kubernetes yaml:
- name: argocdcli
image: argoproj/argocli
command:
- argo
args:
- version
tty: true
不幸的是,使这些容器保持活动状态的常用方法是在容器中调用cat
,该容器不存在,因此它惨遭失败。实际上,其中唯一的命令是“argo”命令,它没有办法无限休眠。(我们将在上游报告此问题,以便将其修复,但在我们等待的同时......)
因此,我的问题是,有没有办法向 Kubernetes 表明我们知道这个 pod 无法自行保持运行,因此不会立即将其拆除?
解决方案
不幸的是,这是不可能的,因为正如您所说,argo
这是该图像上唯一可用的命令。
可以在这里确认:
####################################################################################################
# argocli
####################################################################################################
FROM scratch as argocli
COPY --from=argo-build /go/src/github.com/argoproj/argo/dist/argo-linux-amd64 /bin/argo
ENTRYPOINT [ "argo" ]
正如我们在这个输出中看到的,运行 argo 就是这个容器正在做的所有事情:
$ kubectl run -i --tty --image argoproj/argocli argoproj1 --restart=Never
argo is the command line interface to Argo
Usage:
argo [flags]
argo [command]
...
您可以选择基于该图像创建自己的图像并包含睡眠,因此可以像本示例中那样保持其运行:
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- name: busybox
image: busybox:1.28
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
restartPolicy: Always
推荐阅读
- flutter - 颤振:未应用文本字段边框颜色
- android - 修复了 Jetpack Compose 中 LazyColumn 内的网格?
- c# - 如何将没有类的对象从一个 api 发送到另一个 api?
- html - iOS OTC 自动完成 CSS 问题
- python - 在 try / except 中搜索数组
- arrays - 如何在 Elixir 中使用类似的方法填充列表,如其他语言中的 for 循环
- swiftui - 如何使用 SwipeAction 动画删除列表中的项目?领域,Swiftui
- sql - SQL INSERT INTO 多行
- arrays - 'float' 之前的预期表达式
- delphi - 如何提示用户确认程序退出?