我无法运行简单的Jenkins文件 – 例如
pipeline {
agent { label 'ssh-slave' }
stages {
stage('Shell Test') {
steps {
sh 'echo "Hello World"'
}
}
}
}
主服务器上Jenkins的日志文件显示容器已成功启动,但构建作业因类似消息而崩溃
sh: 1: /home/jenkins/workspace/pipeline@tmp/durable-34c21b81/script.sh: Permission denied
以下是我们配置/计算出的一些其他内容:
>我们正在使用RHEL在VM上运行代理
>我们使用Docker Plugin for Jenkins在单独的Jenkins代理上启动/管理容器
>我们使用Jenkins插件中的Connect with ssh方法旋转Docker容器并使用jenkinsci/ssh-slave Docker image
> Jenkins在Docker容器中使用root用户(至少/ home / jenkins / …中的所有文件都是以root身份创建的
>当我们将一个睡眠步骤添加到管道和docker exec …进入正在运行的容器中时,如果我们尝试使用./script.sh运行它,我们就无法以root身份执行简单的shell脚本(即使我们设置正确文件模式与chmod x script.sh之前) – 我们也得到sh:1:权限被拒绝.但是如果我们使用sh script.sh,我们可以运行脚本
> Docker容器中的root用户有一个bash – 而Jenkins正试图用sh运行脚本.
>无论我们是否检查Docker插件的模板配置中的run privileged标志,都会发生错误
我们已经尝试过但没有奏效的事情
>将Docker容器中root用户的登录shell更改为/ bin / sh
>在sh步骤中提供一个shebang,àla
sh '''#!/bin/sh echo "hello world" '''
>在Jenkins全局配置中将shell执行程序设置为/ bin / sh
>更改ssh-slave Docker镜像的Dockerfile,使ENTRYPOINT不运行bash脚本,但最后运行/ bin / sh
任何帮助表示赞赏!
$mount
/dev/mapper/rhel-var on /home/jenkins type xfs (rw,nosuid,nodev,noexec,relatime,seclabel,attr2,inode64,noquota)
基本问题是底层主机上的/ var是用noexec挂载的(/ var是所有容器文件所在的位置……):
$mount
/dev/mapper/rhel-var on /var type xfs (rw,noquota)
所以这个问题的解决方案是将/ var挂载到主机上
sudo mount -o remount,exec /var
这解决了我们的问题.