एनवायरनमेंट वेरिएबल्स और Secrets

Environment variables नाम वाली values हैं, जैसे BASE_URL=https://staging.shop.example, जो CI runner अपने शुरू किए हर process को देता है। इन्हीं से एक ही test suite जानती है कि कहाँ चलना है, किस account से और किन settings के साथ, और laptop, staging और production के बीच test code की एक भी line नहीं बदलती। Secrets इन values का वह हिस्सा हैं जो access देता है — passwords, API keys, tokens — और उनका रास्ता सुरक्षित होता है: encrypted store, logs में masking, और सिर्फ़ ज़रूरी jobs तक पहुँच।

उदाहरण: वही Playwright suite staging पर staging के test account से चलती है, और deployment के बाद उसका smoke subset production पर एक read-only monitoring account से चलता है। दोनों runs में सिर्फ़ variables और secrets अलग हैं।

यह क्यों ज़रूरी है

Configuration की गलतियाँ pipeline के कुछ सबसे भ्रामक results देती हैं। जो missing variable किसी default पर गिर जाए, वह pull request के tests को production पर भेज सकता है; गलत base URL से green run उस build के बारे में कुछ साबित नहीं करता जिसे टेस्ट होना था; rotate हुआ password रातों-रात पूरी suite को red कर देता है, और कोई बीस product defects दर्ज कर देता है जो असल में एक ही configuration change है।

Secrets security की कीमत भी जोड़ते हैं। Repository में commit हुआ, debug line में print हुआ या upload हुए trace में पकड़ा गया token हर वह व्यक्ति copy कर सकता है जो repository पढ़ सकता है या run खोल सकता है, और shared environments के test accounts अक्सर असली systems तक पहुँचते हैं: payment sandboxes, e-mail providers, cloud accounts। इसी वजह से OWASP Secrets Management Cheat Sheet में CI/CD pipelines का अपना अलग section है। Testers ये jobs लिखते और चलाते हैं, इसलिए वे भी बचाव का हिस्सा हैं।

Recap: configuration test code के बाहर रहती है

CI/CD testing guide ने बुनियादी नियम तय किए थे: pipeline tests जहाँ संभव हो ephemeral environments में चलते हैं, और जहाँ realism ज़रूरी हो वहाँ staging जैसे shared environments में; test data pipeline ख़ुद बनाती है; और secrets CI platform के secret store या किसी external vault में रहते हैं, सिर्फ़ ज़रूरी environments तक सीमित, logs में masked और rotate होते हुए — कभी repository में नहीं, कभी print नहीं, कभी artifacts में नहीं। Forks से आए pull requests से शुरू हुए workflows को default रूप से repository secrets नहीं मिलते। यह lesson एक कदम और गहराई में जाता है: कोई value platform से चलते हुए test तक कैसे पहुँचती है, और यह रास्ता सही और सुरक्षित कैसे रहे।

Runs या targets के बीच जो कुछ बदलता है वह configuration है: टेस्ट होने वाला address, test account, timeouts, browser, कौन-से tests चलें। यह test code के बाहर रहती है। The Twelve-Factor App methodology इसे config और code का सख़्त अलगाव कहती है और एक आसान कसौटी देती है: क्या repository को अभी public किया जा सकता है, बिना एक भी credential उजागर किए? अगर नहीं, तो secret store में रहने वाली कोई चीज़ code में पड़ी है।

  • Configuration variables: non-sensitive settings, जैसे BASE_URL, TEST_ENV या BROWSER। इन्हें पढ़ा, review और print किया जा सकता है।
  • Secrets: access देने वाली values, जैसे test account का password, API key या database password। ये encrypted रूप में store होते हैं, logs में masked होते हैं और सिर्फ़ उन्हीं jobs को मिलते हैं जिन्हें इनकी ज़रूरत है।
  • Platform variables: वे values जो CI platform हर run पर ख़ुद set करता है, जैसे CI=true, commit (GitHub Actions में GITHUB_SHA, GitLab में CI_COMMIT_SHA) और run id (GITHUB_RUN_ID, CI_PIPELINE_ID)। इन्हें reports पर लिखें ताकि हर result exact build और run की ओर इशारा करे।

