Explore package dependencies
- dependencies - นอกจากพวก Lib ชาวบ้านที่เรา Ref มาใน Project เราแล้วยังรวมถึง Code ที่เอามา Include ใน Project เราด้วยนะ อันหลังหายากด้วย
- Why is dependency management needed?
- bug fixed
- enabling governance
- security scanning to use known vulnerabilities or exploits packages
- dependency management strategy
- Standardization - allows a repeatable, predictable process and usage that can be automated as well.
- Package formats and sources - stored in a centralized source + packaged มี format ของมันเอง (metadata)
- Versioning - เก็บ version ตาม code ที่ แก้ไขไป (Evolve)
- Note อันนี้ที่ผมเข้าใจ พวก Maven / Nuget หรือ NPM มันอาจจะเอาทุก strategy หรือยางอันมาทั้งหมด ?
- Understand source and package componentization
- Source componentization
- focused on source code
- Requires distributing the source code or the produced binary artifacts
- Package componentization
- wrapping + handling components (metadata)
- tracking and versioning packages
- Source componentization
- Scan your codebase for dependencies เพื่อมา Decompose ทำให้เพื่อลดขนาด codebase ลง และทำให้ Build ได้รวดเร็ว โดยมี Key ดังนี้
- Duplicate code
- High cohesion and low coupling
- Individual lifecycle - ต่อจาก high cohesion ถ้ารอบ Release ใกล่เคียงกันควรแยกออกจาก Codebase
- Stable parts - ไม่ค่อยแก้
- Independent code and components - code ที่ไม่เกี่ยวกับ Project หลัก อันนี้ควรแยกออกไป
- พอแยกได้แล้ว Refactoring + Design Pattern มาช่วยจบตรงนี้นึกถึง You Code as a Crime Scene
- Knowledge check: Explore package dependencies
Understand package management
- Explore packages
- Package ตัวที่รวม Component ต่างๆ ให้มี metadata เพื่อทำให้ง่ายกับการ Tracking + Versioning
- Publish - เอา Component ไปวางที่ Server กลาง
- Consume - คนใช้งาน
- ตัวอย่าง NuGet (.NET) / Maven (Java) / Docker Hub (Docker) / PyPi (Python) / NPM (JavaScript) เป็นต้น
- Package ตัวที่รวม Component ต่างๆ ให้มี metadata เพื่อทำให้ง่ายกับการ Tracking + Versioning
- Understand Package Feeds
- Package management - centralized place for distribution and consumption
- Package Feeds - ปกติจะเป็น URL + Key เพื่อที่จะ Publish (Upload) Package ขึ้นไป
- ปกติมี 2 แบบ
- Public
- Private (ใช้ภายใน) Self-Host - อย่าง Nexus หรือ SaaS - อย่าง Azure Artifacts / Azure Container Registry / Amazon Elastic Container Registry / GitHub Package เป็นต้น
ฝั่ง Consumer ที่ต้องการใช้งาน กำหนด package feeds เพื่อให้ Tools มันดึงลงมาใช้งาน
- Introduction to Azure Artifacts
- Package management - ของ Azure รองรับ NuGet packages / NPM packages / Maven / Universal packages / Python
- รองรับการทำ Public / Private Feed และ Control การเข้าถึงได้
- Lab 17: Package Management with Azure Artifacts
- Knowledge check: Understand package management
Migrate consolidating and secure artifacts
- artifact is a deployable component of your application
- ถ้ามีใช้ Package Management เจ้า อื่นๆ สามารถ Migrate มาใช้ Azure Artifacts ได้ โดยจะเก็
- แบบเดิม NuGet (.NET) / Maven (Java) / Docker Hub (Docker) / PyPi (Python) / NPM (JavaScript)
- หรือ จะทำ Universal packages - เอาพวก NuGet / Maven มาเก็บใน Format Universal packages แทน
- Secure access to package feeds
- Goal Trusted sources (ถ้ามี Package ปลอมขึ้นมา มันจะทำให้ความน่าเชื่อถือหมดไป) / Securing access / Securing availability
- Implement โดย Restricted access consumption / publishing
กำหนด Visibility + Role
- Azure Artifacts Role
- Reader: Can list and restore (or install) packages from the feed.
- Collaborator: Can save packages from upstream sources.
- Contributor: Can push and unlist packages in the feed. //Default Role ตอนสร้าง Azure Artifacts
- Owner: has all available permissions for a package feed.
- Examine authentication
- ถ้ามาจาก Azure DevOps จะผ่าน Azure AD อยู่แล้ว
- แต่ถ้าต่อออกข้างนอก Azure DevOps / Azure Artifacts แล้ว ใน Azure Pipeline ต้องใส่ตัว Service connection
- Knowledge check: Migrate consolidating and secure artifacts
Implement a versioning strategy
- Immutable packages - ถ้า publish ขึ้นไปแล้ว อย่าไปเปลี่ยนมันอีก บาง Tool มันห้ามเลยนะ
- Understand versioning of artifacts
- Major - อาจจะขยับมาจาก redesign of the component / Not guaranteed to be compatible กับของเก่าๆ
- Minor - changes can be backward compatible with the previous version
- Patch - flaw, bug, malfunctioning(ทำงานผิดปกติ) ของ component ที่ถูกแก้ไข
- semantic versioning นอกจาก Major.Minor.Patch ยังมี Text บางอันที่ช่วยให้สื่อความหมายชัดเจนต่อท้าย Patch ได้ เช่น 1.0.0-
rc1
โดยคำที่นิยม- pre-alpha
alpha
- กลุ่มผู้ใช้ภายในbeta27
- กลุ่มผู้ใช้จริงบางส่วน เพื่อรับ Feedback Early Adopterrc1
- Release Canidate- ถ้าสนใจการ Set Version ของ .NET ดู Blog นี้ได้ [.NET] กำหนด Version ตอน Build หรือ Pack
- ดูเพิ่มเติม Semantic Versioning 2.0.0 | Semantic Versioning (semver.org)
- release views ใน Azure Artifacts @{Viewname}
- @Local - package ทั้งหมด รวม prerelease ที่ download จาก upstream
- @Prerelease - version number
- @Release - packages that are considered official releases
- Default จะเป็น @Local
https://pkgs.dev.azure.com/{yourteamproject}/_packaging/{feedname}/nuget/v3/index.json --ถ้าต้องการดูเฉพาะ View ใส่ @{Viewname} https://pkgs.dev.azure.com/{yourteamproject}/_packaging/{feedname}@{Viewname}/nuget/v3/index.json
- Promote packages ย้ายข้าม View เช่น จาก @Local > @Prerelease > @Release โดยอาจจะดูจาก quality indicator
Note ตัว Package จะลบจาก Retention Policy - Best practices - กำหนดเอกสารภายในองค์กรชัดเจน / แต่ละ Repository/ฺBranch ต้องจับ Feed + @{Viewname} แค่อันเดียว
- Exercise - Promote a package
- Exercise - Push from the pipeline
- Knowledge check: Implement a versioning strategy
Introduction to GitHub Packages
- GitHub Package - ย้ายจากการ Publish จาก NuGet / NPM เป็นต้น ย้ายมาที่ GitHub แทนน โดยจะต้อง
- Publish Package
- เตรียม personal access token (PAT)
- แก้ไข Config เช่น NuGet ย้ายมาใช้ URL GitHub Package + PAT แทน
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <clear /> <add key="github" value="https://nuget.pkg.github.com/OWNER/index.json" /> </packageSources> <packageSourceCredentials> <github> <add key="Username" value="USERNAME" /> <add key="ClearTextPassword" value="TOKEN" /> </github> </packageSourceCredentials> </configuration>
dotnet nuget push "bin/Release/OctocatApp.1.0.0.nupkg" --api-key YOUR_GITHUB_PAT --source "github"
- Consume Package - แก้ไข Config ของแต่ละ Package ให้เรียบร้อย เช่น NuGet / NPM ตอน Build ถ้าถาม user/pass ใส่ลงไป หรือบางเจ้าอาจจะให้ใ่ Token แทน
- visibility and access permissions
- Delete and restore a package
- Knowledge check: Introduction to GitHub Packages
Reference
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.