如果将 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", " ")