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

2024-04-20

我在运行简单的程序时遇到问题Jenkinsfile - e.g.

pipeline {
    agent { label 'ssh-slave' } 
    stages {
        stage('Shell Test') {
            steps {
                sh 'echo "Hello World"'
            }
        }
    }
}

master 上的 Jenkins 日志文件显示容器已成功启动,但构建作业崩溃并显示类似消息

sh: 1: /home/jenkins/workspace/pipeline@tmp/durable-34c21b81/script.sh: Permission denied

以下是我们配置/弄清楚的一些其他内容:

  1. 我们正在使用 RHEL 的虚拟机上运行代理

  2. 我们正在使用Docker 插件 https://wiki.jenkins.io/display/JENKINS/Docker+Plugin让 Jenkins 在单独的 Jenkins 代理上启动/管理容器

  3. 我们正在使用以下命令来启动 Docker 容器Connect with sshJenkins 插件中的方法并使用jenkinsci/ssh-slave Docker 镜像 https://hub.docker.com/r/jenkinsci/ssh-slave/

  4. 詹金斯正在使用rootDocker 容器中的用户(至少其中的所有文件)/home/jenkins/...被创建为 root

  5. 当我们添加一个sleep进入管道并docker exec...进入正在运行的容器中,如果我们尝试使用以下命令运行它,则无法以 root 身份执行简单的 shell 脚本./script.sh(即使我们设置正确的文件模式chmod +x script.sh之前) - 我们也得到sh: 1: permission denied。但是我们可以运行脚本,如果我们使用sh script.sh

  6. The rootDocker 容器内的用户有一个bash- 而詹金斯正在尝试运行脚本sh.

  7. 无论我们是否检查都会出现错误run privileged是否在 Docker 插件的模板配置中标记

我们已经尝试过但没有成功的事情

  1. 更改登录 shellrootDocker 容器中的用户/bin/sh

  2. 提供一个shebangsh一步,啦

    
    
    sh '''#!/bin/sh
    echo "hello world"
    '''
      
  3. 将 shell 执行器设置为/bin/sh在 Jenkins 全局配置中

  4. 改变Dockerfilessh-slave Docker 镜像的方式如下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,nosuid,nodev,noexec,relatime,seclabel,attr2,inode64,noquota)

所以解决这个问题的办法就是挂载/var作为主机上的可执行文件

sudo mount -o remount,exec /var