Environment variables: test अपनी configuration कैसे पढ़ता है

Environment variable एक name–value pair है जो operating system किसी process को शुरू होते समय देता है; child processes इसे inherit करते हैं। CI runner हर step के लिए variables set करता है, test runner उन्हें inherit करता है, और test code उन्हें पढ़ता है: JavaScript और TypeScript में process.env.BASE_URL, Python में os.environ["BASE_URL"], Java में System.getenv("BASE_URL")।

Values कई levels पर set हो सकती हैं। GitHub Actions में env key workflow, job और step level पर काम करती है, और सबसे specific value जीतती है: step की value job की value पर भारी पड़ती है। Platform की settings में saved configuration variables (vars context) organization, repository और environment level पर होते हैं; environment की value repository वाली पर, और repository वाली organization वाली पर भारी पड़ती है। GitLab यही विचार project या group settings के CI/CD variables से देता है। जब किसी test को अनपेक्षित value मिले, तो product पर शक करने से पहले पता करें कि value किस level से आई।

  • हर value एक string है। HEADLESS=false text "false" बनकर आता है, जो JavaScript में truthy है; text से compare करें, और numbers को Number() से convert करें।
  • JavaScript में missing variable बस undefined होता है, error नहीं: तब test undefined/login call करता है, या इससे भी बुरा, कोई fallback address।
  • Defaults timeout जैसी हानिरहित settings के लिए ठीक हैं, target या credentials के लिए कभी नहीं। BASE_URL न मिले तो run रुकना चाहिए, production पर नहीं जाना चाहिए।
  • Variables masked नहीं होते। GitHub के docs चेतावनी देते हैं कि variables build outputs में unmasked दिखते हैं, इसलिए variable में रखा password साफ़ print होता है।
// tests/config.ts: read once, check early, never print a secret
const required = ['TEST_ENV', 'BASE_URL', 'TEST_USER', 'TEST_PASSWORD'];
const missing = required.filter((name) => !process.env[name]);
if (missing.length > 0) {
  throw new Error('Missing variables: ' + missing.join(', ')); // no silent fallback
}

export const config = {
  env: process.env.TEST_ENV!,                        // staging | production
  baseUrl: process.env.BASE_URL!,
  user: process.env.TEST_USER!,
  password: process.env.TEST_PASSWORD!,             // a secret: use it, never log it
  headless: process.env.HEADLESS !== 'false',        // every value is a string
  timeoutMs: Number(process.env.TIMEOUT_MS ?? '30000'), // harmless default
  allowWrites: process.env.TEST_ENV !== 'production',
};

console.log('env=' + config.env + ' baseUrl=' + config.baseUrl); // never the password

Secrets: storage, masking और least privilege

Secret एक बार store होता है, CI platform के secret store या external vault में, और run के समय job में inject होता है, आम तौर पर environment variable बनकर। GitHub saved secret को दोबारा कभी नहीं दिखाता; आप उसे सिर्फ़ replace कर सकते हैं। GitLab यही अपने “Masked and hidden” option के साथ देता है। Secrets कभी repository में नहीं जाते: न pipeline file में, न commit हुई .env में, न test data file में, न export हुए Postman environment में, न bug report के screenshot में। अपनी machine पर उन्हें ऐसी .env file में रखें जिसे .gitignore बाहर रखे। जो secret Git history तक पहुँच गया वह leak माना जाता है, भले अगला commit उसे delete कर दे, क्योंकि history हर version रखती है: पहले उसे revoke और rotate करें, फिर सफ़ाई करें।

