สร้าง Cleanup Policy บน Sonatype Nexus Repository

พอดีเจอปัญหาว่าตัว Nexus มันไม่ Clear เนื่อที่ในส่วนของ Docker ที่ทำไว้ ทำให้ Disk VM มันบวมขึ้นมาเรื่อยๆ และใช่ครับมันเป็น Bug ตั้งแต่ 3.82 "https://community.sonatype.com/t/issue-with-cleanup-policies-preview-displays-artifact-but-they-are-not-cleaned-when-the-cleanup-task-run/14960/11"

ก็เลยต้อง Update เป็น Version 3.91.1 ใช่ครับเจอปัญหาใหม่มาแทน เพราะเจ้า Sonatype Nexus มันลด Repository Limit จาก 100,000 Components เหลือเพียง 40,000 มีคนบ่นมากมาย "Why decreasing component and request limits?" ย้ายไปให้จ่ายเงินนี่แหละ

สำหรับทางแก้มีหลายทางครับ ย้ายไปใช้เจ้าอื่น / ขึ้น nexus อีกตัว หรือ Cleanup Policy สำหรับ Blog นี้ของเลือก Clean Up Policy และมา Recap Step ไว้ด้วย

1. Create Cleanup Policy

ใช้ User ที่มีสิทธิ Admin จากนั้นทำตามขั้นตอนเลยครับ

  • เข้ามาที่ส่วน Admin Panel > Setting > Repository > Create > Cleanup Policy
  • หน้าจอ Cleanup Policy เราสามารถเลือกได้ ว่าจะเอา All Component หรือ ตามประเภท Package ที่ต้องการได้ครับ สำหรับ Rule ที่ใช้ได้กับทุก Package
    - Component Age : ตามอายุของ Package ที่เอาเข้ามา เช่น Package อายุมากกว่า 360 วัน ให้เอาออก
    - Component Usage : ตามจำนวนวันที่ได้ Download มาล่าสุด เช่น 120 วันที่ไม่มีการ Download ให้เอาออก
  • นอกจากนี้มี ถ้าเลือก Package เฉพาะ เช่น NuGet จะมี Option เพิ่มขึ้นมา ตาม RegEx Pattern (Asset Name Matcher เช่น เราอาจจะเอา Package ที่เป็น ลบ Package ที่เป็น Pre-Alpha / Beta ออกไป

ที่ บ จะมีปัญหาคนชอบนำ Package Pre-Alpha / Beta เอาไปส่งลูกค้าขึ้น Prod ผมเลยปรับให้ตัว CI มัน Step เลยเฉพาะลงไปใน Package ด้วย เช่น 3.4.1-Pre-Alpha287 เติม 287 เข้าไป เพราะมีปัญหาตกลงกันไม่ได้เรื่องว่าใครจะเป็น owner ระหว่างกลุ่มคนที่ทำ Common Package กับกลุ่มคนที่เอาไปใช้งาน เลยต้องทำให้มัน Unique เพราะ ถ้า Prod ลูกค้าพังจะได้ตามถูกครับ

  • หลังจากกำหนด Policy เสร็จ เราสามารถลอง Preview ได้ครับ ตาม Repository ที่สนใจ

2. Apply Cleanup Policy

หลังจากที่เราได้กำหนด Clean Up Policy ที่นี้มา Apply กับ Repository ของเรา ซึ่งหลักๆในตัว Sonar เราจะมี Repository 2 แบบ

  • Proxy ทำหน้าที่เป็น Cache และเป็นทางผ่านไปยัง Repo หลักนอกองค์กรอย่าง
    - dotnet > nuget จะไปที่ nuget.org
    - java > maven ไปที่ mvnrepository.com
    - ts/js > npm ไปที่ npmjs.com เป็นต้น
  • Hosted เราตั้งขึ้นมาเองครับ เอา Common Package ขึ้นมา และแชร์ร่วมกันครับ

สำหรับขั้นตอนมี ดังนี้

  • เข้ามาที่ส่วน Admin Panel > Setting > Repository > Repositories
  • เลือก Repository และกด Edit ขึ้นมาครับ และเลือก Cleanp Policy ที่กำหนดไว้ครับ และกด Save

หลังจากนั้นก็รอครับ ปกติมี Task ส่วน Cleanup ลบ Package ตาม Cleanup Policy และ Task สำหรับ Compact Claim พื้นที่กลับมาครับ

Subscribe