Дженкинс 2,82
Мастер Дженкинса - С этой машины у меня нет доступа к Интернету / внешнему миру.
Ведомый сервер Jenkins, на котором запущены док-контейнеры (для подчиненного сервера), имеют доступ к внешнему миру/Интернету.
Я установил плагин PagerDuty и правильно настроил его в задании, чтобы отправлять уведомления при сбоях и при возвращении состояния в нормальное состояние.
Когда я запустил задание, я получил следующее сообщение об ошибке com.mashape.unirest.http.exceptions.UnirestException: org.apache.http.conn.ConnectTimeoutException: Connect to events.pagerduty.com:443 [events.pagerduty.com/54.244.255.45, events.pagerduty.com/54.241.36.66, events.pagerduty.com/104.45.235.10] failed: connect timed out
.
0:49:44
10:49:44 Resolving incident
10:50:14 Error while trying to resolve
10:50:14 com.mashape.unirest.http.exceptions.UnirestException: org.apache.http.conn.ConnectTimeoutException: Connect to events.pagerduty.com:443 [events.pagerduty.com/54.244.255.45, events.pagerduty.com/54.241.36.66, events.pagerduty.com/104.45.235.10] failed: connect timed out
10:50:14 Build step 'PagerDuty Incident Trigger' marked build as failure
10:50:14 Notifying upstream projects of job completion
10:50:14 Finished: FAILURE
Сначала я зашел на ведомую машину и попытался пропинговать IP-адреса рядом с сервером events.pagerduty.com (как указано выше), и ping работал нормально. Выполнение telnet через порт 443 (ssh) также дало правильный вывод.
Поскольку подчиненные серверы на самом деле являются док-контейнерами, я зашел внутрь одного из подчиненных серверов контейнеров и сделал то же самое (ping, telnet на 443 для этих IP-адресов events.pagerduty.com, nslookup и nc / ncat и т. д., и результат выглядит хорошо).
Здесь я внутри хоста подчиненного контейнера докера, т.е. я запустил docker exec -it shenazi_ninza bash
и теперь нахожусь внутри хоста/IP-адреса контейнера:
root@da5ca3fef1c8:/data# hostname
da5ca3fef1c8
root@da5ca3fef1c8:/data# hostname; hostname -i
da5ca3fef1c8
172.17.137.77
root@da5ca3fef1c8:/data# nslookup events.pagerduty.com
Server: 17.178.6.10
Address: 17.178.6.10#53
Non-authoritative answer:
events.pagerduty.com canonical name = events.gslb.pagerduty.com.
Name: events.gslb.pagerduty.com
Address: 54.241.36.66
Name: events.gslb.pagerduty.com
Address: 54.245.112.46
Name: events.gslb.pagerduty.com
Address: 104.45.235.10
root@da5ca3fef1c8:/data#
root@da5ca3fef1c8:/data# for s in `nslookup events.pagerduty.com|grep "Address: [0-9]"|sed "s/ //g"|cut -d':' -f2`; do echo Server: $s; telnet $s 443; done
Server: 54.245.112.46
Trying 54.245.112.46...
Connected to 54.245.112.46.
Escape character is '^]'.
^]
telnet> quit
Connection closed.
Server: 104.45.235.10
Trying 104.45.235.10...
Connected to 104.45.235.10.
Escape character is '^]'.
^]
telnet> quit
Connection closed.
Server: 54.241.36.66
Trying 54.241.36.66...
Connected to 54.241.36.66.
Escape character is '^]'.
^]
telnet> quit
Connection closed.
root@da5ca3fef1c8:/data# for s in `nslookup events.pagerduty.com|grep "Address: [0-9]"|sed "s/ //g"|cut -d':' -f2`; do echo Server: $s; telnet $s 443; done
Server: 54.245.112.46
Trying 54.245.112.46...
Connected to 54.245.112.46.
Escape character is '^]'.
^]
telnet> quit
Connection closed.
Server: 54.241.36.66
Trying 54.241.36.66...
Connected to 54.241.36.66.
Escape character is '^]'.
^]
telnet> quit
Connection closed.
Server: 54.244.255.45
Trying 54.244.255.45...
Connected to 54.244.255.45.
Escape character is '^]'.
^]
telnet> quit
Connection closed.
root@da5ca3fef1c8:/data# ^C
root@da5ca3fef1c8:/data# nc -v -w 1 events.pagerduty.com 443
Connection to events.pagerduty.com 443 port [tcp/https] succeeded!
root@da5ca3fef1c8:/data#
Интеграция PagerDuty в конфигурацию задания Jenkins доступна в области POST Built Actions
.
Мой вопрос: разве вся работа не выполняется на ведомом сервере (он же ведомый контейнер, откуда у меня есть доступ к внешнему миру, и я могу подключиться к серверу events.pagerduty.com)?
Кажется, что Дженкинс запускает что-то в разделе POST Build Data
на главном экземпляре Дженкинса, откуда у меня нет доступа к events.pagerduty.com (ping/telnet и т. д.)? Поскольку мы не хотим, чтобы мастер Jenkins имел доступ к внешнему миру, как можно решить эту проблему, чтобы я мог получать предупреждения в случае сбоя сборки для этой работы?