Masking job log में secret की exact value को *** (GitHub) या [MASKED] (GitLab) से बदल देती है। यह छेदों वाला safety net है, और दोनों platforms कहते हैं कि यह guaranteed नहीं है। GitHub के docs कहते हैं कि हर transformed value (Base64 या URL-encoded) और हर derived value, जैसे secret key से sign किया गया token, को भी ::add-mask:: workflow command से secret के रूप में register करें, और चेतावनी देते हैं कि JSON या YAML blob के अंदर रखे secret के redact होने की संभावना बहुत कम हो जाती है। Masking सिर्फ़ log को cover करती है: traces, HAR files, screenshots, videos और HTML reports, जिन्होंने Authorization header या type किया गया password पकड़ लिया हो, वैसे ही upload होते हैं।

Variables ऐसी settings रखते हैं जिन्हें access वाला कोई भी पढ़ सकता है और job log print करता है; secrets access रखते हैं, encrypted store में रहते हैं, सिर्फ़ log में masked होते हैं और उन्हें artifacts से दूर रखना ज़रूरी है।

Configuration variable

ऐसी setting जिसे पढ़ा, review और print किया जा सकता है

क्या रखता है:
Base URL, environment name, browser, timeouts, feature flags
उदाहरण:
BASE_URL=https://staging.shop.example
कहाँ store होता है:
Pipeline file, commit हुई config file या platform के variables (vars)
Save करने के बाद:
Access वाला हर व्यक्ति पढ़ और review कर सकता है
Job log में:
साफ़ print होता है
Artifacts में:
जैसा tests ने लिखा
किसे मिलता है:
अपने scope का हर job; सबसे specific level जीतता है
बदलने पर:
Value बदलें और फिर से run करें

Secret

Access देने वाली value, जो सुरक्षित रास्ते से पहुँचती है

क्या रखता है:
Passwords, API keys, tokens, database passwords, signing keys
उदाहरण:
TEST_PASSWORD=***
कहाँ store होता है:
Platform का secret store या vault, repository में कभी नहीं
Save करने के बाद:
GitHub पर write-only (replace करें, देख नहीं सकते); GitLab पर “Masked and hidden” के साथ
Job log में:
Exact value *** या [MASKED] दिखती है; encoded या derived values छूट सकती हैं
Artifacts में:
Masked नहीं: इसे traces, HAR files और reports से दूर रखें
किसे मिलता है:
सिर्फ़ ज़रूरी jobs: environment तक सीमित, production के लिए approval, fork pull requests को कभी नहीं
बदलने पर:
Schedule पर rotate करें, और किसी भी exposure के तुरंत बाद

GitHub Actions और GitLab CI/CD के documentation के अनुसार व्यवहार; दूसरे CI platforms इन्हीं विचारों के लिए अपने नाम इस्तेमाल करते हैं।

  • हर environment के लिए अलग test credentials, उतने ही role के साथ जितना tests को चाहिए: कभी किसी व्यक्ति का अपना account नहीं, और “safe रहने के लिए” admin कभी नहीं।
  • हर secret को उसी environment तक सीमित करें जिसे उसकी ज़रूरत है। GitHub Actions में environment secret सिर्फ़ उन jobs तक पहुँचता है जो उस environment को reference करते हैं, और required reviewers होने पर job उसे approval से पहले नहीं पढ़ सकता; GitLab के protected variables सिर्फ़ protected branches या tags की pipelines तक पहुँचते हैं।
  • Pipeline के अपने token को default रूप से read-only access दें (GITHUB_TOKEN के लिए permissions: contents: read) और उसे सिर्फ़ उसी job में बढ़ाएँ जिसे ज़्यादा चाहिए।
  • Fork वाला नियम बनाए रखें: forks से आए pull requests से शुरू हुए workflows को repository secrets नहीं मिलते। इसका तोड़ ढूँढने की बजाय secret पर निर्भर tests merge के बाद चलाएँ।
  • Long-lived keys की बजाय short-lived credentials चुनें: OpenID Connect (OIDC) में job cloud provider को CI platform का जारी किया token दिखाता है और उस run के लिए short-lived credentials पाता है, इसलिए कोई cloud key secret के रूप में store नहीं करनी पड़ती। बाकी को schedule पर और किसी भी exposure के तुरंत बाद rotate करें, और जिन्हें कोई job इस्तेमाल नहीं करता उन्हें delete करें।

