जीटहब कार्यों के साथ आधुनिक प्रकाशन रणनीति (हिन्दी (Hindi))

जीटहब कार्यों के साथ आधुनिक प्रकाशन रणनीति

Thursday, 04 December 2025

//

7 minute read

बुनियादी सिद्धांत यह एकgile विकास के लिए महत्वपूर्ण है।

यह गाइड मैं उत्पादन में प्रयोग करता हूँ जारी करने की रणनीतियों को शामिल करता है। GitHub क्रियाएँ इस रिपोजिटरी में कार्यप्रवाह

एक नज़र में जारी करने की रणनीति

विस्तृत विवरण में डुबोने से पहले

रणनीति सबसे अच्छा जटिलता के लिए
टैग-आधारित अनुप्रयोग
शाखा निरंतर तैनाती कम स्टार्टअप , तेजी से
जीटफ्लो विनियमित जारीियां, बहुविध संस्करणों उच्च उद्यम МSK4 अनुपालन
ट्रंक-आधारित + विशेषता झण्डा उच्च-velocity टीमें Medium Big tech,mature startups
मोनोरेपो बहु-- पैकेज पुस्तकालयों, साझा कोडबेस मध्यम प्लेटफार्म टीमें

कहाँ क्या काम करता है

स्टार्टअप & लघु टीम: टैग के साथ आरंभ करें।

उद्यमअनुपालन के लिए प्रायः GitFlow या इसी प्रकार की आवश्यकता होती है।

एकल विकासकर्ता: टैग-आधारित आदर्श है।

प्लेटफॉर्म/लाइब्रेरी टीमप्रति पैकेज में स्वतंत्र संस्करणिंग के साथ एकल रेपो रणनीति की आवश्यकता है

टैग-आधारित तैनाती

सरलतम और सबसे विश्वसनीय रणनीति

पर्यावरण लक्ष्य

on:
  push:
    tags:
      - 'release-*'  # Production
      - 'local-*'    # Dev environment
