This is a viewer only at the moment see the article on how this works.
To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk
This is a preview from the server running through my markdig pipeline
Thursday, 04 December 2025
कोर सिद्धांत: तेजी से और दर्दरहित छोड़ दो, और आप और अधिक बार छोड़ देंगे. जब गाड़ी चलाते वक्त बदलाव होते हैं, तो कई बार तो आप छोटे - छोटे बदलाव करते हैं ।
यह गाइड मैं उत्पादन में उपयोग की उपलब्ध योजनाओं को कवर करता है, सरल टैग- आधारित कर्मचारी वितरण के लिए। सभी उदाहरण वास्तविक से आते हैं। Git क्रियाएँ इस भंडार में काम करते हैं.
Voning विवरण में जोड़ने से पहले, यहाँ है कि कैसे आम नीतियाँ तुलना करते हैं:
[ पेज 11 पर तसवीर] |----------|----------|------------|-----------| | टैग आधारित WAV अनुप्रयोग, स्पष्ट रिलीज कम्स स्टार्टअप, सोलो devs, प्रौढ़ टीमों | शाखा आधारित एमिलिंग रिपरेशन लॉशन कम प्रारंभ होता है, तेज-ग्रेसन टीम | GiFestivalVoiceName सनकिम्पेड रिलीज, बहुत से संस्करण हेलीफाइड, पालन-clowns | ट्रक आधारित + विशेषता फ्लैग [ चित्र का श्रेय] | मोनोरे- मल्टी- पैकेज जन्नती लाइब्रेरी, कोड अतिसंपारकारी मध्यम प्लेटफॉर्म टीम, ओएसएस परियोजना
प्रारंभ होता है व छोटा टीम: टैग आधारित या शाखा आधारित तैनाती के साथ प्रारंभ करें. इसे हमेशा आसान रखें - आप सहज रूप से आगे जोड़ सकते हैं. सुविधा के साथ आधारित विकास लोकप्रिय है लेकिन छोटे टीमों के लिए gixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
छोटे - छोटे रंग: अकसर कम - से - कम कुल वातावरण में, एक - दूसरे को खुश करने के लिए ज़रूरी होता है कि एक - दूसरे को सहयोग दें और एक - दूसरे को सहयोग दें ।
सोलो डेवलपर: टैग आधारित मूल्य है. एक टैग दबाएँ, तैनाती हो जाता है. कोई समारोह, कोई खड़ा नहीं.
प्लेटफॉर्म/ लाइब्रेरी टोली: हर पैकेज के स्वतंत्र संस्करण के साथ एकलीकरण की ज़रूरत होती है ।
सबसे आसान और सबसे भरोसेमंद रणनीति ।
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 }}
स्वचालित संस्करण के लिए, न्यून. Git टैगों में से संस्करणों की गणना करता है:
<PackageReference Include="MinVer" Version="6.0.0" PrivateAssets="all" />
<PropertyGroup>
<MinVerTagPrefix>umamiv</MinVerTagPrefix>
</PropertyGroup>
विशिष्ट शाखाओं में कोड देशों पर जब कोड छोटा हो तो स्वचालित रूप से उपलब्ध हों. स्टार्टअप तथा तेज- किलोमीटर की टीमों में सामान्य.
on:
push:
branches: [main] # → Production
# branches: [develop] # → Staging
छैतिज पैमाना: कोई हस्तचालित कदम नहीं, सम्मिलित करने पर तैनात करता है कॉन्न्स: दुर्घटनाकारी तैनाती संभव, कम सुस्पष्ट इतिहास
मैं एक Dudbe के पास - शाखा धक्का पर निर्माण का उपयोग करें (CII सत्यापन), लेकिन केवल टैग पर प्रकाशित:
on:
push:
tags: ['scheduler-*']
branches: [main, local]
jobs:
build:
# Always build
publish:
if: startsWith(github.ref, 'refs/tags/') # Only publish on tags
खुद की तैनाती के लिए, प्रहरीदुर्ग नई छवियों को स्वचालित खींच रहा है:
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
न्यायिक प्रवाह: दबाएँ टैग नीचेोक्त काम को बल देता है ।
अगर आप तैनात बग को तैनात करते हैं तो तेज तैनात करना बेकार है. हर काम का फूल में शामिल होना चाहिए:
- 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 }}
GiHhb इसके ओएमसी चिह्न के लिए एक छोटे से एनू लेग कुंजी के लिए. Nue.org पर भरोसा करें यह सक्षम करने के लिए.
आर्टिकल टिप्पणी यह साबित करने के लिए कि आपके माल को सीआई में बनाया गया था, न कि उस में हेर - फेर किया गया ।
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
यह हासिल होता है एसएलएसए स्तर २.. स्तर 3, उपयोग के लिए रीus कार्य प्रवाहित होता है.
सम्मिलित करने से पहले टीमों को स्तम्भों की आवश्यकता होती है.
छोटे - छोटे रास्ते - शाखा आधारित पूर्वावलोकन वातावरण:
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.
आरंभ/सोलो पास - Tann अपने स्थानीय मशीन:
# Cloudflare Tunnel (free)
cloudflared tunnel run --url http://localhost:5000 my-preview
# → https://my-preview.cfargotunnel.com
या प्रयोग तारी आंतरिक टीम के लिए WPN आपके dev मशीन में पहुँच.
टैग साफ- सफाई: Git टैग हमेशा के आसपास रहना.
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 लाइब्रेरी के लिएगुप्त: में भंडारित करें GiHest गुप्तकोड में कभी नहीं. आवश्यक रहस्य विशेष:
DOCKER_HUB_ACCESS_TOKENNUGET_API_KEY (या आईपीएससी इस्तेमाल करें)NPM_TOKENमोनो- धातु विकास: विकास के दौरान परियोजना संदर्भों का प्रयोग करें, तैनात सत्यापन के लिए पैकेज संदर्भों के संदर्भों को स्विच करें:
<ProjectReference Include="..\MyLib\MyLib.csproj" />
<!-- <PackageReference Include="MyLib" Version="1.0.0" /> -->
एक ही सिद्धांत, विविध औज़ार:
डॉक डॉकर लिखा कुबर्स |----------------|------------| इससे मुझे बहुत मदद मिली । ” आरगोसीडी / फ्लक्स | offpler- क़िस्म.yml वातावरण नेबुर्ग समाहित अंशों को पुनः प्रारंभ करें घड़ो मैनुअल रोलबैक GiMO रोलबैक
इस भंडार - जाँच में कार्य फ्लो यहाँ दिखाया गया है .github/workflows/ पूर्ण कार्यान्वयन के लिए.
याद रखें: बिजली, भरोसेमंद तैनातियों के विकास की बुनियाद होती है ।
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.