конвейер jenkins выполняет команду ssh в цикле - PullRequest
0 голосов
/ 31 августа 2018

Я создал конвейер и хочу запустить сценарий оболочки на нескольких серверах, я читаю список серверов из txt-файла, я написал код для итерации по этому списку и запускаю сценарий оболочки для каждого сервера в этом списке.

Проблема в том, что цикл не проходит после первого выполнения. Если я просто печатаю имя сервера и не выполняю команду 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 голосов
/ 31 августа 2018

На самом деле в трубопроводах Jenkins есть пара неразрешенных ошибок с нестабильными замыканиями, например JENKINS-46749 и JENKINS-46747 .

Так что используйте простой цикл Java для перебора вашего списка:

for (int i = 0; i < list.size(); i++) {
    sh "ssh -t -o StrictHostKeyChecking=no -o 'UserKnownHostsFile /dev/null' -i /var/lib/user/.ssh/id_rsa user@${list[i]} 'sudo bash -s' <  ${workSpacePath}myShellScript.sh"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...