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
المبدأ الأساسي: جعل إطلاقات سريعة وغير مؤلمة، وسوف تطلق أكثر من ذلك. وهذا أمر بالغ الأهمية للتنمية السريعة السرعة - فالنشرات السريعة والموثوقة تخلق الحلقة السريعة التي تحتاج إليها. عندما يكون النشر مخيفاً أو بطيئاً، تقوم فرق بدفع التغييرات، وزيادة المخاطر. عندما يكون النشر مملاً وتلقائياً، تقوم بشحن التغييرات الصغيرة بشكل متكرر.
ويغطي هذا الدليل استراتيجيات الإطلاق التي أستخدمها في الإنتاج، بدءاً من عمليات النشر البسيطة القائمة على الوسم إلى النشر الأحادي الريبو المتعدد التغليف. جو سير العمل في هذا المستودع.
قبل الغوص في التفاصيل، إليكم كيف تقارن الاستراتيجيات المشتركة:
□ الاستراتيجية □ الأفضل للمعقدة □ المشتركة في □ |----------|----------|------------|-----------| | تستند إلى عوامل □ تطبيقات، إطلاقات واضحة، إطلاقات صريحة، □ البداعات المنخفضة، الندوات المنفردة، الفرق الناضجة □ | الوظائف الممولة من □ نشر مستمر □ إعدادات منخفضة المستوى وأفرقة سريعة الحركة وأفرقة سريعة الحركة □ | & & & □ إصدارات منظمة، نسخ متعددة □ مؤسسة عالية، امتثال - ثقيلة □ | أعلام السركز + أعلام الصفات • أفرقة عالية السرعة ومتوسطة التقنية الكبيرة، الناشئة الناضجة | عُلبة متعددة • المكتبات، قواعد الرموز المشتركة، أفرقة المنبر المتوسطة والمتوسطة، مشاريع برمجيات المصدر المفتوح
ا مجموعات & صغيرة: ابدأ بالنشر على الوسم أو على أساس الفرع. واجعل الأمر بسيطاً - يمكنك دائماً إضافة التعقيد لاحقاً. التنمية على أساس الترنك مع الأعلام المميزة شعبية على نطاق واسع ولكنها مبالغ فيها بالنسبة للأفرقة الصغيرة.
الـتـنـجم: غالباً ما يتطلب Getflow أو ما يماثلها من أجل الامتثال، وسجلات مراجعة الحسابات، وإدارة الإصدارات. بيئات متعددة (dev، وQA، والتشكيل، وprod) مع بوابات الموافقة.
مُسو سو سو سو سو سو سو سو سو م مروج: الوسم هو مثالي. دفع علامة، النشر يحدث. لا مراسم، لا نفقات عامة.
أفرقة المنبر/المنبر/المر المنبرالحاجة إلى استراتيجيات أحادية مع إصدار مستقل لكل رزمة، والنسخ الدنانيكية أمر حاسم بالنسبة للمستهلكين في المراحل النهائية.
أبسط الاستراتيجيات وأكثرها موثوقية. علامات تعريف مختلفة تشير إلى طريق إلى بيئات مختلفة أو تؤدي إلى إجراءات مختلفة.
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
Pro ProS ProS: لا يوجد خطوة يدوية، نشرات على الإندماج كون CCCC: نشرات عرضية ممكنة، تاريخ أقل وضوحاً
أنا أستخدم نهج هجين - بناء على دفع فرع (CI) التحقق، ولكن فقط نشر على العلامات:
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
تدفق النشر: دفع بطاقة GitHub Actions يبني GitHub GuitHub Actions Building إلى تسجيل TM Burgarter سحب TM Washer Bull: زهاء 5 دقائق.
عمليات الانتشار السريع عديمة الفائدة إذا قمت بنشر الحشرات. يجب أن يتضمن كل تدفق لسير العمل بوابات:
- 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 }}
غيت هوب يتبادل رمزه OIDC لـ a قصير العمر Nuget API مفتاح اضبط ثقة يعمل Nuget. 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
هذا مُنجز المستوى 2للمستوى 3، الاستخدام تدفقات عمل قابلة لإعادة استخدام.
وتحتاج الأفرقة إلى قيام أصحاب المصلحة بمعاينة التغييرات قبل الدمج.
النهج المتبع في المؤسسة - بيئات المعاينة القائمة على الفرع:
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
الاستخدام في حالة الاستخدام وحدة خدمات VPN للفريق الداخلي الدخول إلى جهازك Dev.
جاري جاري جاري جاري جاري جاري جاري جاري جاري جاري جاري جاري جاري جاري جاري جاري جاري جاري جاري جاري جاري جاري حفظالشعارات تلتصق بالأرجاء إلى الأبد
git tag -d old-test-tag # Delete local
git push origin :refs/tags/old-test-tag # Delete remote
***** تكون ثابتة.
release-YYYY.MM.DDlocal-feature-name خ ف خ فpackagev1.2.3 في مكتبات مكتباتالأسرار- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - مُحَجّه هوب المُسَاسر"أبداً في الشفرة" "أسرار نمطية:"
DOCKER_HUB_ACCESS_TOKENNUGET_API_KEY (أو استخدام الاستخدام OSIDC)NPM_TOKEN2 - التنمية: استخدام إشارات مرجعية إلى المشاريع أثناء التطوير، والانتقال إلى إشارات الحزم للتحقق من النشر:
<ProjectReference Include="..\MyLib\MyLib.csproj" />
<!-- <PackageReference Include="MyLib" Version="1.0.0" /> -->
مبادئ متشابهة، أدوات مختلفة:
الواجهات المعروضة هنا قيد التشغيل في هذا المستودع - التحقق .github/workflows/ التنفيذ الكامل.
يُذكر: عمليات النشر السريعة والموثوقة هي أساس التنمية السريعة. إستثمر في خط أنابيب إطلاق سراحك في وقت مبكر.
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.