Эмне үчүн GitHub webhook’тору VPN артындагы Jenkins алдында убакыттан өтүп кетет
GitHub webhook’торду ичке карай жөнөтөт, ошондуктан Jenkins’ти коргогон VPN аларды четке кагат. Жеткирүүнү relay аркылуу сыртка чыгарыңыз же webhook’ту сурамжылоо жүргүзгөн agent менен алмаштырыңыз.
Жеткирүү барагы убакыттын бүтүшүн көрсөтөт, ал эми Jenkins эч нерсе жазбайт, бул эч качан келбеген байланыштын белгиси. GitHub webhook’ту өз инфраструктурасынан сиз конфигурациялаган payload URL’ге карай чыгуучу HTTP POST катары жөнөтөт. VPN Jenkins’ти дал ушундай байланышты четке кагуу менен коргойт. Эки тарапта тең эч нерсе сынган эмес. Маселе сурамдын багытында.
Жеткирүү чындыгында эмнени аракет кылат
GitHub payload URL’деги хост атын чечип, ага ачык интернеттен туташат. Эгер ал URL жеке дарекке же сиздин тармагыңыздын ичинде гана чечилүүчү атка көрсөтсө, аракет эч кандай сурам жөнөтүлө электе эле ишке ашпайт. Эгер ал сиздин четиңиз ыргыта турган ачык атка көрсөтсө, аракет анын ордуна убакыттан өтүп кетет.
Бул айырма диагностика үчүн маанилүү. DNS бузулушу жана фильтрленген порт экөө тең Jenkins тарабында эч нерсе болбогондой көрүнөт, жана экөө тең GitHub’да башка себеп кошулган ишке ашпаган жеткирүү катары көрүнөт. URL’ди өзгөртүүдөн мурун ошол себепти окуңуз.
Сыртка карай чалган туннель угуучуну түзбөйт. Адамдар башкача иштейт деп күткөн бөлүк дал ушул.
Байланыштын багытын оңдоонун үч жолу
Ар бир чечим байланышты ким баштайарын өзгөртөт, жана үч форма гана бар.
| Approach | Who initiates | What you give up |
|---|---|---|
| Relay service | An outbound client inside the network | A third party sees every payload |
| Reverse tunnel or ingress | The public edge, into a controlled listener | An inbound surface you must secure |
| Runner or polling | The agent, outbound to GitHub | Instant delivery, replaced by a schedule |
Сурамжылоо эң аз кооз жана башкарууга эң оңой. Relay порт ачпай эле дээрлик заматтагы пикирди сактайт. Payload’дун купуялуулугу үчүнчү тарапты жокко чыгарганда runner адатта туура жооп, анткени жумуш тармактын ичинде турган машинада жүрө алат.
Эмнени башкара аларыңызга жараша тандаңыз, заманбап угулганына жараша эмес.
Жеткирүүнү smee менен сыртка чыгарыңыз
Relay кызматында канал түзүп, анын URL’ин сактаңыз. Тармактын ичинде клиентти орнотуп, жеткирүүлөрдү Jenkins күткөн жолго жөнөтүңүз. Репозиторий жөндөөлөрүндөгү payload URL каналдын URL’ине айланат, мазмун түрү application/json деп белгиленет.
sudo npm install --global smee-client
smee -u CHANNEL_URL --path /github-webhook/ --port 8080Үч деталь анын иштешин чечет. Жол GitHub окуялары үчүн Jenkins күткөнгө дал келиши керек, ал демейде /github-webhook/. Jenkins клиентке берген портто угуп турушу керек. Жана жумушта конфигурацияланган Jenkins URL ошол жолго дал келиши керек, антпесе окуя келип, анан ыргытылат.
Акыркы кыйгач сызыктын дал келбестиги 404 пайда кылат, ал жеткирүү бузулушу катары окулат жана андай эмес.
Аптага чыдай тургандай иштетүү
Алдыңкы пландагы клиент терминал менен өлөт, ал эми webhook’тор бир күн иштеп анан токтойт. Ага Restart=always бар unit бериңиз, аны Jenkins колдонуучусу катары иштетиңиз жана биринчи чыныгы жеткирүүдөн кийин journal’ды окуңуз. Дал ошол акыркы кадам иштеген relay’ды конфигурациялангандан айырмалайт.
[Unit]
Description=smee webhook relay
After=network.target
[Service]
Type=simple
Restart=always
RestartSec=2
User=jenkins
ExecStart=/usr/bin/smee -u CHANNEL_URL --path /github-webhook/ --port 8080
[Install]
WantedBy=multi-user.targetКайталоо баскычынын ордуна чыныгы push менен сынаңыз. Кайталоо relay’дын сакталган payload’ун иштетет, GitHub’дан каналыңызга чейинки жолду эмес, ошондуктан тирүү жеткирүү дагы эле ишке ашпай турганда ал өтүп кетиши мүмкүн.
Unit токтогондо эскертүү бериңиз. Өчүк турган relay түзүлүшү боюнча үнсүз, жана үнсүздүк — сиз мурунтан эле оңдоп жаткан нерсе.
Relay эмнени көрө алат жана качан аны колдонбош керек
Relay payload’ду аяктайт, ошондуктан ал репозиторий аттарын, commit маалыматтарын жана окуя алып жүргөн баарын көрөт. Каналдын URL’ин ачык акыркы чекит катары кабыл алыңыз. Жалган жеткирүүлөр четке кагылышы үчүн Jenkins’тин жашыруун token’ын конфигурацияланган абалда кармаңыз жана Jenkins колдонгон token’ды керектүү минимум менен чектеңиз.
Эгер payload’дун купуялуулугу муну жокко чыгарса, өзүңүз жайгаштырган runner же аутентификацияланган кайтарым туннель — жооп.
Relay эми инфраструктура жана ал иштеткен build сыяктуу эле карап чыгууга татыктуу. Канал агып кетсе, аны айландырыңыз жана тирүү жеткирүүнү акыркы жолу текшерген күндү жазып коюңуз. Ошол күндү runbook’то каналдын URL’инин жанына коюңуз. Бир жыл бою эч ким карап чыкпаган relay — эч кимге таандык эмес ачык акыркы чекит.