这为我们解决了这个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jenkinsfile:在 Docker 容器中运行 sh 步骤时权限被拒绝 的相关文章

  • docker asp.net core 容器在 mysql 容器之后启动

    我有一个带有 asp net core 的 docker 容器和一个带有 mysql 的容器 现在我需要等待 mysql 容器启动并准备好 两个容器都通过 docker compose yml 启动 就像是https github com
  • If 语句不遵循其条件

    在我的滚动代码中 您只需编写 r 然后按 Enter 键 但似乎不会读取该内容并转到重新启动 while 循环的 else 让它滚动的唯一方法是输入除 r 之外的其他内容 而不是 standard in 1 解析错误 bin bash th
  • 如何更改詹金斯主目录位置?

    简单的问题 如何更改jenkins主目录位置 默认情况下它指向 var lib jenkins 而我希望它指向 mnt home jenkins 我已将 JENKINS HOME 更改为 mnt home jenkins 但这对我没有帮助
  • 如何访问docker镜像?

    我试图在不运行的情况下访问 docker 映像 我只想知道它包含什么内容以进行验证 我无法 ssh 进入容器 因为它会在一秒钟内结束 所以我需要探索图像而不是容器 或者 在完成之前是否可以访问容器 明白了 命令如下 docker run i
  • 如何在 kubernetes 中传递命令行参数?

    需要在 pod yaml 中传递 docker 容器 appContainer1 和 appContainer2 的命令行参数 pod yaml apiVersion v1 kind Pod metadata name microservi
  • 运行 py.test 时出现错误 ImportMismatchError

    当我在本地运行测试时 它工作正常 但是在创建 docker 并在容器内运行后 我收到以下错误 usr local lib python3 5 site packages pytest config py 325 in getconftest
  • Python脚本仅在Docker中产生僵尸进程

    我有相当复杂的设置 Luigi https github com spotify luigi https github com spotify luigi https github com kennethreitz requests htm
  • 如何从主机将主机名解析为 Docker 容器?

    我知道 Docker 在 127 0 0 11 上运行一个神奇的 dns 所以我想我会尝试 nslookup mycontainername 127 0 0 11 where mycontainername当然 是我尝试访问的容器的名称 然
  • Azure Web 应用程序中 Docker 中的 Laravel 无法从已安装的文件存储中提供图像

    我有一个 azure web 应用程序 带有一个运行 apache 的自定义容器 带有 laravel 的 php 7 4 和一个安装的 azure 文件存储 从已安装的存储提供 png 文件确实适用于我在 docker 桌面中的本地构建
  • 获取后台进程的退出代码

    我有一个从我的主 bourne shell 脚本中调用的命令 CMD 该命令需要很长时间 我想修改脚本如下 作为后台进程并行运行命令 CMD CMD 在主脚本中 有一个循环每隔几秒监视生成的命令 该循环还向标准输出回显一些消息 指示脚本的进
  • Jenkins 的 Gerrit 触发器找不到任何要构建的修订

    我在使用 Jenkins Gerrit 时遇到问题 这是我到目前为止得到的 Jenkins 中的 Gerrit 触发器配置似乎没问题 当我推送新的变更集时 Jenkins 构建就会启动 我用过这个 Jenkins Gerrit 触发器问题的
  • 使用单个 shell 脚本运行 React 和 Flask

    我构建了一个使用 ReactJS 作为前端和 Flask 作为中间件的应用程序 我可以使用以下命令序列来执行它 npm start cd Equation Solver python m flask run 执行第一个命令后 我必须打开另一
  • 如何让SSH命令执行超时

    我有一个这样的程序 ssh q email protected cdn cgi l email protection exit echo output value gt 在上面的代码中 我尝试通过 SSH 连接到远程服务器 并尝试检查是否可
  • unix 命令行执行方式为 . (点)与没有

    在 unix 命令行中 通过简单地键入程序名称来执行程序与通过键入 点 后跟程序名称 例如 runme vs runme name来源称为文件name进入当前外壳 所以如果一个文件包含这个 A hello 然后 如果您获取它 之后您可以引用
  • 无法从 docker 容器打开 URL

    我在从 Docker 容器导航到 Google 身份验证页面时遇到问题 该应用程序是使用 asp net Core 2 0 制作的 其目的是显示从 Google Calendar API 检索的即将发生的事件 并在需要时创建事件 当应用程序
  • 如何在 Mulesoft 中将睡眠设置为流程而不丢失消息负载

    我想插入脚本来延迟 Mulesoft 中的处理流程 我尝试在 groovy 中插入脚本 但丢失了消息有效负载 因此当我必须获取消息有效负载时 收到了空指针 我怎样才能不丢失消息有效负载 Thanks 如果您正在使用Groovy流程中的组件
  • 如何通过管道将输入和输出传送到交互式 shell?

    我正在尝试构建一个应用程序 使用户能够与命令行交互式 shell 例如 IRB 或 Python 进行交互 这意味着我需要将用户输入通过管道传输到 shell 并将 shell 的输出返回给用户 我希望这会像管道 STDIN STDOUT
  • 从 Groovy 中的列表中删除空项目

    从 Groovy 列表中删除空项目的最佳方法是什么 ex null 30 null 想要返回 30 只需使用减号 null 30 null null
  • 是否可以对不同的服务使用不同的 .env?

    我遇到一种情况 最好有多个 env 文件 每个 env 文件对应 docker compose yml 中的每个服务 有什么方法可以指定要使用的不同文件名吗 这可以在个人服务层面上做到吗 我尝试使用env file不幸的是 这设置了在 Do
  • Bash 变量:区分大小写?

    Bash shell 脚本区分大小写吗 是可变的date与DATE 是的 它区分大小写 就像 UNIX 的其余部分一样 date and DATE是两个不同的变量 makefile and Makefile是两个不同的文件 h and H是

