首页 > 解决方案 > Docker 映像无法在 Jenkins Kubernetes 构建管道中保持活力

问题描述

我们想使用我们的 Jenkinsfile 中的 ArgoCD 进行部署(这有点不是打算这样做但足够接近),并且在完成一些实验后想尝试使用带有 CLI 的官方容器,所以我们将此片段添加到我们的我们的管道 Kubernetes yaml:

  - name: argocdcli
    image: argoproj/argocli
    command:
    - argo
    args: 
    - version
    tty: true

不幸的是,使这些容器保持活动状态的常用方法是在容器中调用cat,该容器不存在,因此它惨遭失败。实际上,其中唯一的命令是“argo”命令,它没有办法无限休眠。(我们将在上游报告此问题,以便将其修复,但在我们等待的同时......)

因此,我的问题是,有没有办法向 Kubernetes 表明我们知道这个 pod 无法自行保持运行,因此不会立即将其拆除?

标签: jenkinskubernetesjenkins-pipelineargocd

解决方案


不幸的是,这是不可能的,因为正如您所说,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

推荐阅读