jenkins管道在循环中执行ssh命令

时间:2018-08-30 22:05:37

标签: bash jenkins ssh jenkins-pipeline

我已经创建了管道,并且希望在多个服务器上运行Shell脚本,我正在从txt文件读取服务器列表,我编写了代码以遍历该列表,并为该列表中的每个服务器运行Shell脚本。 / p>

问题是循环不会超越第一次执行。如果我只打印服务器名称而不执行ssh命令,它将打印所有服务器名称,这意味着循环工作正常,但不能正常使用ssh命令。我也尝试过循环,但是同样的问题。

stage('execute script') {
   steps {
        script {

           ....some code here

           def absoluteFilePath = "${WORKSPACE}/serversList.txt"
           def fileContent = readFile(absoluteFilePath)
           listOfServers = fileContent.split('\n')
        }
        iterateOverList(listOfServers, "${WORKSPACE}/")
   }
}

@NonCPS 
def iterateOverList(list, workSpacePath) {
    //iterate over servers list and execute shell script on it.
    list.each { hostServer ->
        sh "ssh -t -o StrictHostKeyChecking=no -o 'UserKnownHostsFile /dev/null' -i /var/lib/user/.ssh/id_rsa user@${hostServer} 'sudo bash -s' <  ${workSpacePath}myShellScript.sh"
    }
}

1 个答案:

答案 0 :(得分:0)

实际上,Jenkins管道中有几个未解决的错误,带有时髦的闭包,例如https://www.emberjs.com/api/ember-data/3.3/classes/DS.Store/methods/pushPayload?anchor=pushPayloadJENKINS-46749

因此,请使用简单的Java循环遍历您的列表:

undefined