आज़माएँ: रैंडम सीक्रेट जनरेटर आज़माएँ: Base64 एन्कोडर आज़माएँ: API ऑथेंटिकेशन टेस्टर

हर environment की configuration: एक suite, कई targets

वही suite pull request के ephemeral environment, staging और production पर बिना code बदले चलनी चाहिए: सिर्फ़ configuration बदलती है। Team के साथ लिखित रूप में तय करें कि हर environment में क्या बदलता है और क्या नहीं बदलना चाहिए। Test code और टेस्ट होने वाला build वही रहते हैं; एक आम practice है build एक बार बनाना और वही build environments में आगे promote करना, ताकि staging पर pass उस build के बारे में कुछ बताए जो production तक पहुँचता है।

ये अंतर दो तरीकों से आते हैं। Non-secret settings हर environment की review की गई, commit हुई file (config/staging.json) में या environment-level variables में रह सकती हैं; secrets सिर्फ़ store से आते हैं, हर environment तक सीमित। GitHub Actions में environments के अपने variables, secrets और protection rules होते हैं; GitLab में project variable को environment scope दिया जा सकता है (group variables के लिए यह सिर्फ़ paid tiers में है)। Production के अपने नियम हों: छोटा read-only smoke set, एक dedicated monitoring account, और suite में एक guard जो वहाँ data बदलने वाले tests चलाने से मना कर दे।

Setting           PR run (ephemeral)    staging                 production
----------------  --------------------  ----------------------  ----------------------
BASE_URL          localhost:3000        staging.shop.example    shop.example
Test account      seeded per run        qa-buyer (staging)      smoke-monitor (read)
Payments          mocked                provider sandbox        not exercised
Tests that run    @pr subset            full regression         @smoke only
Writes data       yes, reset per run    yes, own records        no
Secrets from      none needed           staging environment     production environment
Approval          none                  none                    required reviewer

आज़माएँ: टेक्स्ट डिफ़

Worked example: staging tests और production smoke check

एक online shop main से deploy करती है। Team हर merge के बाद staging पर पूरी end-to-end suite चलाना चाहती है, और release production तक पहुँचने पर read-only account से एक smoke subset। नीचे के excerpt में test jobs हैं; build और deploy jobs हटा दिए गए हैं।

  • नाम वही, values अलग: vars.BASE_URL और secrets.TEST_PASSWORD job के environment के हिसाब से staging या production की value बनते हैं, क्योंकि environment-level value उसी नाम की repository-level value पर भारी पड़ती है। Test code नहीं बदलता।
  • Workflow सिर्फ़ main पर push होने पर चलता है; pull requests ऊपर की table वाला ephemeral setup इस्तेमाल करते हैं और उन्हें shared environment के secrets की ज़रूरत नहीं।
  • permissions: contents: read दोनों jobs में GITHUB_TOKEN को read-only रखता है।
  • Production job एक required reviewer का इंतज़ार करता है (repository settings में environment पर set), और उसके बाद ही production secrets पढ़ सकता है; फिर वह read-only account से @smoke tests चलाता है, और config में allowWrites false है।
  • Log में Run npx playwright test group step की env values दिखाता है: BASE_URL साफ़, और TEST_PASSWORD *** के रूप में। फिर tests env=staging baseUrl=https://staging.shop.example print करते हैं। जब कोई run fail हो, तो यही lines बताती हैं कि असल में क्या टेस्ट हुआ — अगला lesson इन्हीं पर आगे बढ़ता है।
# .github/workflows/e2e.yml (excerpt; build and deploy jobs omitted)
on:
  push:
    branches: [main]
permissions:
  contents: read                       # GITHUB_TOKEN can only read the code
