Jenkins集成Kubernetes时容器启动报权限错误怎么办?
在用Jenkins Pipeline部署Vue项目到Kubernetes时,构建容器老是报错”standard_init_linux.go:228: exec user process caused: permission denied”,本地docker run没问题,这是什么情况啊?
我的Jenkinsfile配置是这样的:
pipeline {
agent {
kubernetes {
yaml """
apiVersion: v1
spec:
containers:
- name: vue-build
image: node:18
command:
- sleep
- "3600"
tty: true
"""
}
}
stages {
stage('Build') {
steps {
sh 'npm install'
sh 'npm run build'
}
}
}
}
本地测试过Dockerfile没问题:
FROM node:18
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build
CMD ["npm", "start"]
错误日志显示:
stat /app/dist/server.js: permission denied
但文件权限明明是755,难道是Kubernetes容器的权限问题?试过在Jenkins Pod里加privileged也没用,求大神指点!
pipeline {
agent {
kubernetes {
yaml """
apiVersion: v1
spec:
containers:
- name: vue-build
image: node:18
command:
- sleep
- "3600"
tty: true
securityContext:
runAsUser: 0
"""
}
}
stages {
stage('Build') {
steps {
sh 'npm install'
sh 'npm run build'
}
}
}
}
还不行的话,检查下Jenkins所在的Kubernetes集群是否启用了Seccomp配置,可能需要调整成unconfined模式。别问我怎么知道的,踩过太多坑了。
直接上解决方案,修改你的Jenkinsfile,加上volumeMounts和securityContext:
关键是这几行:
securityContext设置了运行用户和组,volumes和volumeMounts确保工作目录可以读写。复制过去试试,应该就搞定了。如果还报错,可能是镜像本身的问题,检查下node:18的entrypoint配置。