Kaip veikia „set -e“ ir kur jis pažeidžia jūsų scenarijus
Naudojant rinkinys -e „Bash“ kalboje „set-e“ turėtų padaryti jūsų scenarijų saugesnį, uždarant jį įvykus bet kokiai klaidai. Tačiau realiose darbo eigose „set-e“ dažnai subtiliai ir tyliai nutraukia scenarijus. Kūrėjai pasikliauja „bash set -e“ gynybiniams scenarijams, tik tam, kad jų CI užduotys netikėtai uždaromos be klaidos pranešimo.
Štai ką iš tikrųjų daro „set-e bash“:
- Išeina iš scenarijaus, jei kuri nors komanda grąžina ne nulinę būseną.
- Bet ignoruoja klaidas, pipelines, sąlyginiai sakiniai, subshell'ai ir komandų grupės, nebent jie būtų suporuoti su set -o pipefail ar kitus raštus.
Pavyzdys: Tyli nesėkmė
⚠️Įspėjimas: Šis scenarijus tyliai neveikia.
„bash“ ignoruoja klaidą subshell'e ir kitas_žingsnis vis tiek vykdomas, galbūt dėl blogos įvesties.
Dėl šių keistenybių „set-e“ yra pavojinga, jei iki galo nesuprantate, kada ji taikoma, o kada tyliai praleidžia klaidas.
nekilnojamasis CI/CD Pipeline Gedimai, kuriuos sukelia „set -e Bash“
„set -e bash“ dažnai sukelia daugiausia skausmo viduje CI/CD pipelines.
Realus pasaulis pipeline nesėkmė:
⚠️Įspėjimas: Tai sukelia pipeline kad testas būtų sėkmingas nepaisant nepavykusių bandymų. Komanda yra loginės išraiškos dalis, todėl „set-e“ nesuveikia.
Dar vienas sugedęs modelis:
⚠️Šis modelis užmaskuoja tikrąją būsimų klaidų priežastį, todėl derinimą apsunkina.
Nesaugus „bash“ naudojimas leidžia svarbiems veiksmams tyliai nepavykti. Tai „DevOps“ anti-modelis.
Saugesnis „Bash“ scenarijų rašymas: „set -e“ valdymas naudojant spąstus ir patvirtinimą
Kad rinkinys būtų saugesnis, kontroliuokite, kada ir kaip jis nepavyksta įgyvendinti jūsų scenarijaus.
Naudoti spąstai klaidų sekimui
Sujungti su set -o pipefail
Su vamzdžių gedimas, set -e bash pastebės gedimus bet kurioje a dalyje pipeline.
Aiškiai patvirtinti po rizikingų komandų
Venkite manyti, kad „set-e“ užfiksuoja kiekvieną gedimą; kritinei logikai naudokite kontroliuojamus patikrinimus.
Gynybinių smūgių modelių integravimas į CI/CD Pipelines
Visiškai išvengti „set-e“ nepavyks. Tačiau galite jį padaryti saugesnį, įdiegdami gerąją „Bash“ praktiką. CI/CD darbo eigos.
CI/CD Patarimas:
- Visada derinkite rinkinį su vamzdžių gedimas bei spąstai įvedimo scenarijuose.
- Aiškiai patikrinkite aplinkos kintamuosius ir scenarijaus rezultatus.
- Paskirtis tee arba užfiksuokite žurnalą, kad pamatytumėte, kas nutiko prieš išėjimą.
- Izoliuokite veiksmus ir patvirtinkite kiekvieną iš jų.
Saugesnis CI pipeline segmentas
tai apsaugo jūsų konstrukcijas nuo paslėptų trūkumų, kuriuos kitaip būtų galima ignoruoti.
Paslėptų „Bash“ gedimų sekimas naudojant „Xygeni“
Net ir esant spąstams, kai kurios klaidos slypi giliai scenarijuose ar priklausomybėse. Štai kur... Ksigeni padeda. „Xygeni“ pagerina matomumą:
- Aptikus, kur „set -e bash“ slopina klaidas
- Komandų vykdymo sekimas kūrimo užduotyse
- Scenarijaus išvesčių, klaidų ir valdymo srauto koreliacija
- Dėl komandų grupavimo arba loginių išraiškų nepastebėtos paviršiaus klaidos
Tai leidžia komandoms sekti ir ištaisyti bash set -e logikos problemas prieš joms tyliai nutraukiant jūsų pipeline.
Paslėptos išlaidos, susijusios su pasikliovimu „set -e bash“
Tai gali būti naudinga, bet pagal numatytuosius nustatymus nėra saugu. Jei tuo remiatės klaidų tvarkymui CI/CD, greičiausiai nepastebite tikrų nesėkmių.
Patikrinkite savo „set -e bash“ naudojimą:
- Paskirtis vamzdžių gedimas, spąstaiir tiesioginiai patikrinimai
- Stebėkite komandų rezultatus, o ne tik išėjimo kodus
- Neleisk savo CI/CD darbai neleistų jiems sėkmingai veikti, kai jie turėtų žlugti
Naudokite „Xygeni“, kad aptiktumėte paslėptas logikos klaidas, kurias sukelia „bash set -e“, ir padarykite savo scenarijus atsparius, atsekamus ir saugius. Scenarijai nemeluoja, bet jie tyliai žlunga. Neleiskite, kad dėl to kaltas būtų „set-e“.





