پیشتر مطلب «
تولید و ارسال خودکار بستههای NuGet پروژههای NET Core. به کمک AppVeyor » را در این سایت مطالعه کردهاید. اخیرا GitHub نیز دقیقا همین امکانات یکپارچگی مداوم یا Continuous Integration را تحت عنوان GitHub Action، به مخازن کد خود اضافه کردهاست. البته این قابلیت هنوز در مرحلهی بتا است و برای فعالسازی آن بر روی مخازن کد خود نیاز است
در اینجا ثبت نام کنید. بعد از یکی دو روز صبر کردن، این برگهی جدید، به مخازن کد شما اضافه خواهد شد:
فعالسازی GitHub Action مخصوص NET Core.
در ادامه قصد داریم از این قابلیت جدید، جهت Build خودکار پروژههای NET Core. و در آخر ارسال خودکار بستههای نیوگت متناظر آنها به سایت nuget.org، استفاده کنیم. برای این منظور به برگهی Actions مخزن کد خود مراجعه کنید (تصویر فوق). سپس در این صفحه، بر روی لینک Work flows for … more کلیک کنید:
تا امکان انتخاب گردش کاری متناظر با NET Core. ظاهر شود:
در اینجا بر روی دکمهی «Set up this workflow» کلیک کنید تا صفحهی ویرایشی این گردش کاری که با فرمت yml است، ظاهر شود.
محتویات آنرا برای نمونه میتوانید به صورت زیر تغییر دهید:
name: .NET Core Build
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Setup .NET Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: 3.0.100-preview9-014004
- name: Build DNTCaptcha.Core lib
run: dotnet build ./src/DNTCaptcha.Core/DNTCaptcha.Core.csproj --configuration Release
در این گردش کاری، ابتدا SDK با شماره 3.0.100-preview9-014004 به صورت خودکار نصب خواهد شد. سپس دستور dotnet build بر روی یک فایل csproj خاص، اجرا میگردد. اگر نتیجهی این Build موفقیت آمیز بود، یک علامت چکمارک سبز رنگ ظاهر میشود و در غیر اینصورت یک ایمیل شکست عملیات را نیز دریافت خواهید کرد.
پس از تکمیل محتوای فایل yml در این مرحله، در کنار صفحه بر روی لینک start commit کلیک کنید، تا این فایل را به صورت خودکار در مسیر github\workflows\aspnetcore.yml ذخیره کند. بدیهی است تغییرات آنرا در قسمت commits مخزن کد نیز میتوانید مشاهده کنید.
این فایل on: [push] کار میکند. یعنی اگر تغییری را به مخزن کد اعمال کردید، همانند یک تریگر عمل کرده و عملیات Build را به صورت خودکار آغاز میکند.
اضافه کردن نماد گردش کاری GitHub به پروژه
هر گردش کاری تعریف شده را میتوان با یک نماد یا badge در فایل readme.md پروژه نیز نمایش داد:
فرمول آن نیز به صورت زیر است:
https://github.com/<OWNER>/<REPOSITORY>/workflows/<WORKFLOW_NAME>/badge.svg
یک مثال:
![Github tags](https://github.com/VahidN/DNTCaptcha.Core/workflows/.NET%20Core%20Build/badge.svg)
در اینجا نام گردش کاری، همان نامی است که داخل فایل yml درج شدهاست و نه نام فایل متناظر. بدیهی است این نام را باید به صورت encoded وارد کنید. برای مثال اگر دارای فاصله است، نیاز است 20%های فواصل را به این نام اضافه کنید تا URL نهایی درست کار کند.
تکمیل گردش کاری Build، جهت تولید خودکار و ارسال یک بستهی نیوگت
برای ارسال خودکار حاصل Build به سایت نیوگت، نیاز است یک API Key داشته باشیم. به همین جهت
به صفحهی مخصوص آن در سایت nuget پس از ورود به سایت آن، مراجعه کرده و یک کلید API جدید را صرفا برای این پروژه تولید کنید (در قسمت Available Packages بستهی پیشینی را که دستی آپلود کرده بودید انتخاب کنید).
پس از کپی کردن کلید تولید شدهی در سایت nuget:
به قسمت settings -> secrets مخزن کد خود مراجعه کرده و این کلید را به صورت زیر وارد کنید:
در ادامه برای دسترسی به این کلید با نام NUGET_API_KEY، میتوان از روش {{ secrets.NUGET_API_KEY }}$ در اسکریپت گردش کاری استفاده کرد.
اکنون که مخزن کد به همراه کلید API نیوگت است، میتوان مراحل dotnet pack (برای تولید فایل nupkg) و سپس dotnet nuget push (برای انتشار خودکار فایل nupkg) را به صورت زیر، به گردش کاری خود اضافه نمود:
name: .NET Core Build
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Setup .NET Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: 3.0.100-preview9-014004
- name: Build DNTCaptcha.Core lib
run: dotnet build ./src/DNTCaptcha.Core/DNTCaptcha.Core.csproj --configuration Release
- name: Build NuGet Package
run: dotnet pack ./src/DNTCaptcha.Core/DNTCaptcha.Core.csproj --configuration Release
- name: Deploy NuGet Package
run: dotnet nuget push ./src/DNTCaptcha.Core/bin/Release/*.nupkg -k ${{ secrets.NUGET_API_KEY }} -s https://api.nuget.org/v3/index.json
ویرایش یک گردش کاری، همانند ویرایش یک فایل متنی معمولی مخزن کد است. میتوان آنرا به صورت محلی در مسیر github\workflows\aspnetcore.yml. ویرایش کرد و سپس commit، تا سبب به روز رسانی گردش کاری پروژه شود.