របៀបដែល set -e មានឥរិយាបទ និងកន្លែងដែលវាបំបែកស្គ្រីបរបស់អ្នក
ការប្រើ កំណត់ -e នៅក្នុង Bash ត្រូវបានគេសន្មត់ថាធ្វើឱ្យស្គ្រីបរបស់អ្នកមានសុវត្ថិភាពជាងមុនដោយការចាកចេញនៅពេលមានកំហុសណាមួយ។ ប៉ុន្តែនៅក្នុងលំហូរការងារពិតប្រាកដ set-e ជារឿយៗបំបែកស្គ្រីបតាមរបៀបដែលមិនច្បាស់លាស់។ អ្នកអភិវឌ្ឍន៍ពឹងផ្អែកលើ bash set -e សម្រាប់ការសរសេរស្គ្រីបការពារ ប៉ុន្តែបែរជាឃើញការងារ CI របស់ពួកគេចាកចេញដោយមិននឹកស្មានដល់ដោយគ្មានសារកំហុស។
នេះជាអ្វីដែល set-e bash ពិតជាធ្វើ៖
- ចេញពីស្គ្រីប ប្រសិនបើពាក្យបញ្ជាណាមួយត្រឡប់ស្ថានភាពមិនសូន្យ។
- ប៉ុន្តែមិនអើពើនឹងកំហុសក្នុង pipelines, លក្ខខណ្ឌ, សែលរង និងក្រុមពាក្យបញ្ជា លុះត្រាតែត្រូវបានផ្គូផ្គងជាមួយ សំណុំ -o បំពង់បង្ហូរទឹក ឬលំនាំផ្សេងទៀត។
ឧទាហរណ៍៖ ការបរាជ័យដោយស្ងៀមស្ងាត់
⚠️ព្រមាន: ស្គ្រីបនេះបរាជ័យដោយស្ងៀមស្ងាត់។
set -e
output=$(false) # fails, but script continues because it's in a subshell
next_step
កំហុសនៅក្នុង subshell ត្រូវបានមិនអើពើដោយ 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។
ស្គ្រីប Bash កាន់តែមានសុវត្ថិភាព៖ ការគ្រប់គ្រងសំណុំ -e ជាមួយ Traps និងការផ្ទៀងផ្ទាត់
ដើម្បីធ្វើឱ្យឈុតនេះមានសុវត្ថិភាព សូមគ្រប់គ្រងពេលវេលា និងរបៀបដែលវាធ្វើឱ្យស្គ្រីបរបស់អ្នកបរាជ័យ។
ប្រើមួយ អន្ទាក់ សម្រាប់ការតាមដានកំហុស
trap 'echo "Error on line $LINENO"' ERR
set -e
some_command
ផ្សំជាមួយ សំណុំ -o បំពង់បង្ហូរទឹក
set -euo pipefail
some_command | grep something
ជាមួយ បំពង់បរាជ័យ, សំណុំ -e bash នឹងចាប់កំហុសនៅផ្នែកណាមួយនៃ pipeline.
ផ្ទៀងផ្ទាត់យ៉ាងច្បាស់លាស់បន្ទាប់ពីបញ្ជាដែលមានហានិភ័យ
result=$(risky_call)
if [[ $? -ne 0 ]]; then
echo "Call failed"
exit 1
fi
ជៀសវាងការសន្មតថា set-e ចាប់បានរាល់ការបរាជ័យ។ ប្រើការត្រួតពិនិត្យដែលបានគ្រប់គ្រងសម្រាប់តក្កវិជ្ជាសំខាន់ៗ។
ការរួមបញ្ចូលលំនាំវាយប្រហារការពារនៅក្នុង CI/CD Pipelines
អ្នកមិនអាចជៀសវាង set-e ទាំងស្រុងបានទេ។ ប៉ុន្តែអ្នកអាចធ្វើឱ្យវាមានសុវត្ថិភាពជាងមុនដោយការបង្កប់ការអនុវត្ត Bash ល្អៗទៅក្នុង CI/CD លំហូរការងារ។
CI/CD គន្លឹះ:
- តែងតែផ្សំឈុតជាមួយ បំពង់បរាជ័យ និង អន្ទាក់ នៅក្នុងស្គ្រីបបញ្ចូល។
- ពិនិត្យមើលលទ្ធផលនៃ vars បរិស្ថាន និងស្គ្រីបឱ្យបានច្បាស់លាស់។
- ការប្រើ អាវ ឬចាប់យកកំណត់ហេតុ ដើម្បីមើលថាមានអ្វីកើតឡើងមុនពេលចេញ។
- ញែកជំហាននីមួយៗ ហើយផ្ទៀងផ្ទាត់ជំហាននីមួយៗ។
CI មានសុវត្ថិភាពជាង pipeline ចម្រៀក
- name: Setup
run: |
set -euo pipefail
trap 'echo "Failure on line $LINENO"' ERR
./setup.sh
នេះ ការពារការសាងសង់របស់អ្នក ពីការបរាជ័យដែលលាក់កំបាំង ដែលវាអាចនឹងមិនអើពើ។
តាមដានការបរាជ័យ Bash ដែលលាក់ជាមួយ Xygeni
សូម្បីតែមានអន្ទាក់ក៏ដោយ ការបរាជ័យមួយចំនួនត្រូវបានកប់យ៉ាងជ្រៅនៅក្នុងស្គ្រីប ឬការពឹងផ្អែក។ នោះហើយជាកន្លែងដែល ស៊ីហ្គេនី ជួយ។ Xygeni បង្កើនភាពមើលឃើញដោយ៖
- ការរកឃើញកន្លែងដែល set -e bash ទប់ស្កាត់ការបរាជ័យ
- តាមដានការប្រតិបត្តិពាក្យបញ្ជានៅទូទាំងការងារសាងសង់
- ការភ្ជាប់លទ្ធផលស្គ្រីប កំហុស និងលំហូរត្រួតពិនិត្យ
- ការរកឃើញការបរាជ័យដែលខកខានដោយសារតែការដាក់ជាក្រុមពាក្យបញ្ជា ឬកន្សោមឡូជីខល
នេះអនុញ្ញាតឱ្យក្រុមតាមដាន និងជួសជុលបញ្ហាតក្កវិជ្ជា bash set -e មុនពេលពួកគេបំបែកវាដោយស្ងាត់ៗ pipeline.
តម្លៃលាក់កំបាំងនៃការពឹងផ្អែកលើការប្រគុំតន្ត្រី Set-e Bash
វាអាចមានប្រយោជន៍ ប៉ុន្តែវាមិនមានសុវត្ថិភាពតាមលំនាំដើមទេ។ ប្រសិនបើអ្នកពឹងផ្អែកលើវាសម្រាប់ការគ្រប់គ្រងកំហុស CI/CDអ្នកទំនងជាខកខានការបរាជ័យពិតប្រាកដ។
ត្រួតពិនិត្យការប្រើប្រាស់ bash របស់អ្នក៖
- ការប្រើ បំពង់បរាជ័យ, អន្ទាក់និងការត្រួតពិនិត្យច្បាស់លាស់
- តាមដានលទ្ធផលពាក្យបញ្ជា មិនមែនគ្រាន់តែលេខកូដចេញនោះទេ
- រារាំងរបស់អ្នក CI/CD ការងារពីភាពជោគជ័យនៅពេលដែលពួកគេគួរតែបរាជ័យ
ប្រើ Xygeni ដើម្បីរកឃើញកំហុសតក្កវិជ្ជាដែលលាក់ដែលបណ្តាលមកពី bash set -e និងធ្វើឱ្យការសរសេរស្គ្រីបរបស់អ្នកមានភាពធន់ អាចតាមដានបាន និងមានសុវត្ថិភាព។ ស្គ្រីបមិនកុហកទេ ប៉ុន្តែវាពិតជាបរាជ័យដោយស្ងៀមស្ងាត់។ កុំឲ្យបញ្ហាក្លាយជាមូលហេតុ។







