🎧 Listen to this article: हिंदी · English · தமிழ் · తెలుగు · ಕನ್ನಡ · മലയാളം · 日本語 · 中文
🌍 Read this in your language: हिंदी · தமிழ் · తెలుగు · ಕನ್ನಡ · മലയാളം · ଓଡ଼ିଆ · 日本語 · 中文
ନିକଟରେ, ମୁଁ ଏପରି ଏକ ପରିସ୍ଥିତିର ସମ୍ମୁଖୀନ ହୋଇଥିଲି ଯେଉଁଠାରେ ମୋର release pipeline ମୋର release କୁ ship କରିବାକୁ ମନା କରିଦେଇଥିଲା। ଏହି ଘଟଣା କେବଳ ମୋର project କୁ ବଞ୍ଚାଇ ନଥିଲା ବରଂ ଏକ ଦୃଢ଼ release process ରହିବାର ଗୁରୁତ୍ୱ ଉପରେ ମଧ୍ୟ ଆଲୋକପାତ କରିଥିଲା।
ଘଟଣାଟି
ମୁଁ ମୋର project, agentwatch ପାଇଁ ଏକ release ଆରମ୍ଭ କରିଥିଲି, ଯାହା agentsec-ecosystem ରେ ଥିବା agent-security ଟୁଲର ଏକ ଅଂଶ। release workflow ଆରମ୍ଭ ହୋଇଥିଲା, ଏବଂ ଅନେକ ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ କାର୍ଯ୍ୟ ସମ୍ପାଦନ କରିଥିଲା:
- Wheel ନିର୍ମାଣ କରିବା: ଏହା ଏକ package ତିଆରି କରିବାର ପ୍ରକ୍ରିୟା ଯାହା ସହଜରେ install କରାଯାଇପାରିବ।
- Software Bill of Materials (SBOM) ପ୍ରସ୍ତୁତ କରିବା: ଏହି ଦସ୍ତାବିଜଟି software ରେ ଥିବା ସମସ୍ତ components କୁ ତାଲିକାଭୁକ୍ତ କରେ, ଯାହା security ଏବଂ compliance ପାଇଁ ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ।
- Checksums ଲେଖିବା: ଫାଇଲଗୁଡ଼ିକରେ କୌଣସି ପରିବର୍ତ୍ତନ କରାଯାଇ ନାହିଁ ବୋଲି ନିଶ୍ଚିତ କରିବା ପାଇଁ ଏଗୁଡ଼ିକ ହେଉଛି ଫାଇଲଗୁଡ଼ିକର ଅନନ୍ୟ identifiers।
- Keyless Sigstore ସହିତ ସବୁକିଛି sign କରିବା: ଏହା release ର ପ୍ରାମାଣିକତା ଯାଞ୍ଚ କରି security ର ଏକ ସ୍ତର ଯୋଡ଼ିଥାଏ।
ତଥାପି, workflow ଏହାର ଶେଷ ପଦକ୍ଷେପରେ ବିଫଳ ହୋଇଥିଲା: publish କରିବା ପୂର୍ବରୁ release ଯାଞ୍ଚ କରିବା। ମୁଁ ପାଇଥିବା error message ଥିଲା:
ModuleNotFoundError: No module named 'cryptography'
ଏହି ବିଫଳତାର ଅର୍ଥ ଥିଲା ଯେ ମୋର GitHub release ଅନୁପସ୍ଥିତ ଥିଲା, ଯାହା ନିରାଶାଜନକ ଥିଲା କିନ୍ତୁ ଶେଷରେ ଏକ ଭଲ କଥା ଥିଲା। ଏହା ଦର୍ଶାଇଲା ଯେ system ଡିଜାଇନ୍ ଅନୁଯାୟୀ କାର୍ଯ୍ୟ କରୁଥିଲା।
ଏହା କାହିଁକି ଘଟିଲା?
Pipeline ର ଏକ ପଦକ୍ଷେପ ସମୟରେ ଏହି ବିଫଳତା ଘଟିଥିଲା ଯେଉଁଠାରେ release package କୁ install ଏବଂ verify କରାଯିବାର ଥିଲା। ଯେଉଁ ନିର୍ଦ୍ଦିଷ୍ଟ command ବିଫଳ ହୋଇଥିଲା ତାହା ଥିଲା agentwatch verify-release, ଯାହା ଏକ clean environment ରୁ built artifacts ଯାଞ୍ଚ କରେ। ଏହି workflow ର ଡିଜାଇନ୍ ଅତ୍ୟନ୍ତ ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ ଥିଲା କାରଣ ଏହା ସଫଳତାର ସହିତ verify ନହେବା ପର୍ଯ୍ୟନ୍ତ ଏକ artifact କୁ publish କରିବାକୁ ମନା କରିଦେଇଥିଲା।
ଏହି କ୍ଷେତ୍ରରେ, ତ୍ରୁଟିଟି 'cryptography' ନାମକ ଏକ ଅନୁପସ୍ଥିତ module ରୁ ଉତ୍ପନ୍ନ ହୋଇଥିଲା। ଏହି module ଟି release environment ରେ install ହୋଇନଥିଲା କାରଣ ଏହାକୁ ଏକ optional extra ଭାବରେ ବିବେଚନା କରାଯାଇଥିଲା। ସମସ୍ୟାଟି ଉପୁଜିଲା କାରଣ code ଟି import କରିବାକୁ ଚେଷ୍ଟା କରୁଥିଲା InvalidSignature top level ରେ 'cryptography' module ରୁ, ଯାହାର ଅର୍ଥ ଥିଲା ଯେ ଏହା ଆବଶ୍ୟକ ନଥିବା ସମୟରେ ମଧ୍ୟ load ହୋଇଥିଲା।
ଯେଉଁ ଡିଜାଇନ୍ Release କୁ ବଞ୍ଚାଇଲା
ମୋର release workflow ର ଡିଜାଇନ୍ରେ ଏକ ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ precondition ଅନ୍ତର୍ଭୁକ୍ତ ଥିଲା: ଯଦି agentwatch verify-release command ଚାଲିପାରିବ ନାହିଁ, ତେବେ କିଛି ବି ship ହୋଇପାରିବ ନାହିଁ। ଏହି ନିଷ୍ପତ୍ତି ଏକ ସମସ୍ୟାପୂର୍ଣ୍ଣ release କୁ ଏକ ବିଫଳ run ରେ ପରିଣତ କଲା, ଯାହା ବ୍ୟବହାରକାରୀଙ୍କ ପାଖରେ ପହଞ୍ଚିବା ପୂର୍ବରୁ ଏହି ସମସ୍ୟାର ସମାଧାନ କରିବାକୁ ମୋତେ ପ୍ରେରିତ କରିଥିଲା।
Error ର traceback ଦର୍ଶାଇଲା ଯେ import chain ଏଥିପାଇଁ ଦାୟୀ ଥିଲା। ବିଫଳତା ଘଟିଥିଲା କାରଣ CLI startup ସମୟରେ ସବୁକିଛି load କରିବାକୁ ଚେଷ୍ଟା କରୁଥିଲା, ଏପରି modules ଗୁଡ଼ିକୁ ମଧ୍ୟ ଯାହା ମୌଳିକ କାର୍ଯ୍ୟକାରିତା ପାଇଁ ଆବଶ୍ୟକ ନଥିଲା। ଏହା software development ରେ ଏକ ସାଧାରଣ ସମସ୍ୟା, ଯେଉଁଠାରେ dependencies ଅପ୍ରତ୍ୟାଶିତ ସମସ୍ୟା ସୃଷ୍ଟି କରିପାରେ।
ସମସ୍ୟାର ସମାଧାନ କରିବା
ଏହି ସମସ୍ୟାର ସମାଧାନ ସରଳ ଥିଲା। ମୁଁ import statement କୁ ଘୁଞ୍ଚାଇ ଦେଲି InvalidSignature ପ୍ରକୃତରେ ଏହା ଆବଶ୍ୟକ କରୁଥିବା function ଭିତରକୁ। ଏହି ଉପାୟରେ, import କେବଳ ସେତେବେଳେ ହୁଏ ଯେତେବେଳେ function କୁ call କରାଯାଏ, ଯାହା startup ସମୟରେ ଅନାବଶ୍ୟକ loading କୁ ଏଡ଼ାଇ ଦିଏ। ଏଠାରେ ପରିବର୍ତ୍ତନର ଏକ ସରଳୀକୃତ ସଂସ୍କରଣ ଦିଆଗଲା:
def _verify_signature(public: Any, alg: str, signing_input: bytes, signature: bytes) -> bool:
from cryptography.exceptions import InvalidSignature # lazy import
# rest of the function...
ଏହି ସମନ୍ୱୟ ନିଶ୍ଚିତ କଲା ଯେ signature verification ପାଇଁ ନିର୍ଦ୍ଦିଷ୍ଟ ଭାବରେ ଆବଶ୍ୟକ ନହେଲେ ବାକି code 'cryptography' module ବିନା ଚାଲିପାରିବ।
ଉପସଂହାର
ଏହି ଅଭିଜ୍ଞତା ମୋତେ ଏକ ସୁପରିକଳ୍ପିତ release pipeline ର ମୂଲ୍ୟ ଶିଖାଇଲା। ଏହା କେବଳ deployment ପ୍ରକ୍ରିୟାକୁ automate କରେ ନାହିଁ ବରଂ ଏକ safety net ଭାବରେ ମଧ୍ୟ କାର୍ଯ୍ୟ କରେ, ଯାହା ପାରମ୍ପରିକ testing ପଦ୍ଧତିଗୁଡ଼ିକରୁ ଖସିଯାଇ ପାରୁଥିବା ସମସ୍ୟାଗୁଡ଼ିକୁ ଧରିଥାଏ।
ଲାଭ
- ତ୍ରୁଟିପୂର୍ଣ୍ଣ releases କୁ ରୋକିଥାଏ: ବ୍ୟବହାରକାରୀଙ୍କ ପାଖରେ ପହଞ୍ଚିବା ପୂର୍ବରୁ ସମସ୍ୟାଗୁଡ଼ିକୁ ଧରିଥାଏ।
- Code quality ରେ ଉନ୍ନତି ଆଣେ: Checks ଲାଗୁ କରି ଉନ୍ନତ coding ଅଭ୍ୟାସକୁ ଉତ୍ସାହିତ କରେ।
- ବିଶ୍ୱସନୀୟତା ବୃଦ୍ଧି କରେ: Release process ରେ ବିଶ୍ୱାସ ଗଠନ କରେ।
ଅସୁବିଧା
- ପ୍ରାରମ୍ଭିକ setup ର ଜଟିଳତା: ଏକ ଦୃଢ଼ pipeline ଡିଜାଇନ୍ କରିବା ସମୟ ସାପେକ୍ଷ ହୋଇପାରେ।
- False positives ର ସମ୍ଭାବନା: ବେଳେବେଳେ, କଠୋର ଯାଞ୍ଚ ଯୋଗୁଁ ବୈଧ releases ଅବରୋଧ ହୋଇପାରେ।
ସତର୍କତା
ଏହି ପ୍ରବନ୍ଧଟି ଶିକ୍ଷଣୀୟ ଉଦ୍ଦେଶ୍ୟ ପାଇଁ ଉଦ୍ଦିଷ୍ଟ। ବାସ୍ତବ ପରିସ୍ଥିତିରେ ଯେକୌଣସି placeholder values କୁ ପ୍ରକୃତ values ସହିତ ବଦଳାଇବା ଆବଶ୍ୟକ। ସେଗୁଡ଼ିକ ଉପରେ ନିର୍ଭର କରିବା ପୂର୍ବରୁ ସର୍ବଦା ମୂଳ ଉତ୍ସରୁ ଦାବିଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରନ୍ତୁ।
ବାରମ୍ବାର ପଚରାଯାଉଥିବା ପ୍ରଶ୍ନଗୁଡ଼ିକ
- Release pipeline କ’ଣ? — ଏକ release pipeline ହେଉଛି ସ୍ୱୟଂଚାଳିତ ପଦକ୍ଷେପଗୁଡ଼ିକର ଏକ ଶୃଙ୍ଖଳା ଯାହା software ପ୍ରସ୍ତୁତ ଏବଂ deploy କରେ।
- Release pipeline କାହିଁକି ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ? — ଏହା ବ୍ୟବହାରକାରୀଙ୍କ ପାଇଁ software release ହେବା ପୂର୍ବରୁ bugs ଏବଂ errors ଧରିବାରେ ସାହାଯ୍ୟ କରେ, ଯାହା ଗୁଣବତ୍ତାକୁ ଉନ୍ନତ କରେ।
- ModuleNotFoundError ର ଅର୍ଥ କ’ଣ? — ଏହା ସୂଚିତ କରେ ଯେ ଏକ ଆବଶ୍ୟକୀୟ module ବର୍ତ୍ତମାନର environment ରେ ଉପଲବ୍ଧ ନାହିଁ।
- ମୁଁ କିପରି ModuleNotFoundError ର ସମାଧାନ କରିପାରିବି? — ଆପଣଙ୍କ environment ରେ ଅନୁପସ୍ଥିତ module install ହୋଇଛି ବୋଲି ନିଶ୍ଚିତ କରନ୍ତୁ।
- Software Bill of Materials (SBOM) କ’ଣ? — ଏକ SBOM ହେଉଛି ଏକ software package ରେ ଥିବା ସମସ୍ତ components ର ଏକ ତାଲିକା, ଯାହା security ଏବଂ compliance ପାଇଁ ଉପଯୋଗୀ।
- Keyless Sigstore କ’ଣ? — ମାନୁଆଲ୍ ଭାବରେ keys ପରିଚାଳନା ନକରି software releases sign କରିବାର ଏକ ପଦ୍ଧତି।
ଟ୍ୟାଗ୍ଗୁଡ଼ିକ
#release #pipeline #software #development #automation #quality #security #testing
API Security Testing Checklist
A practical workflow for testing authentication, authorization, input handling, business logic, and evidence without losing track of scope.
Free. No spam — unsubscribe in one click.


Responses
Sign in to leave a response.