jobs:
  e2e-staging:
    runs-on: ubuntu-latest
    environment: staging               # staging variables and secrets only
    steps:
      - uses: actions/checkout@v7
      - run: npm ci
      - run: npx playwright install --with-deps
      - run: npx playwright test
        env:
          TEST_ENV: staging
          BASE_URL: ${{ vars.BASE_URL }}                # variable: shown in logs
          TEST_USER: ${{ vars.TEST_USER }}
          TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}   # secret: masked in logs
  smoke-production:
    needs: e2e-staging                 # full file: after the production deploy job
    runs-on: ubuntu-latest
    environment: production            # waits for a required reviewer
    steps:
      - uses: actions/checkout@v7
      - run: npm ci
      - run: npx playwright install --with-deps
      - run: npx playwright test --grep @smoke
        env:
          TEST_ENV: production
          BASE_URL: ${{ vars.BASE_URL }}
          TEST_USER: ${{ vars.TEST_USER }}
          TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}

आज़माएँ: YAML फ़ॉर्मेटर

आम गलतियाँ

  • Secret को commit कर देना — pipeline file, .env, test data file या export हुए collection में — और उसे delete करने वाले अगले commit को fix मान लेना, value को revoke और rotate करने की बजाय।
  • Test password को plain variable में रखना क्योंकि “सिर्फ़ test account है”: variables unmasked print होते हैं, और shared environments के test accounts अक्सर असली e-mail, payment sandboxes या customer जैसे data तक पहुँचते हैं।
  • Masking पर भरोसा करना: “बस debug के लिए” secret echo करना, पूरे request headers log करना, या tokens वाले traces और HAR files upload करना।
  • Missing variable को ऐसा fallback देना जो production या shared environment की ओर इशारा करे, या "false" को true पढ़ना।
  • हर job और environment के लिए एक ही powerful credential इस्तेमाल करना, जिससे pull request job का leak production को उजागर कर दे।
  • Fork वाले नियम से बचने के लिए pull_request_target trigger इस्तेमाल करना और साथ में fork का code checkout करना, जो untrusted code को repository के secrets के साथ चलाता है — GitHub की security guidance ठीक इसी के ख़िलाफ़ चेतावनी देती है।

QA का नज़रिया

Pipeline configuration को test basis भी मानें और review होने वाला code भी। जब workflow file बदले, तो पूछें: हर job किस environment को target करता है, किस account और role से, कौन-से secrets पढ़ सकता है, उसे कौन trigger कर सकता है और production को कौन approve करता है? Test credentials की एक inventory रखें — owner, environment, role, कहाँ stored है, आख़िरी rotation — पर values कभी नहीं। Rotations और expiry dates team calendar पर रखें, क्योंकि expire हुई key किसी शांत सुबह पूरी suite को red कर देती है।

सिर्फ़ product नहीं, safety भी टेस्ट करें। Run के बाद job log और download किए गए artifacts में किसी ज्ञात test-only secret value और उसके Base64 रूप को खोजें; कोई भी match pipeline का defect है। Rotation के बाद पक्का करें कि पुरानी key reject होती है। जब बहुत से tests एक साथ 401 या connection error से fail हों, तो product defects दर्ज करने से पहले configuration जाँचें, और हर bug report में environment, base URL, commit और run id लिखें, secret कभी नहीं।

अभ्यास

Configuration और secret risks के लिए pipeline excerpt review करें

आपका काम

एक साथी ने pull request खोली है जो नीचे वाला workflow जोड़ती है। यह हर pull request और push पर end-to-end suite चलाता है। इसे वैसे review करें जैसे test code review करते हैं: हर configuration और secret समस्या खोजें, हर एक का risk समझाएँ और fix सुझाएँ।

फिर उन credentials की list बनाएँ जिन्हें अभी revoke और rotate करना ज़रूरी है, और समझाएँ कि सिर्फ़ file ठीक करना काफ़ी क्यों नहीं।

