在jenkinsfile中使用命令sh的正确语法

时间:2017-04-17 12:19:47

标签: linux jenkins sh jenkins-pipeline

我试图使用jenkinks文件删除具有相同ID的图像,我尝试过:

sh "docker images | grep 643975c526cf | awk '{print `$1` ':' `$2`}' | xargs docker rmi"

sh "docker images | grep 643975c526cf | awk '{print \$1 ':' \$2}' | xargs docker rmi"

sh "docker images | grep 643975c526cf | awk '{print ${1} ':' ${2}}' | xargs docker rmi"

但是awk'{print $ {1}':'$ {2}}'的语法错误,使用命令行工作正常,但我不知道sh命令上正确的syntex。

3 个答案:

答案 0 :(得分:1)

尝试以下语法。

sh "docker images | grep 643975c526cf | awk '{ print $1 ":" $2 }' | xargs docker rmi"

答案 1 :(得分:0)

最后,我发现这种方式并且工作正常:

sh """#!/bin/bash
    docker images | grep 643975c526cf  | awk '{print $1 ":" $2}' | sort -u | xargs docker rmi -f
   """

答案 2 :(得分:0)

Jenkins管道中使用的下一个代码块(对于共享库也是如此) 就我而言,我根据远程主机上的应用程序名称获得了所有进程ID。如果需要从本地主机获取进程列表,请仅使用 cmdFindPs

cmdSshConnect = "sshpass -p ${remPassword} ssh ${remLogin}@${remServer}"
cmdFindPs = 'ps aux | grep \'' + env.buildName +  '\' | awk \'{print $2}\''
cmdFillFindPs = cmdSshConnect + ' ' + cmdFindPs

//echo 'Command find = ' + cmdFillFindPs
runPs = sh(returnStdout: true, script: cmdFillFindPs)
//echo runPs.text