Ваша конфигурация выставляет guest.port
для порта 8080
вашей хост-системы Docker (например, Jenkins) со следующей строкой
<port>guest.port:8080</port>
Поскольку порт может быть привязан только к одному сервису одновременно, более поздняя сборка не сможет привязаться к этому порту.
Чтобы решить эту проблему, вы можете использовать разные порты для каждой сборки или подождать, пока один порт, который вы хотите использовать, будет освобожден другим заданием.
Например, вы можете добавить следующее в свой Jenkinsfile непосредственно перед выполнением mvn
:
timeout(time: 10, unit: "MINUTES") {
waitUntil {
script {
sh(script: 'netstat -lnpt 2>&1 | grep ":8080"', returnStatus: true) != 0
}
}
}
sh "mvn ..."
Шаг timeout
заставляет Дженкинса отменяться через 10 минут.
Шаг waitUntil
заставляет Дженкинса повторять script
до тех пор, пока он не будет успешным.
A script
необходим, так как мы делаем Caparison (!=
) возвращаемого значения.
Наконец, netstat
возвращает список связанных в данный момент портов, а grep
вернет 0
, только если порт 8080
является одним из них.