我已经使用 helm 在 k8s 上安装了 jenkins,并希望使用代理运行所需的映像。 但是,我有一个问题,当我运行代理时,它立即挂起。
我的代理映像 Dockerfile
FROM golang:1.21.1-alpine3.18 AS builder
RUN apk update
RUN apk upgrade
RUN apk add build-base
WORKDIR /app
COPY go_src .
RUN go mod download
WORKDIR /app/cmd/runner/
RUN CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o /bin/runner.
ENTRYPOINT ["/bin/runner"]
我的 pod 模板和管道
pipeline {
agent none
stages {
stage('Step 1') {
agent {
kubernetes {
yaml """
apiVersion: v1
kind: Pod
spec:
containers:
- name: runner
image: my_image:latest
volumeMounts:
- name: cache
mountPath: /cache
volumes:
- name: cache
persistentVolumeClaim:
claimName: cache-pvc
imagePullSecrets:
- name: regcred
"""
}
}
steps {
container('runner') {
sh 'echo "This is runner."'
}
}
}
}
}
我不想在步骤部分做任何事情。 这似乎不可能,所以我只是做了一个回声或其他什么。 请注意,如果我在这里添加 sleep,它将执行与 sleep 一样的操作,然后退出。 但我不想指定时间,我只是希望代理在图像中的 go 完成所有工作时退出。
也许我误解了 jenkins kubernetes 插件? 这是正确的使用方法吗? 如果这是正确的,为什么我这样做会终止? 我想知道如何让它不终止。 预先感谢。
我还尝试在脚本中添加 sleep,并设置命令:cat 和 tty:true。 谷歌搜索了一下,我的问题没有任何地方提到。
Jenkins k8s 插件负责启动和停止容器。容器不应具有影响其生命周期的入口点或命令参数。最常见的是,这些被 替换为 sleep 99d
。所有逻辑(例如在您的情况下执行
/bin/runner
)都应该在管道中。