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

Сесијата на прелистувачот докажува само една насока

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

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

Опција A: отворете тесна крајна точка

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

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

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

Опција B: превртете ја насоката со реле

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

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

Упатствата на Jenkins за вебхукови зад огнени ѕидови ја опишуваат оваа форма и вреди да се прочитаат пред да напишете сопствен препраќач. Завршете TLS на релето, проверете го потписот пред настанот да стигне до задачата и надгледувајте ја излезната врска, бидејќи паднат тунел изгледа точно како настан што никогаш не бил испратен. Потврдете и дека релето го зачувува телото на барањето бајт по бајт, бидејќи проверките на потписот паѓаат на JSON што бил анализиран и повторно кодиран по патот.

Опција C: наместо тоа анкетирајте го складиштето

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

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

Секое анкетирање троши API повици и додава задоцнување помеѓу push и градењето, што станува видливо на зафатени складишта и заеднички ограничувања на брзината. Му требаат и акредитиви зачувани таму каде што работи анкетарот, затоа ограничете го токенот на пристап само за читање до складиштето и ротирајте го како секоја друга тајна. Изберете го ова кога обемот на настани е низок или кога влезна точка никогаш нема да биде одобрена, и кажете го тоа во описот на задачата за да не се прашува некој подоцна зошто градењата заостануваат.

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

Која и да ја избравте опцијата, тестот за прифаќање е настан испратен од изворната платформа, не картичка во прелистувач отворена од привилегиран лаптоп. Испратете празен commit до пробна гранка и прочитајте го кодот за одговор на доставата, дневникот на релето или излезот од задачата за анкетирање, по тој редослед. 200 од крајната точка без градење значи дека филтерот на тригерот е погрешен; истекот на времето значи дека патеката е сѐ уште затворена. Запишете кој од трите дизајни се користи, инаку следниот што ќе отстранува грешки ќе го повтори тестот во прелистувач и ќе стигне до истиот ќорсокак.

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

Поврзани статии