随机推荐

  • 如何在 Swift 中返回序列?

    我正在尝试编写一个扩展Matrix书中的例子 稍微调整为通用的 https stackoverflow com q 24136604 458193 我正在尝试编写一个名为的方法getRow返回给定行的值序列 在 C 中 我会这样写 IEnu
  • 迭代 JSON 数据? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个如下所示的 JSON 数据
  • 数据源中 String 类型的给定值无法转换为指定目标列的 bigint 类型

    这是我的代码 protected void SendToServer Click object sender EventArgs e DataTable Values Session valuesdt as DataTable if Val
  • 必须在创建 QCoreApplication 之前设置属性 Qt::AA_UseSoftwareOpenGL

    所以我的环境是 Windows 10 截至 2019 年 11 月 8 日更新 通过 miniconda 安装了 Python 3 6 Spyder 4 运行 miniconda shell 激活虚拟环境 运行 Spyder 我得到以下信息
  • .PO 到 .MO - 程序转换 (PHP)

    我计划允许用户通过 PHP 用户界面生成 POT 文件 PO 文件 作为 CMS 解决方案的一部分 一旦生成这些文件 简单一点 我希望允许我的系统自动将这些文件转换为 MO 文件以响应用户 POST 请求 我在SO上看到了以下问题 php
  • InvalidArgumentError:ConcatOp:输入的维度应该匹配

    Tensorflow 1 7使用dynamic rnn时 一开始运行良好 但在第32步 当我运行代码时它发生变化 时 出现错误 当我使用较小的批次时 代码似乎可以运行更长时间 但是错误仍然弹出 只是无法弄清楚出了什么问题 from mapp
  • 一个带有一个等号的 php if 语句...?这是什么意思?

    我正在尝试解决问题 并且需要理解这个 if 语句的含义 if confirmation payment modules gt confirmation 我能找到的所有资源只显示带有双等号的 if 语句 而不是单等号 这是 php if 的简
  • 错误:没有运算符 << 与这些操作数匹配?

    我正在练习一些 C 试图离开 Java 我偶然发现了这个恼人的错误 错误 没有操作符 这个错误在我的 cpp 文件中 还有其他错误 但我现在不关心它们 void NamedStorm displayOutput NamedStorm sto
  • 是否可以在 Android Wear 上显示 Google 地图视图?

    是否可以在 Android Wear 上显示 Google 地图视图 我想在地图上向用户显示特定位置 您可以设法在您的 Activity 中嵌入 MapView 但是这是行不通的因为 Android Wear 无法直接访问网络 然而 你能做
  • 使用 ImageIO 发送图像流?

    我设置了一个 ServerSocket 和一个 Socket 因此 ServerSocket 使用 ImageIO write 发送图像流 并且 Socket 尝试读取它们并用它们更新 JFrame 所以我想知道 ImageIO 是否可以检
  • 使用 Bash 下载并在 wordpress wp-config.php 中插入盐字符串

    如何插入变量 SALT 的内容在特定点 线或串 使用 Bash 脚本从 WordPress 获取像 wp contet php 这样的文件 SALT curl L https api wordpress org secret key 1 1
  • 应用 CSS 过滤器时,内联 SVG 在 iOS 和 Safari 中消失

    情况是我有一个内联 SVG 生成的格伦蒂康 https github com filamentgroup grunticon并插入到 DOM 中 它是灰色背景上的白色 带有阴影 我对阴影使用了以下 CSS svg webkit filter
  • 在 Python 中注释函数的正确方法是什么?

    Python 中是否有一种普遍接受的注释函数的方法 以下情况可以接受吗 Create a new user def add self 正确的方法是提供文档字符串 那样 help add 也会吐出你的评论 def add self Creat
  • 绑定用户实体和 GlassFish 主体

    我有一个实体类User其中包含用户名 名字 姓氏和密码等信息 我有 GlassFish 3 1 服务器设置来执行身份验证 到目前为止 一切都很好 在容器对用户进行身份验证后 我需要某种方法将主体绑定到实际的用户实体 毕竟 GlassFish
  • 无法使用 RS256 验证 JWT - 算法无效

    我正在尝试将 JWT Auth 从秘密短语移至 RS256 这是示例代码 import fs from fs import jwt from jsonwebtoken const private key fs readFileSync pr
  • 在 Elastic beanstalk 上配置 apache

    我正在 elastic beanstalk 上使用 django 进行开发 我想对 apache 配置进行两处更改 1 将 www domain com 重定向到 domain com 2 重定向http domain com http d
  • 捕获/监听函数的执行

    我想添加到模块记录器中的所有功能 我想记录函数的 开始 时间和 结束 时间 这样我就可以获得每个函数 同步函数 的执行时间 但我不知道如何让它发挥作用 我不想以某种动态方式重写函数 我想在将来调试它们 所以需要保留原始代码 我需要找到某种方
  • 同时运行多个 Python 脚本,然后依次运行

    我可以像这样从 bash 脚本同时运行多个 Python 脚本 bin bash python pr1 py python pr2 py python aop py python loader py 但是 如果我希望一批同时触发 并在运行后
  • 如何调试 GIMP 插件?输出在哪里?

    我正在用 Python 为 Windows 上的 GIMP 制作一个插件 这一页 http gimpbook com scripting notes html建议从 shell 运行它或查看 xsession errors 都不起作用 我可
  • Jenkinsfile:在 Docker 容器中运行 sh 步骤时权限被拒绝

    我在运行简单的程序时遇到问题Jenkinsfile e g pipeline agent label ssh slave stages stage Shell Test steps sh echo Hello World master 上的