bash set -e - set -e bash

set -e በ Bash ውስጥ፡- ለምን ስክሪፕትዎ ያለማስጠንቀቂያ አይሳካም

እንዴት set -e እንደሚሰራ እና ስክሪፕቶችዎን የት እንደሚያፈርስ

በመጠቀም ላይ ስብስብ -ኢ በባሽ ውስጥ ስክሪፕትዎን በማንኛውም ስህተት ላይ በመውጣት ደህንነቱ የተጠበቀ ያደርገዋል ተብሎ ይታሰባል። ነገር ግን በእውነተኛ የስራ ፍሰቶች፣ set-e ብዙውን ጊዜ ስክሪፕትን በስውር እና ጸጥ ባለ መንገድ ይሰብራል። ገንቢዎች ለመከላከያ ስክሪፕት በ bash set -e ላይ ይተማመናሉ፣ ነገር ግን የCI ስራዎቻቸው ያለምንም የስህተት መልእክት በድንገት ይወጣሉ።

set-e bash በእርግጥ የሚያደርገው ይኸውና፡

  • ማንኛውም ትዕዛዝ ዜሮ ያልሆነ ሁኔታን የሚመልስ ከሆነ ከስክሪፕቱ ይወጣል።
  • ግን ስህተቶችን ችላ ይላል pipelines፣ conditionals፣ subshells እና Command groups፣ ከ የ set-o pipefail ወይም ሌሎች ቅጦች።

ምሳሌ፡ የዝምታ ውድቀት

⚠️ማስጠንቀቂያ: ይህ ስክሪፕት በጸጥታ አይሳካም።

				
					set -e
output=$(false) # fails, but script continues because it's in a subshell
next_step
				
			

በንዑስ ሼል ውስጥ ያለው ስህተት በ bash ችላ ይባላል፣ እና ቀጣይ_ደረጃ ለማንኛውም፣ ምናልባትም በመጥፎ ግብዓት ላይ ሊሆን ይችላል።

እነዚህ ብልሃቶች መቼ እንደሚተገበር እና መቼ በጸጥታ ውድቀቶችን እንደሚያልፍ ሙሉ በሙሉ ካልተረዱ set-e አደገኛ ያደርጉታል።

እውነተኛ CI/CD Pipeline በ set-e Bash የተከሰቱ ውድቀቶች

set-e bash ብዙውን ጊዜ በውስጡ ከፍተኛውን ህመም ያስከትላል CI/CD pipelines.

 በገሃዱ ዓለም pipeline ውድቀት፡

				
					#!/bin/bash
set -e
npm install # works locally
npm run test || echo "Tests failed" # CI sees success even though tests failed

				
			

⚠️ማስጠንቀቂያ: ይህ ደግሞ ያስከትላል pipeline ያልተሳኩ ሙከራዎች ቢኖሩም ማለፍ። ትዕዛዙ የሎጂካዊ አገላለጽ አካል ስለሆነ፣ set-e አይቀሰቀስም።

ሌላ የተበላሸ ንድፍ፦

				
					#!/bin/bash
set -e
mkdir output
cd output || true # suppresses error if dir is missing, breaking future steps silently

				
			

⚠️ይህ ንድፍ የወደፊት ስህተቶችን ትክክለኛ መንስኤ ይደብቃል፣ ይህም ማረምን የበለጠ ከባድ ያደርገዋል።

ደህንነቱ ያልተጠበቀ የ bash አጠቃቀም ወሳኝ እርምጃዎች በጸጥታ እንዲወድቁ ያደርጋል። የ DevOps ፀረ-ንድፍ ነው።

ደህንነቱ የተጠበቀ የባሽ ስክሪፕት፡- ከትራፕስ እና ማረጋገጫ ጋር የመቆጣጠሪያ ስብስብ -e

ስብስቡን ደህንነቱ የተጠበቀ ለማድረግ፣ ስክሪፕትዎ መቼ እና እንዴት እንደማይሳካ ይቆጣጠሩ።

 A ወጥመድ ለስህተት ዱካ ክትትል

				
					trap 'echo "Error on line $LINENO"' ERR
set -e
some_command

				
			

ያጣምሩ የ set-o pipefail

				
					set -euo pipefail
some_command | grep something

				
			

ጋር የቧንቧ ውድቀት, set-e bash በማንኛውም ክፍል ውስጥ ውድቀቶችን ይይዛል pipeline.

 አደገኛ ትዕዛዞችን ከፈጸሙ በኋላ በግልጽ ያረጋግጡ

				
					result=$(risky_call)
if [[ $? -ne 0 ]]; then
echo "Call failed"
exit 1
fi

				
			

