[.NET] ทำ NuGet ใช้เองภายในองค์กร

หลายคนอาจจะสงสัยในเมื่อ Source Code เป็นของเราเองทำไมต้องทำเป็น Nuget Package ด้วยหละ มันมีเหตุผลของมัน ดังนี้ครับ

  • จัดการได้ง่าย และสะดวกแก่การติดตาม เพราะ แยกเป็นเวอร์ชันอย่างบชัดเจนครับ
  • ติดตั้งได้ง่าย แทนที่จะเอาไฟล์ .dll มาอ้างอิงใน Project หลัก เราสามารถอ้างอิงตัว Nuget Package แทนครับ และเมื่อมีเวอร์ชันใหม่ เราสามารถใช้ Nuget Package Manager จัดการ Update เวอร์ชันได้ทั้ง Solution เลยครับ
  • แยกส่วน ทำให้สามารถทดสอบในระดับย่อย (Unit Test) ได้ง่ายครับ

ถ้าจะทำ NuGet ใช้ในองค์กรเอง อันนี้เตรียมพร้อมอย่างไรบ้าง

  • Nuget Server - ก่อนครับ ซึ่งมีหลายหลายค่ายครับ
    • ถ้าง่ายหน่อยใช้ MS Team Foundation Server
    • หรือใช้ NuGet.Server เพียงแค่เพิ่ม NuGet Package นี้เข้าไป จากนี้ Build และ Deploy ได้ NuGet Server เลยครับ
    • หรือใช้ Nexus Repository Server ฟังไม่ผิดครับ ของพวก Maven แหละครับ แต่เราไปเกาะอยู่ด้วยครับ 55 โดยการติดตั้งเอา Docker Image มา Run จากนั้น Config ค่านิดหน่อยครับ
    • หมายเหตุ สำหรับ NuGet.Server และ Nexus Repository Server ถ้าว่างเดี๋ยวผมเขียน Blog แยกครับผม
  • Publish เข้า Nuget Server อันนี้ง่ายกว่าอีกครับ เพียงแค่มี nuget.exe พอครับ หรือถ้าใช้ลงพวก Runtime สำหรับ .NET Core มีคำสั่ง dotnet เข้ามาด้วยครับ ซึ่งมีความสามารถเหมือนกัน nuget.exe ทุกอย่างครับ

เตรียม Publish Code เข้า NuGet Server ครับ

  • สำหรับในส่วนนี้ต้องมี NuGet Server ในองค์กรก่อนนะครับ หรือจะลองทดสอบกับ NuGet.org ได้เหมือนกันครับ สามารถอ่าน Reference ได้เพิ่มเติมครับผม
  • มาลอง Publish Code กันครับ สมัยนนี้ทุกคนคงไม่ได้ Build มือกันแล้วนะครับ ของไปในแนวทาง Script และกันครับ โดยสามารถเอาคำสั่งมาทดสอบใน Jenkins Pipeline ได้เลยครับ หรือ CI Server เจ้าอื่นๆครับ

มาลอง Publish Code

  • สร้าง NuGet Package ด้วยคำสั่ง dotnet pack
    • กำหนดชื่อไฟล์ Solution (กรณีที่ Solution นั้นรวม Project ที่ใช้สำหรับ NuGet อยู่แล้วทั้งหมด) หรือจะกำหนดราย Project โดยใช้ .csproj ก็ได้ครับ
    • รูปแบบการ Publish NuGet -c / -o : กำหนด Build แบบ Release แบบ Nuget
    • และ มีการกำหนดคุณสมบัติ (property) หรือ -p อย่างตัวอย่างคำสั่งเป็นการกำหนดเวอร์ชันของ NuGet Package ครับ
  • ตัวอย่างคำสั่ง dotnet pack ครับ
dotnet pack <<.csproj / .sln >> -c Release -o nuget -p:PackageVersion= << Your Version>>
  • ถ้าหากต้องการเตรียม NuGet Package ให้คนอื่นสามารถ Debug ได้ต้อง เพิ่มอีก 2 Option ครับ ได้แก่
    • --include-source : บอกว่าให้ใส่ Source Code ลงไปด้วยครับ
    • --include-symbols : บอกว่าให้ใส่ Program Database (.pdb) เพื่ออ้างอิงลงไปสำหรับการ Debug ครับ
  • ตัวอย่างคำสั่ง dotnet pack ที่เตรียม NuGet Package แบบ Debug ได้ด้วยครับ
dotnet pack ds.common.sln -c Release --include-source --include-symbols -o nuget -p:PackageVersion=1.0.9
  • เมื่อได้ตัว NuGet Package แล้ว ขั้นตอนถัดไป Publish NuGet Package เข้าไปยัง NuGet Server ครับ โดยสิ่งที่ต้องมี
    • API KEY : เอาไว่ในยืนยันตัวตน โดย Generate ได้จาก NuGet Server
    • NuGet Server IP : เอาไว้บอกปลายทางครับ ว่าจะส่ง NuGet Package เข้าไปยัง Server ไหน IP อะไรครับ
  • มาดูคำสั่งกันบางครับ โดยสามารถใช้คำสั่ง dotnet push โดยมีรูปแบบ ดังนี้
dotnet nuget push ".\\nuget\\*.nupkg" --api-key <<Your API KEY>>  --source <<Your NuGet Server>>
  • ตัวอย่างคำสั่ง dotnet pack ที่ได้ลองใช้งานจริงครับ
dotnet nuget push ".\\nuget\\*.nupkg" --api-key 0a538810-31f1-3ader-bf7d-3b0sQ92we052 --source http://192.168.0.15:8081/repository/nuget-hosted/

Reference


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts to your email.