GitHub вэбхукі жеке Jenkins-ке жетпейді: жолды түзетіңіз
Ноутбугіңіздегі VPN сессиясы GitHub-қа Jenkins-ке жол бермейді. Кіріс соңғы нүктесін, реле мен сұрауды салыстырып, оқиғалар жүретін жолды тексеріңіз.
Jenkins-ті VPN арқылы ашып, соған қарамастан GitHub-тың сәтсіз вэбхук туралы хабарлағанын көруге болады, өйткені бұл екі түрлі қосылым және екі түрлі иесі бар. Браузер ноутбугіңіз келіскен туннельмен жүреді; GitHub-тың жеткізу қызметі ашық интернеттен басталады және жеке желіге жолы жоқ. Репозиторийге қатынау мұны өзгертпейді, тіпті Jenkins өзі сол репозиторийден қиындықсыз ала алса да. Кіру нүктесін, релені немесе сұрауды таңдап, содан кейін оқиға шын мәнінде жүретін жолды тексеріңіз.
Браузер сессиясы тек бір бағытты дәлелдейді
VPN қосылымы бір сұраққа жауап береді: бұл ноутбук ішкі хостқа жете ала ма. Вэбхук жеткізу басқа сұрақ қояды: сыртқы қызмет сол хостқа қосылым аша ала ма. Jenkins-тің репозиторийден алуы шығыс трафик және кіріс қолжетімділігі туралы ештеңе айтпайды. Екі бағытты диаграммаңызда бөлек жолдарда ұстаңыз, қай тарап қайсысын бастайтынын да қосыңыз.
Бірдеңені өзгертуден бұрын жеткізу жазбасын оқыңыз. Уақыттың бітуі, қосылымның қайта орнатылуы және ешбір тапсырмаға сәйкес келмеген қабылданған сұраныс — үшеуінің иесі бөлек: желі, прокси және триггер конфигурациясы.
А нұсқасы: тар соңғы нүктені ашыңыз
Егер ұйым бұрыннан мақұлданған кіру нүктесін жарияласа, басқару тақтасының орнына вэбхук жолын ашыңыз. Бұл әдетте ілмек URL-іне POST қабылдайтын және оларды 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.netJenkins-тің брандмауэрлер артындағы вэбхуктер туралы нұсқаулығы осы пішінді сипаттайды және өз жіберушіңізді жазбас бұрын оны оқыған жөн. TLS-ті реледе аяқтаңыз, оқиға жұмысқа жетпей тұрып қолтаңбаны тексеріңіз және шығыс байланысты бақылаңыз, өйткені құлаған туннель ешқашан жіберілмеген оқиғаға дәл ұқсайды. Сондай-ақ реленің сұраныс денесін байт сайын сақтайтынын растаңыз, өйткені жолда талданып, қайта кодталған JSON-да қолтаңба тексерістері сәтсіз аяқталады.
В нұсқасы: оның орнына репозиторийді сұраңыз
Сұрау кідірісті қарапайымдылыққа айырбастайды және кіріс жолын мүлдем қажет етпейді. Jenkins кесте бойынша сұрай алады, немесе шағын жұмыс API-ге сұрақ қойып, бейтаныс ревизияны көргенде құрастыруды бастай алады.
curl -sS -u "$USER:$TOKEN" "https://api.github.com/repos/OWNER/REPO/commits?per_page=1"Әр сұрау API шақыруларын жұмсайды және push пен құрастыру арасында кідіріс қосады, бұл танымал репозиторийлерде және ортақ жылдамдық шектеулерінде байқалады. Оған сондай-ақ сұраушы жұмыс істейтін жерде сақталатын тіркелгі деректері қажет, сондықтан токенді репозиторийге тек оқу қатынауымен шектеп, кез келген басқа құпия сияқты айналдырыңыз. Мұны оқиғалар көлемі төмен болғанда немесе кіру нүктесі ешқашан мақұлданбағанда таңдаңыз және мұны жұмыс сипаттамасында айтыңыз, сонда кейінірек ешкім құрастырулар неге артта қалады деп таңданбайды.
Бетті жүктеуді емес, нақты жеткізуді қабылдаңыз
Қай нұсқаны таңдасаңыз да, қабылдау тесті — бастапқы платформа жіберген оқиға, ал артықшылықты ноутбуктен ашылған браузер қойындысы емес. Скрэтч тармаққа бос commit push етіп, жеткізу жауап кодын, реле журналын немесе сұрау жұмысының шығысын осы ретпен оқыңыз. Соңғы нүктеден 200 келіп, құрастыру болмаса, триггер сүзгісі қате; уақыт бітсе, жол әлі жабық. Үш жобаның қайсысы қолданылып жатқанын жазып қойыңыз, әйтпесе келесі жөндеуші браузер тестін қайталап, сол тұйыққа тіреледі.
Дәл осы логиканы төлем callback-теріне және басқа сыртқы хабарламаларға қолданыңыз: әрқайсысына жеке қосымшаға өз жолы керек, тіпті әр адамның VPN сессиясы болса да. Жеткізу жолы қосымшаның дизайнына тиесілі, желілер туралы төменгі жазбаға емес.