如何在 Jenkinsfile 中获取 shell 脚本的输出?

2023-11-22

在 Jenkinsfile Groovy 脚本阶段,假设我想发出一个 linux 命令来输出字符串的行和列,并且想要获取某一行的输出中的第 n 列。此类命令的一个示例是“ls -al”。那我这样做对吗?

stage("Get dir size") {
  sh returnStatus: true, script: '''
    LINE=`ls -al | grep some_dir`
    IFS=" " read -ra COLS <<< $LINE
    echo ${COLS[4]}
  '''
  /* I want to use the value of ${COL[4]} after above block */
}

但是我如何获取 ${COL[4]} 的值,它是“ls -al”命令中的第五列,即目录大小?

Thanks!


您在示例中显示的 bash 脚本不会返回正确的目录大小。它通常会返回文件的大小4096字节而不是所有文件和子目录递归的总大小。如果您想获取总目录大小,可以尝试以下操作:

#!groovy

node('master') {

  stage("Get dir size") {
    script {
      DIR_SIZE = sh(returnStdout: true, script: 'du -sb /var/jenkins_home/war/jsbundles | cut -f1')
    }
    echo "dir size = ${DIR_SIZE}"
  }
}

关键部分是使用sh步与returnStdout启用后,您可以在变量内捕获脚本打印到控制台的内容。在此示例中,我计算的总大小为/var/jenkins_home/war/jsbundles文件夹,当我运行此管道脚本时,我得到:

dir size = 653136

然后你可以使用DIR_SIZE变量作为后续管道步骤的输入。

替代方法:使用 Groovy 的File.directorySize()

您可以考虑使用 Groovy 的内置方法,而不是使用 bash 脚本File.directorySize(), 就像是:

#!groovy

node('master') {

  stage("Get dir size") {
    script {
      DIR_SIZE = new File('/var/jenkins_home/war/jsbundles').directorySize()
    }
    echo "dir size = ${DIR_SIZE}"
  }
}

但是,与使用 bash 命令的用例相比,这种方法会给您带来不同的结果:

dir size = 649040

这是因为 Groovy 的File.directorySize()方法将结果递归地计算为所有文件大小的总和,并且不考虑目录文件的大小。在此示例中,差异在于4096- 目录文件的大小/var/jenkins_home/war/jsbundles(此路径不包含任何子文件夹,仅包含一堆文件)。

更新:从列式输出中提取数据

您可以通过管道命令从类似列的输出中提取任何信息grep and cut一起。例如,您可以将上面的示例替换为:

#!groovy

node('master') {
  stage("Get dir size") {
    script {
      DIR_SIZE = sh(returnStdout: true, script: 'ls -la /var | grep jenkins_home | cut -d " " -f5')
    }
    echo "dir size = ${DIR_SIZE}"
  }
}

对于以下输出:

total 60
drwxr-xr-x  1 root    root    4096 Nov  4  2017 .
drwxr-xr-x  1 root    root    4096 May 31 03:27 ..
drwxr-xr-x  1 root    root    4096 Nov  4  2017 cache
dr-xr-xr-x  2 root    root    4096 May  9  2017 empty
drwxr-xr-x  2 root    root    4096 Nov  4  2017 git
drwxrwxr-x 20 jenkins jenkins 4096 May 31 12:26 jenkins_home
drwxr-xr-x  5 root    root    4096 May  9  2017 lib
drwxr-xr-x  2 root    root    4096 May  9  2017 local
drwxr-xr-x  3 root    root    4096 May  9  2017 lock
drwxr-xr-x  2 root    root    4096 May  9  2017 log
drwxr-xr-x  2 root    root    4096 May  9  2017 opt
drwxr-xr-x  2 root    root    4096 May  9  2017 run
drwxr-xr-x  3 root    root    4096 May  9  2017 spool
drwxrwxrwt  2 root    root    4096 May  9  2017 tmp

它会提取4096 - the jenkins_home文件大小。

