当前位置: 首页 > 面试题库 >

在Jenkins管道外壳中运行嵌套命令

湛骏祥
2023-03-14
问题内容

我想在Jenkins管道中运行像这样的嵌套shell命令:

docker stop $(docker ps -aq)

不幸的是,当我将其格式化为管道语法时:

sh('docker stop $(docker ps -aq)')

Jenkins似乎无法正确运行它们,但是输出:

"docker stop" requires at least 1 argument(s).

我试图在bash下运行命令,如下所示:
在jenkins管道上运行bash命令, 但最终遇到类似的问题。任何想法如何解决这个问题?


问题答案:

如果将shell命令扩展为两行,这对于Jenkins Pipeline来说将变得更加容易:

  • 第一个捕获要停止的Docker容器。
  • 第二个命令停止在第一个命令中捕获的那些Docker容器。

我们使用第一行将shell命令的输出捕获到一个变量中:

containers = sh(returnStdout: true, script: 'sudo /usr/bin/docker ps -aq')

然后,我们使用第二个命令对存储在变量中的第一个命令的捕获输出进行操作:

sh("sudo /usr/bin/docker stop $containers")

请注意,该docker命令通常适合与docker ps -aq其他命令一起使用的输出,但是如果它不喜欢存储在变量中的输出,则可以按照以下方式重新格式化:

containers = sh(returnStdout: true, script: 'sudo /usr/bin/docker ps -aq').trim()

例如,这将删除开头的空白和结尾的换行符。Docker CLI通常并不关心这一点,但是在这里可能需要重新格式化。

由于在此处删除换行符会导致合并的容器ID较长,因此(如您所述),我们需要用空格替换它来界定容器ID。这样就可以格式化存储在containers变量中的字符串:

containers = sh(returnStdout: true, script: 'sudo /usr/bin/docker ps -aq').replaceAll("\n", " ")



 类似资料:
  • 问题内容: 在groovy脚本中(用于jenkins管道):如何运行命令而不是命令? 我尝试了以下方法: 在通话中致电“ ” : 将呼叫替换为呼叫: 附加信息: 我的命令比命令更复杂。 问题答案: 您提供的Groovy脚本正在将结果脚本中的第一行格式化为空白行。shebang告诉脚本使用/ bin / bash而不是/ bin / sh运行,它需要位于文件的第一行,否则它将被忽略。 因此,您应该这

  • 问题内容: 当使用* nix外壳程序(通常是bash)时,我经常产生一个子外壳程序,可以用它处理一个小任务(通常在另一个目录中),然后退出该外壳程序以继续父外壳程序的会话。 偶尔,我会失去对运行嵌套shell还是在顶层shell中的跟踪,并且会不小心产生其他的子shell或错误地退出顶层shell。 。 有没有一种简单的方法可以确定我是否在嵌套shell中运行?还是我以完全错误的方式解决问题(通过

  • 我使用Jenkins在docker容器中使用以下命令 码头工人拉詹金斯/詹金斯 docker run-p8080:8080--name=jenkins master jenkins/jenkins 获取此错误 calc.py/var/jenkins_home/workspace/pythoncalculator@tmp/耐用-b7e99e01/脚本。sh:1:/var/jenkins\u home

  • 我有一个简单的Jenkins管道,它创建了一个包含3个容器的pod——jnlp、dind和示例测试 如下所示- 还定义了几个阶段- 现在我的根文件夹中有了这个脚本“示例”,我想运行它,但不知怎么的,它找不到。 Dockerfile看起来像这样- pwd返回“/home/jenkins/agent/workspace/test pipeline”,而不是docker容器路径。 结果如下- 你知道怎么

  • 问题内容: 是否可以在管道常规脚本中直接调用PowerShell命令?在Jenkins中使用自定义作业时,我可以使用PowerShell插件调用该命令。但是在groovy脚本中没有片段可以使用它。 我也尝试过,但似乎此命令不允许在命令中包含多行和注释。 问题答案: 要从Groovy脚本调用PowerShell脚本,请执行以下操作: 您必须使用命令。 之后,您必须确保正确返回错误代码()变量(应导致

  • 问题内容: 您是否知道如何在内部执行AWS CLI命令以构建管道?我没有找到任何插件 问题答案: 首先,您需要在服务器上安装aws cli,并确保jenkins用户有权运行它。 或者在创建EC2实例时简单地使用Amazon AMI,它附带了aws cli。 使用适当的策略为角色分配实例。(在aws configure中使用用户密钥更简单) 在管道步骤中使用