set-e እያንዳንዱን ውድቀት እንደሚይዝ ከማሰብ ይቆጠቡ፤ ወሳኝ አመክንዮ ለማግኘት ቁጥጥር የሚደረግባቸውን ፍተሻዎች ይጠቀሙ።

የመከላከያ ባሽ ቅጦችን በ ውስጥ ማዋሃድ CI/CD Pipelines

ሙሉ በሙሉ ከሴፕ-ኢ መሸሽ አይችሉም። ነገር ግን ጥሩ የBash ልምዶችን በመተግበር ደህንነቱ የተጠበቀ ማድረግ ይችላሉ። CI/CD የስራ ፍሰቶች.

CI/CD ጠቃሚ ምክሮች:

  • ሁልጊዜ ስብስብ-ኢን ከ ጋር ያጣምሩ የቧንቧ ውድቀት ና ወጥመድ በመግቢያ ስክሪፕቶች ውስጥ።
  • የአካባቢ ቫርሶችን እና የስክሪፕት ውጤቶችን በግልጽ ያረጋግጡ።
  • ጥቅም ቲ ወይም ከመውጣቱ በፊት ምን እንደተከሰተ ለማየት የምዝግብ ማስታወሻ መያዝ።
  • ደረጃዎቹን ለይተው እያንዳንዱን ያረጋግጡ።

 ደህንነቱ የተጠበቀ ሲአይ pipeline ክፍል

				
					- name: Setup
run: |
set -euo pipefail
trap 'echo "Failure on line $LINENO"' ERR
./setup.sh

				
			

ይህ ግንባታዎችዎን ይጠብቃል ችላ ሊላቸው ከሚችሉ የተደበቁ ውድቀቶች።

የትራክ ሂንዲንግ ባሽ ብልሽቶች በXygeni

ወጥመዶች ቢኖሩም፣ አንዳንድ ውድቀቶች በስክሪፕቶች ወይም ጥገኞች ውስጥ በጥልቀት ተቀብረዋል። እዚህ ላይ ነው ዚጌኒ እገዛ. Xygeni ታይነትን የሚያሻሽለው በ፡

  • የset-e bash ውድቀቶችን የሚያግድበትን ቦታ መለየት
  • በግንባታ ስራዎች ላይ የትዕዛዝ አፈፃፀምን መከታተል
  • የስክሪፕት ውጤቶችን፣ ስህተቶችን እና የቁጥጥር ፍሰትን ማዛመድ
  • በትዕዛዝ ቡድን ወይም በሎጂካዊ አገላለጾች ምክንያት የገጽታ ስህተቶች ጠፍተዋል

ይህ ቡድኖች የ bash set-e ሎጂክ ችግሮችን በጸጥታ ከመፍረሳቸው በፊት እንዲከታተሉ እና እንዲያስተካክሉ ያስችላቸዋል pipeline.

በ set-e bash ላይ የመተማመን ድብቅ ወጪ

ጠቃሚ ሊሆን ይችላል፣ ግን በነባሪነት ደህንነቱ የተጠበቀ አይደለም። ለስህተት አያያዝ በእሱ ላይ እየተተማመኑ ከሆነ CI/CD፣ እውነተኛ ውድቀቶችን እያመለጠህ ሊሆን ይችላል።

የset-e bash አጠቃቀምዎን ይፈትሹ፡

  • ጥቅም የቧንቧ ውድቀት, ወጥመድእና ግልጽ የሆኑ ምርመራዎች
  • የመውጫ ኮዶችን ብቻ ሳይሆን የትዕዛዝ ውጤቶችን ይከታተሉ
  • የእርስዎን ይከላከሉ CI/CD ስራዎች ውድቀት ሲኖርባቸው ስኬታማ ከመሆን

በ bash set -e ምክንያት የተደበቁ የሎጂክ ስህተቶችን ለመለየት Xygeniን ይጠቀሙ፣ እና የስክሪፕትዎን ዘላቂ፣ ሊከታተል የሚችል እና ደህንነቱ የተጠበቀ ያድርጉት። ስክሪፕቶች አይዋሹም፣ ነገር ግን በጸጥታ ይወድቃሉ። set-e ምክንያቱ እንዲሆን አትፍቀዱ።

sca-tools-software-composition-analyse-tools
የሶፍትዌር አደጋዎችዎን ቅድሚያ ይስጡ፣ ያስተካክሉ እና ይጠብቁ
ነፃ መለያ ያግኙ።
ምንም ዱቤ ካርድ አያስፈልግም።

የሶፍትዌርዎን ልማት እና አቅርቦት ደህንነት ይጠብቁ

ከ Xygeni Product Suite ጋር