सामग्री
# .github/workflows/e2e.yml (proposed in a pull request)
on: [pull_request, push]
permissions: write-all
env:
  BASE_URL: ${{ vars.BASE_URL || 'https://shop.example' }}
  ADMIN_PASSWORD: Qa-Admin-2026
jobs:
  e2e:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7
      - run: npm ci
      - run: npx playwright install --with-deps
      - run: echo "token=$(echo -n "$API_TOKEN" | base64)"
        env:
          API_TOKEN: ${{ secrets.PROD_API_TOKEN }}
      - run: npx playwright test --trace on
        env:
          TEST_PASSWORD: ${{ vars.TEST_PASSWORD }}
      - uses: actions/upload-artifact@v7
        if: always()
        with:
          name: playwright-results
          path: test-results/
चरण
  1. Triggers और permissions line पढ़ें: इस job को कौन शुरू कर सकता है, और उसका token क्या कर सकता है?
  2. env blocks की हर value को configuration variable, secret या platform value में बाँटें, और जाँचें कि हर एक वहीं stored है जहाँ उसकी श्रेणी के हिसाब से होना चाहिए।
  3. हर secret को steps में follow करें: क्या वह print, transform या किसी artifact में save होता है?
  4. Corrected version और rotate करने वाले credentials की list लिखें।
मॉडल उत्तर दिखाएँ
मॉडल उत्तर

Token की ताक़त: permissions: write-all GITHUB_TOKEN को हर scope में write access देता है, repository के code समेत, जबकि job ऐसा code चलाता है जिसे pull request बदल सकती है (read-only token सिर्फ़ forks से आई pull requests को मिलता है)। ऊपर contents: read set करें और इसे सिर्फ़ उस job में बढ़ाएँ जिसे ज़्यादा चाहिए।

Silent fallback: BASE_URL में || variable न मिलने पर tests को production address पर भेज देता है, pull requests पर भी। Fallback हटाएँ, BASE_URL न मिले तो run रोकें, और pull requests को ephemeral या staging target दें।

Hard-coded ADMIN_PASSWORD: repository पढ़ सकने वाला हर व्यक्ति इसे पढ़ सकता है, यह Git history में रहता है, और यह admin account का है। इसकी जगह least-privileged test account लें जिसका password environment secret हो।

echo … | base64 step जान-बूझकर production token को log में ऐसे रूप में लिखता है जिसे वापस decode किया जा सकता है। Transformed values के लिए masking guaranteed नहीं है, और run खोल सकने वाला कोई भी व्यक्ति जो कुछ छूट जाए उसे decode कर सकता है। Step हटाएँ; pull request job के पास production token होना ही नहीं चाहिए।

TEST_PASSWORD vars से आता है, जो log में unmasked दिखते हैं। इसे secrets.TEST_PASSWORD के रूप में store करें।

always() पर upload के साथ --trace on हर test का trace रखता है, उसके actions और network traffic समेत, इसलिए type किए गए passwords और Authorization headers ऐसे artifact में पहुँच सकते हैं जिसे masking कभी नहीं छूती। Traces सिर्फ़ failures या retries के लिए record करें, artifact retention छोटा रखें और short-lived test credentials इस्तेमाल करें।

environment: key नहीं है: staging और production के secrets को कुछ भी अलग नहीं करता और कोई approval production को नहीं बचाता। इस job में environment: staging जोड़ें और production checks को required reviewer के पीछे एक अलग smoke job में ले जाएँ।

अभी rotate करें: ADMIN_PASSWORD, क्योंकि pull request उसे पहले ही Git history में push कर चुकी है, और PROD_API_TOKEN अगर यह workflow एक बार भी चला है, क्योंकि Base64 वाली line ने उसे log में ऐसे रूप में लिखा जिसे masking शायद न पकड़े, और pull request का code उसे पढ़ सकता था; फिर उन runs के logs और artifacts delete करें। File ठीक करने से आगे के leaks रुकते हैं; leak हुई value दोबारा secret नहीं बनती।

