Можете отворити Jenkins преко VPN-а и ипак видети да GitHub пријављује неуспешан вебхук, јер су то две различите везе са два различита власника. Прегледач се креће кроз тунел који је договорио ваш лаптоп; GitHub-ова услуга доставе почиње на јавном интернету и нема путању у приватну мрежу. Приступ репозиторијуму то не мења, иако сам Jenkins може без проблема да преузима из истог репозиторијума. Изаберите улазну тачку, релеј или анкетирање, па тестирајте путању којом догађај заиста пролази.

Сесија прегледача доказује само један смер

VPN веза одговара на једно питање: може ли овај лаптоп да достигне унутрашњи хост. Достава вебхука пита друго: може ли спољна услуга да отвори везу ка том хосту. То што Jenkins преузима из репозиторијума је одлазни саобраћај и ништа не говори о долазној доступности. Држите оба смера на одвојеним линијама скице, укључујући и то која страна започиње сваки.

Прочитајте запис о достави пре него што било шта промените. Истек времена, прекид везе и прихваћен захтев који није одговарао ниједном послу имају три различита власника: мрежу, прокси и конфигурацију окидача.

Опција А: отворите уску улазну тачку

Ако организација већ објављује одобрени улаз, отворите путању вебхука уместо контролне табле. То обично значи правило обрнутог проксија које прихвата POST на URL-у куке и прослеђује их Jenkins-у, док административни интерфејс остаје недоступан споља.

curl -sS -o /dev/null -w "%{http_code}\n" -X POST https://jenkins.example.com/github-webhook/

Изведите тај тест са мреже без VPN приступа, јер успех из унутрашњости тунела ништа не доказује. Улазна тачка треба да одбија захтеве без заједничке тајне, коју GitHub шаље као заглавље потписа, и да прихвата само ту једну путању и метод које сте објавили. Јавна Jenkins конзола није поправка вебхука; то је инцидент који чека следећи скенер. Ограничите правило довољно уско да остатак апликације задржи претходне контроле приступа.

Опција Б: окрените смер помоћу релеја

Тамо где долазно излагање неће бити одобрено, мали клијент унутар мреже може да држи одлазну везу ка релеју и прима прослеђене догађаје. Релеј тада постаје део путање доставе, па су његова доступност и аутентикација једнако важне као и посао изградње.

ssh -N -R 9000:localhost:8080 relay.example.net

Jenkins-ове смернице о вебхуковима иза заштитних зидова описују овај облик и вреди их прочитати пре писања сопственог прослеђивача. Завршите TLS на релеју, проверите потпис пре него што догађај стигне до посла и надгледајте одлазну везу, јер прекинут тунел изгледа исто као догађај који никада није послат. Потврдите и да релеј чува тело захтева бајт по бајт, јер провере потписа падају на JSON-у који је успут рашчлањен и поново кодиран.

Опција Ц: анкетирајте репозиторијум

Анкетирање мења кашњење за једноставност и уопште не захтева долазну путању. Jenkins може да анкетира по распореду, или мали посао може да упита API и покрене изградњу када угледа непознату ревизију.

curl -sS -u "$USER:$TOKEN" "https://api.github.com/repos/OWNER/REPO/commits?per_page=1"

Свако анкетирање троши API позиве и додаје кашњење између push-а и изградње, што постаје видљиво на заузетим репозиторијумима и заједничким ограничењима брзине. Потребни су му и акредитиви сачувани тамо где анкетар ради, зато ограничите токен на приступ репозиторијуму само за читање и ротирајте га као сваку другу тајну. Изаберите ово када је обим догађаја низак или када улазна тачка никада неће бити одобрена, и напишите то у опису посла да се касније нико не пита зашто изградње касне.

Прихватите стварну доставу, а не учитавање странице

Коју год опцију изабрали, прихватни тест је догађај који је послала изворна платформа, а не картица прегледача отворена са привилегованог лаптопа. Пошаљите празан commit на привремену грану и прочитајте код одговора доставе, записник релеја или излаз посла анкетирања, тим редом. Одговор 200 са улазне тачке без изградње значи да је филтер окидача погрешан; истек времена значи да је путања још затворена. Запишите који се од три дизајна користи, јер ће иначе следећа особа која отклања грешке поновити тест у прегледачу и доћи до истог ћорсокака.

Примените исто размишљање на повратне позиве плаћања и друга спољна обавештења: свакоме треба сопствена путања у приватну апликацију, чак и када сваки човек већ има VPN сесију. Путања доставе припада дизајну апликације, а не фусноти о мрежама.

Повезани чланци