GitHub-ийн вэбхук хувийн Jenkins-д хүрэхгүй: замыг засна уу
Зөөврийн компьютер дээрх VPN сесс GitHub-д Jenkins руу зам өгдөггүй. Ирж буй төгсгөлийн цэг, реле болон polling-ийг харьцуулж, дараа нь үйл явдлууд явдаг замыг шалгана уу.
Та Jenkins-ийг VPN-ээр нээж, гэсэн хэдий ч GitHub бүтэлгүй вэбхукийн талаар мэдээлж байхыг харж болно, учир нь эдгээр нь хоёр өөр эзэмшигчтэй хоёр өөр холболт юм. Хөтөч таны зөөврийн компьютер тохиролцсон туннелээр явдаг; GitHub-ийн хүргэлтийн үйлчилгээ нийтийн интернэтээс эхэлдэг бөгөөд хувийн сүлжээ рүү ямар ч замгүй. Агуулах руу нэвтрэх эрх үүнийг өөрчлөхгүй, Jenkins өөрөө тэр агуулахаас асуудалгүй татаж чадсан ч. Нэвтрэх цэг, реле эсвэл polling-ийг сонгоод, дараа нь үйл явдал бодитоор явдаг замыг шалгана уу.
Хөтчийн сесс зөвхөн нэг чиглэлийг нотолдог
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.netГалт ханын ард байгаа вэбхукийн тухай Jenkins-ийн заавар энэ хэлбэрийг тайлбарладаг бөгөөд өөрийн дамжуулагч бичихээс өмнө унших нь зүйтэй. TLS-ийг релед дээр дуусгаж, үйл явдал ажилд хүрэхээс өмнө гарын үсгийг шалгаж, гадагш чиглэсэн холбоосыг хянаарай, учир нь унасан туннель хэзээ ч илгээгдээгүй үйл явдалтай яг адилхан харагдана. Мөн реле хүсэлтийн биеийг байт байтаар хадгалж байгааг баталгаажуулаарай, учир нь замд задлан дахин кодлогдсон JSON дээр гарын үсгийн шалгалт бүтэлгүйтдэг.
В хувилбар: оронд нь агуулахыг polling хийх
Polling нь хоцрогдлыг энгийн байдалтай солилцож, дотогш чиглэсэн зам огт шаарддаггүй. Jenkins хуваарийн дагуу polling хийж болно, эсвэл жижиг ажил API-аас асууж, танихгүй хувилбарыг харвал бүтээлт эхлүүлж болно.
curl -sS -u "$USER:$TOKEN" "https://api.github.com/repos/OWNER/REPO/commits?per_page=1"Polling бүр API дуудлагыг зарцуулж, push болон бүтээлтийн хооронд хоцрогдол нэмдэг бөгөөд энэ нь завгүй агуулахууд болон хуваалцсан хурдны хязгаарт харагдана. Мөн polling хийгч ажиллаж буй газарт хадгалагдсан итгэмжлэл шаарддаг тул токеныг агуулах руу зөвхөн унших хандалтаар хязгаарлаж, бусад нууц шиг эргүүлээрэй. Үйл явдлын хэмжээ бага үед эсвэл нэвтрэх цэг хэзээ ч зөвшөөрөгдөхгүй үед үүнийг сонгож, бүтээлтүүд яагаад хоцордог талаар дараа нь хэн ч гайхахгүйн тулд ажлын тайлбарт бичээрэй.
Хуудас ачаалах биш, бодит хүргэлтийг хүлээн ав
Аль ч хувилбарыг сонгосон бай, хүлээн авах туршилт нь эх платформын илгээсэн үйл явдал бөгөөд эрх бүхий зөөврийн компьютерээс нээсэн хөтчийн таб биш. Scratch салбар руу хоосон commit push хийж, хүргэлтийн хариу код, релегийн лог эсвэл polling ажлын гаралтыг энэ дарааллаар уншина уу. Төгсгөлийн цэгээс 200 ирээд бүтээлт байхгүй бол триггерийн шүүлтүүр буруу; хугацаа дуусвал зам хаалттай хэвээр байна. Гурван загварын алийг ашиглаж байгааг тэмдэглээрэй, эс бөгөөс дараагийн алдаа засагч хөтчийн туршилтыг давтаж, мөн тэр мухарт хүрнэ.
Төлбөрийн callback болон бусад гадаад мэдэгдэлд мөн ижил логикийг хэрэглээрэй: хүн бүр аль хэдийн VPN сесстэй байсан ч тус бүрд нь хувийн програм руу өөрийн зам хэрэгтэй. Хүргэлтийн зам нь програмын дизайнд хамаарах бөгөөд сүлжээний доод тэмдэглэлд биш.