我正在研究Jenkins管道,该管道在同一主机上并行运行两个阶段。
在两个阶段中,都将调用单独的ansible剧本。 这两个剧本在相同远程主机, 并行 (在下面的Jenkins管道中定义)上运行单独的脚本
stage('Parallel execution on hosts') {
parallel {
stage('stage one') {
steps {
script {
println(list)
list.each { ip ->
new_map[ip] = {
sh "ansible-playbook playbook_one.yml -f 5 -i $ip, --extra-vars 'ansible_connection=ssh ansible_ssh_user=user ansible_ssh_private_key_file=key.pem' -vvv"
}
}
retry(count:3) {
parallel new_map
}
}
}
}
stage('stage two') {
steps {
script {
println(list)
list.each { ip ->
new_map_2[ip] = {
sh "ansible-playbook playbook_two.yml -f 5 -i $ip, --extra-vars 'ansible_connection=ssh ansible_ssh_user=user ansible_ssh_private_key_file=key.pem' -vvv"
}
}
retry(count:3) {
parallel new_map_2
}
}
}
}
在大多数情况下,它运行良好,并且输出成功。
但是,有时运行脚本的远程主机在运行任务时变得无法访问。 当发生这种情况时,它会随机发生在ansible剧本中的任何任务上。
到目前为止,我还没有观察到失败的模式。 尽管极少发生,但并不理想。
这可能是因为两个剧本试图在同一主机上并行运行吗?