अक्सर पूछे जाने वाले सवाल

Environment variable और secret में क्या अंतर है?

Environment variable mechanism है: एक नाम वाली value जो process को मिलती है। Secret एक तरह की value है — जो access देती है — और साथ में उसे store और deliver करने का सुरक्षित तरीका: encrypted, settings में save होने के बाद आम तौर पर दोबारा पढ़ी नहीं जा सकती, logs में masked और कुछ ही jobs तक सीमित। Secret भी आम तौर पर test तक environment variable बनकर पहुँचता है; अंतर उस पल से पहले की हर चीज़ में है।

क्या मैं secrets को .env file में रख सकता हूँ?

अपनी machine पर हाँ, अगर file .gitignore में है और उसमें सिर्फ़ test values हैं। Variable names और हानिरहित dummy values वाली .env.example commit करें ताकि दूसरों को पता हो कि क्या set करना है। CI में platform का secret store इस्तेमाल करें, और ऐसी file कभी artifact के रूप में upload न करें।

Pull request पर job चलने पर मेरा secret खाली क्यों होता है?

आम तौर पर design के कारण। GitHub Actions में forks से आए pull requests से शुरू हुए workflows को repository secrets नहीं मिलते, और environment secrets सिर्फ़ उन jobs तक पहुँचते हैं जो environment को reference करते हैं, ज़रूरी approval के बाद। GitLab में protected variable सिर्फ़ protected branches या tags की pipelines तक पहुँचता है। इन नियमों को बदलने से पहले जाँचें, और pull request tests ऐसे design करें कि उन्हें shared secrets की ज़रूरत न पड़े।

क्या automated tests production पर चलने भी चाहिए?

सिर्फ़ deployment के बाद एक छोटा read-only smoke set, dedicated low-privilege account और approval step के साथ, और बिना किसी data बदलने वाले test के। बाकी सब पहले के stages में चलता है। Deployment verification testing guide बताता है कि ऐसे checks को क्या देखना चाहिए।

संदर्भ

  • OWASP Cheat Sheet Series: Secrets ManagementOWASP FoundationAPI की और सीक्रेट कैसे जनरेट, स्टोर, रोटेट किए जाएँ और कोड व लॉग से बाहर रखे जाएँ।
  • Using secrets in GitHub ActionsGitHubcredentials को repository, environment या organization secrets के रूप में रखना, GitHub उन्हें logs में कैसे छिपाता है, और forks से शुरू हुए workflows को वे क्यों नहीं मिलते।
  • GitHub Actions documentationGitHubGitHub Actions में workflows, jobs, runners और artifacts कैसे परिभाषित होते हैं — जहाँ हर push या pull request पर ऑटोमेटेड टेस्ट चलते हैं।
  • GitLab CI/CDGitLabपाइपलाइन, जॉब और आर्टिफ़ैक्ट कैसे परिभाषित होते हैं — जहाँ हर बदलाव पर ऑटोमेटेड रिग्रेशन सूट चलता है।

Mutqan tools से अभ्यास करें

YAML को एकसमान इंडेंटेशन और quoting के साथ फ़ॉर्मेट और वैलिडेट करें।

फ़ॉर्मेटिंग

टेक्स्ट या फ़ाइलों को अपने ब्राउज़र में ही Base64 (स्टैंडर्ड या URL-सुरक्षित) में एन्कोड करें।

एन्कोडिंग

किसी endpoint पर Bearer, Basic, API-key और कस्टम-हेडर प्रमाणीकरण टेस्ट करें और अधिकृत बनाम अनधिकृत रिस्पॉन्स की तुलना करें।

API टेस्टिंग

दो टेक्स्ट की लाइन-दर-लाइन या शब्द-दर-शब्द तुलना करें और अंतर हाइलाइट करें।

फ़ॉर्मेटिंग

और गहराई से

इस topic में आपकी प्रगति

QA रोडमैप का हिस्सा