docker - Jenkins sh 脚本在特定容器中运行时挂起
问题描述
我正在尝试使用官方 ArgoCD docker 映像(https://hub.docker.com/r/argoproj/argocd/dockerfile)自动部署
我使用 kubernetes 插件为代理创建了一个声明式 jenkins 管道,并使用 yaml 定义了 pod,容器定义如下所示:
pipeline {
agent {
kubernetes {
yaml """
kind: Pod
metadata:
name: agent
spec:
containers:
- name: maven
image: maven:slim
command:
- cat
tty: true
volumeMounts:
- name: jenkins-maven-cache
mountPath: /root/.m2/repository
- name: argocd
image: argoproj/argocd:latest
command:
- cat
tty: true
...
我正在尝试在该容器内运行命令,管道中的该步骤如下所示:
stage('Build') {
steps {
container('maven') {
sh 'echo testing' // this works just fine
}
}
}
stage('Deploy') {
steps {
container('argocd') {
sh "echo testing" // this does not work
// more deploy scripts here, once sh works
}
}
}
所以我有两个容器,一个可以让 sh 脚本正常工作,另一个不能。“argocd”容器中的 sh 脚本仅挂起 5 分钟,然后 Jenkins 将其杀死,退出消息为:
process apparently never started in /home/jenkins/agent/workspace/job-name@tmp/durable-46cefcae (running Jenkins temporarily with -Dorg.jenkinsci.plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICS=true might make the problem clearer)
我不能在这个特定的容器中回显一个简单的字符串。
它在其他容器中运行良好,例如来自 Docker 的官方 Maven,我用来构建 Spring Boot 应用程序。我也可以使用 docker exec 从命令行手动直接在 argocd 容器中运行命令,但 jenkins 出于某种原因不会进入管道。会是什么呢?
我正在运行持久任务插件的最新版本(1.33)。
更新:
原来 argo-cd (持续部署工具)argoproj/argocd:latest的图像不包含除 之外的其他命令argocd
,因此问题出在我尝试使用的容器图像而不是 Jenkins 本身。我的解决方案是将 Argo-CD CLI 安装到自定义 docker 容器中并使用它而不是官方容器。
解决方案
我刚刚在我创建的自定义 docker 映像中遇到了类似的问题。事实证明,我USER nobody
在该图像的 Dockerfile 中使用,并且不知何故,jenkins agent pod 无法cat
从我的管道脚本运行命令或任何其他 shell 命令。使用 root 用户运行特定容器对我有用。
因此,在您的情况下,我将添加 securityContext: runAsUser: 0 如下所示。
...
- name: argocd
image: argoproj/argocd:latest
command:
- cat
tty: true
securityContext:
runAsUser: 0
...
Kubernetes 参考:https ://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container
推荐阅读
- android - 在旧版 Android 版本 (<4.1) 上更改 .Background 属性时获取“没有 name='setBackground' 的方法”
- reactjs - 我将如何在这个小型随机发生器中提升状态,以便我可以将它作为一个组件?
- java - 使用 pdfbox 检查文本是否为粗体
- android - 有没有办法让leanback的(隐藏的)播放控件显示在移动设备中?
- swift - Returning a binary file from a custom route (not FileMiddeleware's public folder)
- r - How do i find week number from an arbitrary start date in R?
- javascript - 如何将 HTML 集合转换为数组,该数组根据 DOM 进行更新
- java - org.openqa.selenium.WebDriverException: disconnected: not connected to DevTools error using ChromeDriver Chrome using Selenium and Java
- performance - 为什么 Snowflake 中这两个相似的查询具有非常不同的性能?
- angular - 打字稿 | 装饰器似乎没有正确注册