Varat atvērt Jenkins caur VPN un tomēr redzēt, ka GitHub ziņo par neizdevušos webhook, jo tie ir divi dažādi savienojumi ar diviem dažādiem īpašniekiem. Pārlūks brauc pa tuneli, par kuru vienojās jūsu klēpjdators; GitHub piegādes pakalpojums sākas publiskajā internetā un tam nav ceļa privātajā tīklā. Piekļuve krātuvē to nemaina, lai gan pats Jenkins var bez problēmām iegūt no tās pašas krātuves. Izvēlieties ieeju, releju vai aptauju, pēc tam pārbaudiet ceļu, pa kuru notikums patiešām iet.

Pārlūka sesija pierāda tikai vienu virzienu

VPN savienojums atbild uz vienu jautājumu: vai šis klēpjdators var sasniegt iekšējo resursdatoru. Webhook piegāde jautā ko citu: vai ārējs pakalpojums var atvērt savienojumu uz šo resursdatoru. Tas, ka Jenkins iegūst no krātuves, ir izejošā plūsma un neko nepasaka par ienākošo sasniedzamību. Turiet abus virzienus atsevišķās diagrammas līnijās, tostarp to, kura puse katru sāk.

Pirms kaut ko maināt, izlasiet piegādes ierakstu. Noildze, savienojuma atiestatīšana un pieņemts pieprasījums, kas neatbilda nevienam darbam, ir trīs dažādi īpašnieki: tīkls, starpniekservers un trigera konfigurācija.

A variants: atveriet šauru galapunktu

Ja organizācija jau publicē apstiprinātu ieeju, atveriet webhook ceļu, nevis vadības paneli. Parasti tas nozīmē apgrieztā starpniekservera noteikumu, kas pieņem POST uz āķa URL un pārsūta tos uz Jenkins, bet administrēšanas saskarne paliek nepieejama no ārpuses.

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

Veiciet šo testu no tīkla bez VPN piekļuves, jo panākums no tuneļa iekšpuses neko nepierāda. Galapunktam vajadzētu noraidīt pieprasījumus bez kopīgā noslēpuma, ko GitHub sūta kā paraksta galveni, un pieņemt tikai to vienu ceļu un metodi, ko publicējāt. Publiska Jenkins konsole nav webhook risinājums; tas ir incidents, kas gaida nākamo skeneri. Ierobežojiet noteikumu pietiekami šauri, lai pārējā lietotne saglabātu iepriekšējās piekļuves kontroles.

B variants: apgrieziet virzienu ar releju

Kur ienākošā atvēršana netiks apstiprināta, mazs klients tīkla iekšienē var uzturēt izejošu savienojumu ar releju un saņemt pārsūtītos notikumus. Relejs tad kļūst par piegādes ceļa daļu, tāpēc tā pieejamība un autentifikācija ir tikpat svarīga kā būvēšanas darbs.

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

Jenkins norādes par webhook aiz ugunsmūriem apraksta šo formu, un tās ir vērts izlasīt pirms sava pārsūtītāja rakstīšanas. Pārtrauciet TLS uz releja, pārbaudiet parakstu pirms notikums sasniedz darbu un uzraugiet izejošo saiti, jo kritušais tunelis izskatās tieši tāpat kā notikums, kas nekad netika nosūtīts. Apstipriniet arī, ka relejs saglabā pieprasījuma pamattekstu baitu pa baitam, jo paraksta pārbaudes neizdodas JSON, kas pa ceļam tika parsēts un pārkodēts.

C variants: tā vietā aptaujiet krātuvi

Aptauja maina latentumu pret vienkāršību un vispār neprasa ienākošu ceļu. Jenkins var aptaujāt pēc grafika, vai mazs darbs var vaicāt API un sākt būvēšanu, kad ierauga nepazīstamu revīziju.

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

Katra aptauja tērē API izsaukumus un pievieno kavējumu starp push un būvēšanu, kas kļūst pamanāms noslogotās krātuvēs un kopīgos ātruma ierobežojumos. Tai arī vajadzīgi akreditācijas dati, kas glabājas tur, kur darbojas aptaujātājs, tāpēc ierobežojiet pilnvaru tikai lasīšanas piekļuvei krātuvē un mainiet to kā jebkuru citu noslēpumu. Izvēlieties to, kad notikumu apjoms ir zems vai kad ieeja nekad netiks apstiprināta, un ierakstiet to darba aprakstā, lai vēlāk neviens nebrīnītos, kāpēc būvēšanas atpaliek.

Pieņemiet īstu piegādi, nevis lapas ielādi

Lai kuru variantu jūs izvēlētos, pieņemšanas tests ir notikums, ko sūta avota platforma, nevis pārlūka cilne, kas atvērta no priviliģēta klēpjdatora. Nosūtiet tukšu commit uz melnraksta zaru un izlasiet piegādes atbildes kodu, releja žurnālu vai aptaujas darba izvadi, tieši šādā secībā. 200 no galapunkta bez būvēšanas nozīmē, ka trigera filtrs ir nepareizs; noildze nozīmē, ka ceļš joprojām ir slēgts. Pierakstiet, kurš no trim risinājumiem tiek izmantots, citādi nākamais atkļūdotājs atkārtos pārlūka testu un nonāks tajā pašā strupceļā.

Piemērojiet to pašu loģiku maksājumu atzvanīšanai un citiem ārējiem paziņojumiem: katram vajadzīgs savs ceļš uz privāto lietotni, pat ja ikvienam cilvēkam jau ir VPN sesija. Piegādes ceļš pieder lietotnes dizainam, nevis zemsvītras piezīmei par tīkliem.

Saistītie raksti