值得记住的事情:

  • 使用简单的 bash 脚本,例如ls -la /var | grep jenkins_home | cut -d " " -f5。您上面显示的示例在我的本地 bash 以及 Jenkins 服务器中不起作用
  • add returnStdout: true参数为sh步骤将命令打印的内容返回到控制台。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Jenkinsfile 中获取 shell 脚本的输出? 的相关文章

  • Spring Boot 开发工具 IntelliJ

    我正在使用 Spring Boot 1 3 0 M5 并且我正在尝试利用 devtools 这允许您在开发过程中对应用程序进行更改 并且启动将重新加载您的应用程序 我已经看到这个演示使用 Java 和 Maven 在 STS 中工作 我正在
  • Groovy:为什么我需要双转义方括号?

    为什么这不起作用 hello world split 这会 hello world split 这实际上是不同上下文中的两次转义 因为参数是表示为字符串的正则表达式 The 必须进行转义 否则它将在正则表达式中具有特殊含义 正则表达式的转义
  • 在 Groovy 中分配对象属性的简写方法?

    我使用此约定创建 Groovy 对象 Item item1 new Item name foo weight 150 是否有操作属性对象的速记约定 像这样的东西 item1 name hello weight 175 this does n
  • Jenkins 脚本化管道或声明式管道

    我正在尝试将旧式项目基础工作流程转换为基于 Jenkins 的管道 在经历的同时docs https jenkins io doc book pipeline 我发现有两种不同的语法名为scripted and declarative 比如
  • 在没有 Grails 的普通 Spring MVC 中使用 GSP 视图

    我想在普通的旧 Spring MVC 应用程序中使用 GSP 视图而不是 JSP JSTL 视图 我在 web xml 中添加了一个 groovy servlet TemplateServlet 如下所示
  • 如何在 Eclipse RCP 项目中使用 groovy?

    我有一个 Eclipse RCP 项目 我想在其中使用 Groovy 我尝试做的是 1 添加 Groovy Nature 2 在 src 文件夹下创建Groovy文件3 从 View 的createPartControl 方法调用groov
  • Gradle:从另一个插件添加插件依赖项

    我正在创建 gradle 自定义插件 我的任务之一需要确保另一个插件应用于同一项目 因为它将在其之上运行 我希望我的插件的用户避免设置对另一个插件的显式依赖 我想在我的插件中执行此操作 所以 我想要这个插件 https plugins gr
  • 整合 Jenkins 电子邮件通知

    我有一个 Jenkins 项目 由 3 个简单的自由式作业组成 每个作业都有自己的构建从站 每个作业都与一个单独的平台相关联 linux mac 或 windows 当开发人员提交代码时 Jenkins 很快就会轮询存储库 在每个构建从属设
  • 致命:Jenkins IIS ID 无效

    我正在尝试设置 Jenkins 从 bitbucket 中提取并构建一个项目 我在 IIS 8 5 Server 2012 r2 上使用它 我已经设置了 Git 和 Bitbucket 插件 我已经建立了一个包含以下内容的项目 Branch
  • 使用转置以完全外连接样式合并列表

    我正在尝试返回一个加入列表 但连接必须像数据库完全外连接一样 例如 给出以下内容 def x a 1 b 2 a 1 b 3 a 2 b 4 a 3 b 5 def y f 10 b 2 g 7 f 100 b 3 g 8 f 20 b 4
  • Grails 测试中的模拟配置

    在 Grails 2 0 X 之前 可以使用mockConfig测试扩展的基类提供的方法 然而 在 Grails 2 0 X 中 建议测试类使用 TestFormixin 而不是扩展基类 这个 mixin 似乎没有提供任何与mockConf
  • 在 mule 中使用 groovy 表达式来限制 IP

    我在 mule 中使用 cxf 创建了一个代理服务 我的 mule 版本是 3 3 0 CE 现在 我想在使用代理服务创建的 wsdl 中添加限制 我的限制不应允许他们看到我的 wsdl 的每个 IP 为此 我找到了 Groovy 表达式和
  • Jenkins 文本参数 - 特殊字符乱码(不需要的变量替换)

    我在 Jenkins Linux 下 有一份工作构建参数 https wiki jenkins ci org display JENKINS Parameterized Build类型为 文本 我使用参数来形成在构建过程中使用的文件的内容
  • Groovy:验证 JSON 字符串

    我需要检查 Groovy 中的字符串是否为有效的 JSON 我的第一个想法就是把它发送出去new JsonSlurper parseText myString 并且 如果没有例外 就假设它是正确的 然而 我发现 Groovy 很乐意接受尾随
  • 严重:https://jenkins.domainname.com/tcpSlaveAgentListener/ 似乎正在发布无效的 X-Instance-Identity

    我们正在尝试将之前连接的代理连接到 Jenkins 服务器 我们得到以下错误 SEVERE https jenkins domainname com tcpSlaveAgentListener appears to be publishin
  • 在 Jenkins 中执行批处理文件

    我有一个简单的批处理文件 我想要从 Jenkins 调用 运行 执行该文件 Jenkins 中有同样的插件吗 如何从 Jenkins 执行批处理文件 如果有相同的教程或文档 无需为此添加新插件 在Jenkins 选择您的工作名称并转到配置部
  • 1) Java 和 2) Groovy 自动导入哪些包?

    在 Groovy 中进行过相当多的编程后 我知道某些包中的类会自动导入 1 Java 和 2 Groovy 的独家新闻是什么 是否有一个明确的列表 列出了您不需要为每种语言指定导入的语言 在Java中 默认导入的唯一包是 java lang
  • 访问静态范围内的全局变量

    有没有办法从同一脚本中声明的类的静态方法访问脚本中声明的全局变量 例如 def s 12345 class MyClass static def method println s 因为这样它会因错误而失败 You attempted to
  • 从 url 中删除域的最佳方法

    我必须从中删除域的网址 您是否知道在不使用以下内容的情况下实现这一目标的更好方法 def 示例 decodeUrl replace http www espn com http www espn com Thanks 使用 java net
  • 哪个持续集成服务器能够对作业进行排队?

    使用案例 CI 服务器轮询一些 VSC 存储库并为每个修订版运行测试套件 如果提交了两个或多个修订 即使在相对较小的时间间隔内 我也希望 CI 服务器将每个修订放入队列中 为每个修订运行测试 存储结果 并且不再为这些提交运行测试 而且我不希

