加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 22:55:35 所属栏目:安全 来源:网络整理
导读:我无法运行简单的Jenkins文件 – 例如 pipeline { agent { label 'ssh-slave' } stages { stage('Shell Test') { steps { sh 'echo "Hello World"' } } }} 主服务器上Jenkins的日志文件显示容器已成功启动,但构建作业因类似消息而崩溃 sh: 1: /home/jenkins/
我无法运行简单的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

这解决了我们的问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读