shell - Jenkinsfile:在Docker容器中运行sh步骤时权限被拒绝

6 篇文章 0 订阅
3 篇文章 0 订阅

无法运行简单的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

任何帮助表示赞赏!

最佳答案
问题是容器中的/ home / jenkins是用noexec挂载的:
$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
这解决了我们的问题.

总结
以上是脚本之家为你收集整理的shell – Jenkinsfile:在Docker容器中运行sh步骤时权限被拒绝全部内容,希望文章能够帮你解决shell – Jenkinsfile:在Docker容器中运行sh步骤时权限被拒绝所遇到的程序开发问题。

原文地址:https://www.jb51.cc/docker/436042.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值