随机推荐

  • 是否可以选择跨度的堆叠顺序?

    我正在使用 Twitter Bootstrap 启动一个项目 就像响应式 css 一样 当视口变小时 使跨度堆叠在一起 给出以下设计 http jsfiddle net kJp6J 1 是否可以选择在小屏幕上首先堆叠哪个块 就我而言 我希望
  • 如何从 Visual Studio 项目中排除文件/文件夹?

    我找不到任何选项或命令来将文件或文件夹从我的 Visual Studio 项目中排除 csproj jsproj 可以选择在解决方案资源管理器中包含文件和文件夹 gt 显示所有文件 gt 鼠标左键单击目标 gt 包含在项目中 但没有选择ex
  • MFC:如何在C菜单项中添加工具提示?

    如何为 CMenu 项目添加工具提示 我找不到任何简单且有用的资源 请帮忙 谢谢 最简单的方法是将多个字符串传递给菜单文本 并用换行符分隔 这将自动使 CMenu 显示文本的第二部分作为菜单工具提示 例如 如果菜单项文本是 单击此处 请将其
  • Heroku 应用程序崩溃,在尝试 heroku rake db:migrate 时收到“无效的数据库 URL”

    我是编程新手 当我在尝试 heroku rake db migrate 时遇到此问题时 正在遵循 Michael Hartl 的 Rails 教程 in app app bundle gems ruby 1 9 1 gems rake 0
  • OnClientClick 中的服务器标记

    以下给出了 服务器标记格式不正确 的错误
  • 调试揭示模块模式:函数在调用之前不在范围内?

    如果我在 Chrome 开发者工具中运行此代码 var test function var publicFunction privateFunction1 privateFunction2 privateFunction1 function
  • 使用 Unicode 补充多语言平面符号创建网络字体

    我对传统纸牌游戏进行了在线概念验证 为了避免实际绘制卡片的图片 我使用了对应的Unicode字符 例如 U 1F0A1 虽然这在现代 Linux 桌面上效果很好 其中DejaVuSans 用于显示这些字符 其他操作系统 例如 Windows
  • 如何使用 Android 12 宣布的新 Material You 颜色

    Google 宣布Android 12 的新颜色个性化 采用 Material You 设计 我们如何使用应用程序中的这些个性化颜色 首先 我想知道如何将它与 Jetpack Compose UI 一起使用 更新 2021 年 10 月 2
  • PHP转发数据帖子

    我尝试在不使用 cURL 的情况下将数据从一个页面转发到另一页面 这可能吗 目前我已经尝试过 header HTTP 1 1 307 Temporary Redirect header Location new location php 这
  • 将指针编组到字符串数组

    我在整理指向字符串数组的指针时遇到一些问题 它看起来像这样无害 typedef struct char listOfStrings 100 UnmanagedStruct 这实际上嵌入到另一个结构中 如下所示 typedef struct
  • 迭代 Ibatis 中的对象列表

    我有一个对象列表 我想在其中迭代和访问 ibatis sql 中的特定字段 Ex public Class Student String id String name 我将传递一个学生对象列表 List Student 作为参数并迭代访问每
  • 在活动布局中使用 Admob 时的白色状态栏

    我正在使用 CoordinatorLayout 和relativelayout 在底部显示广告 但我得到的是白色状态栏 当我删除相对布局和 adview 时 一切正常 当我将 CoordinatorLayout 包裹在relativelay
  • 在 JavaScript 函数中使用三元运算符

    我是 Javascript 新手 正在努力解决这些三元运算符的问题 我有这个小代码段 const x MSys inShip ship launch if x send command x 虽然这工作效率足够高 但我很好奇是否可以在函数调用
  • 画布扭曲绘图。如何获得设置尺寸和样式尺寸之间的比例因子?

    我有这个画布
  • 在Python中转义html?

    我有一个 img src string but string可能包含 我该怎么做才能逃脱它 Example string test jpg img src test 不起作用 在Python 3 2中一个新的html引入了模块 该模块用于从
  • n 位整数的平方与两个 n 位整数的乘法

    免责声明 家庭作业问题 我正在寻找提示 F Lake 教授告诉他的班级 对 n 位整数进行平方比对两个 n 位整数进行乘法渐近更快 他们应该相信他吗 我相信通过移位 加法将两个 n 位整数相乘是一个 O n 操作 但我不明白为什么对一个 n
  • 使用 CSS 和 IE 旋转文本

    我需要用 CSS 旋转文本 我有以下样式规则 但它们似乎不适用于 Internet Explorer footer descr span moz transform rotate 20deg Firefox o transform rota
  • matplotlib:以 None 作为值绘制 numpy 数组

    我有一个看起来像这样的数组 k numpy array 1 0 001 1 1 0 002 None None 1 2 0 003 0 99 0 004 我想绘制不是的值 None None 并保留数组值的索引 也就是说 只要有间隙 我就想
  • Go中如何实现策略模式?

    这是我试图解决的一般问题 一组包从一个源收集数据并将其发送到多个通道 第二组包从多个通道收集数据并将其写入一个源 这组包需要转换多种格式的数据 这似乎是策略模式的完美案例 但我不确定如何最好地使其在 Go 中发挥作用 一般来说 不要迷失在构
  • 如何在 Jenkinsfile 中获取 shell 脚本的输出?

    在 Jenkinsfile Groovy 脚本阶段 假设我想发出一个 linux 命令来输出字符串的行和列 并且想要获取某一行的输出中的第 n 列 此类命令的一个示例是 ls al 那我这样做对吗 stage Get dir size sh