- name: Build Docker image
  run: |
    TAG_NAME=${GITHUB_REF#refs/tags/}
    if [[ "$TAG_NAME" == local-* ]]; then
      docker build -t myapp:local .
    else
      docker build -t myapp:latest -t myapp:$(date +%s) .
    fi

यह क्यों काम करता हैसरल मानसिक मॉडल

# Deploy to production
git tag release-v2024.12.01 && git push origin release-v2024.12.01

# Deploy to dev
git tag local-feature-test && git push origin local-feature-test

बहु-- पैकेज संस्करण

कई प्रकाशन योग्य पैकेजों के साथ मोनोरीपोज़ के लिए

# Different workflows, different tag patterns
# umami-net.yml
on:
  push:
    tags: ['umamiv*.*.*']  # e.g., umamiv1.0.5

# fetchextension.yml
on:
  push:
    tags: ['fetchextension-v*.*.*']  # e.g., fetchextension-v1.2.0

संस्करण को निकालें और इसे पूरे में उपयोग करें:

- name: Extract version
  run: echo "VERSION=${GITHUB_REF#refs/tags/umamiv}" >> $GITHUB_OUTPUT

- name: Build & Pack
  run: |
    dotnet build -c Release -p:Version=${{ steps.version.outputs.VERSION }}
    dotnet pack -c Release -p:PackageVersion=${{ steps.version.outputs.VERSION }}

स्वचालित संस्करणिंग के लिए मिनर जीट टैग से संस्करण गणना करता है

<PackageReference Include="MinVer" Version="6.0.0" PrivateAssets="all" />
<PropertyGroup>
  <MinVerTagPrefix>umamiv</MinVerTagPrefix>
</PropertyGroup>

शाखा-आधारित तैनाती

जब कोड विशिष्ट शाखाओं पर उतरता है तो स्वचालित रूप से लागू करें

on:
  push:
    branches: [main]      # → Production
    # branches: [develop] # → Staging

प्रॉस: कोई म्यानुअल चरण नहीं त्रुटि: अनियमित विनियोजन संभव है, कम स्पष्ट इतिहास

मैं एक हाइब्रिड दृष्टिकोण का उपयोग करता हूँ - शाखा धकेलने पर बनाता है | ( | आईसी सत्यापन |), | लेकिन सिर्फ टैगों पर प्रकाशित करें |

on:
  push:
    tags: ['scheduler-*']
    branches: [main, local]

jobs:
  build:
    # Always build
  publish:
    if: startsWith(github.ref, 'refs/tags/')  # Only publish on tags

Watchtower के साथ स्वचालित अद्यतन

स्वचालित विनियोजनों के लिए वॉचटोवर स्वचालित रूप से नई छवियाँ निकालता है

services:
  app:
    image: myapp:latest
    labels:
      - "com.centurylinklabs.watchtower.enable=true"

  watchtower:
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: --interval 300  # Check every 5 minutes

विनियोजन प्रवाह: पुश टैग | → | GitHub कार्य निर्माण करता है |→ | रजिस्ट्री में पुश करता है

गुणवत्ता द्वार

सभी कार्यप्रवाह में गेट शामिल होना चाहिए

- name: Run tests
  run: dotnet test --configuration Release

- name: Build
  run: dotnet build --configuration Release

# Tests or build fail → workflow stops → no publish

बहुआयामी के लिए-फ्रेमवर्क पैकेजों के लिए

- run: dotnet build -c Release --framework net8.0
- run: dotnet build -c Release --framework net9.0

ओआईडीसी के साथ पासवर्डहीन प्रकाशन

आधुनिक दृष्टिकोण - घुमाने के लिए कोई रहस्य नहीं

permissions:
  id-token: write
  contents: read

- uses: NuGet/login@v1
  with:
    user: 'myusername'

- run: dotnet nuget push *.nupkg --api-key ${{ steps.login.outputs.NUGET_API_KEY }}

GitHub अपने OIDC टोकन को एक छोटा '-' जीवित NuGet API कुंजी के लिए बांटता है

आपूर्ति श्रृंखला सुरक्षा

पुरातत्व प्रमाणन प्रमाणित करें कि आपके वास्तु CI में निर्मित हैं

permissions:
  id-token: write
  attestations: write

- uses: docker/build-push-action@v6
  id: push
  with:
    push: true
    tags: myapp:latest

- uses: actions/attest-build-provenance@v2
  with:
    subject-name: index.docker.io/myuser/myapp
    subject-digest: ${{ steps.push.outputs.digest }}
    push-to-registry: true

उपभोक्ता द्वारा सत्यापित करें gh attestation verify oci://index.docker.io/myuser/myapp:latest --owner myuser

यह प्राप्त करता है SLSA स्तर 2स्तर के लिए . उपयोग पुनः उपयोग योग्य कार्यप्रवाह.

पूर्वावलोकन वातावरण

समूहों को विलयन से पहले परिवर्तनों की पूर्वावलोकन करने के लिए भागीदारों की आवश्यकता है

उद्यम दृष्टिकोण शाखा

on:
  pull_request:
    types: [opened, synchronize]

- run: |
    BRANCH=$(echo ${{ github.head_ref }} | sed 's/[^a-zA-Z0-9]/-/g')
    docker build -t myapp:preview-$BRANCH .
    # Deploy to k8s namespace, cloud platform, etc.

स्टार्टअप - अपने स्थानीय मशीन का सुरंगन करें

# Cloudflare Tunnel (free)
cloudflared tunnel run --url http://localhost:5000 my-preview
# → https://my-preview.cfargotunnel.com

या उपयोग करें ताररक्षक अपने dev मशीन में आंतरिक टीम पहुँच के लिए VPN.

व्यावहारिक सुझाव

टैग साफ करेंगिट टैग हमेशा के लिए चिपका रहता है

git tag -d old-test-tag                      # Delete local
git push origin :refs/tags/old-test-tag      # Delete remote

नामकरण सम्मेलन: संगत होना

  • release-YYYY.MM.DD उत्पादन के लिए
  • local-feature-name डेव के लिए
  • packagev1.2.3 पुस्तकालयों के लिए

ठ̧ें: Store in GitHub SecretsCommentकोड में कभी नहीं

  • DOCKER_HUB_ACCESS_TOKEN
  • NUGET_API_KEY ( या OIDC का उपयोग करें
  • NPM_TOKEN

मोनोरेपो विकासविकास के दौरान परियोजना संदर्भ का उपयोग करें

<ProjectReference Include="..\MyLib\MyLib.csproj" />
<!-- <PackageReference Include="MyLib" Version="1.0.0" /> -->

Kubernetes में जा रहा है

समान सिद्धांत

डोकर कम्पोज़ करें |----------------|------------| वॉचटोवर आरगोसीडी / फ्लक्स | डॉकर | कंटेनर पुनः आरंभ करने के लिए मैनुअल रोलरबैक

सारांश

  1. सरल प्रारंभ करें: टैग-आधारित तैनाती अधिकांश आवश्यकताओं को पूरा करती है
  2. आवश्यकता पड़ने पर जटिलता जोड़ें: शाखा
  3. स्वचालित गुणवत्ता द्वार: प्रकाशन से पहले परीक्षाएं पास होनी चाहिए
  4. रोलबैक सक्षम करें: Timestamped टैग या GitOps इतिहास
  5. अपने पाइपलाइन को सुरक्षित करें: गोपनीयता के लिए OIDC
  6. अपने संदर्भ को मिलाएँSolo dev

यहाँ दिखाया गया कार्यप्रवाह इस रिपोजिटरी में चलता है - जाँच .github/workflows/ पूर्ण कार्यान्वयन के लिए

याद रखें: त्वरित

Finding related posts...
logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.