[Jenkins] Controller and Agents Architecture

Jenkins Controller and Agents Architecture ถ้าใครไปอ่าน doc เก่าๆ Controller (Master) และ Agent (Slave)นะครับ แนวคิดของ Controller and Agents Architecture จะการ CI/CD ที่มีการ Scale-Out เพิ่มจำนวน Node ในที่นี้ Node คือ ตัว Jenkins เพื่อมารองรับกระจาย(Distributed) งานด้าน CI/CD ที่เพิ่มมากขึ้น จากความต้องการ Functional / Time to Market / Quality ยกตัวอย่าง เช่น การ Build และ Execute Unit Test เมื่อมีการ Commit & Push เข้ามาในแต่ละ Branch ครับ ยิ่งถ้ามีหลาย Branch ตัว Jenkins ภาระงานเพิ่มขึ้น ใน Jenkins Controller – ตัวกระจายงาน Agents / Node – ตัวที่ทำงาน ตามชิ้นงานที่ Controller ส่งมาครับ การสื่อสารระหว่าง Controller กับ Agents / Node หลักใช้วิธี SSH ครับ ตัว Controller จะส่ง remote.jar ไปยัง Agents ต่างๆ เพื่อสั่ง Jenkins ของเครื่องปลายทางอีกที แต่ในหลาย Platform มีวิธีพิเศษเพิ่มขึ้นมา เช่น Windows สามารถ WMI…

[.NET] เปิด Visual Studio หน้า Design UI ไม่ขึ้น เจอ Error NuGet process crashed and left an inaccessible lock file

Visual Studio

สำหรับ Blog นี้ ตอนแรกว่าจะไม่เขียนครับ เพราะมันมี Error Message ที่แจ้งชัดเจนอยู่แล้วครับ แต่มีคนถามส่วนตัว 5-6 ท่านและ เลยคิดว่าเขียนดีกว่า จะได้ Google ได้ง่าย เพราะเคสล่าสุดอาจารย์ที่ปรึกษามาถาม และอธิบายไปรอบนึง จากนั้นลูกศิษย์ก็มาถามอีกที … ปัญหา สร้าง Project ขึ้นมา เวลา Double-Click เพื่อดูหน้า Design ระบบแจ้ง Error ดังรูป สาเหตุ จาก Error Message Unable to obtain lock file access on ‘C:\Users\{yourusername}\AppData\Local\Temp\NuGetScratch\lock\a5caae1e4c2b8a1b973a1eb9525c64844d6ecb11’ for operations on ‘C:\Users\{yourusername}\AppData\Roaming\NuGet\NuGet.Config’. This may mean that a different user or administrator is holding this lock and that this process does not have permission to access it. If no other process is currently performing an operation on this file it may mean that an earlier NuGet process crashed and left an inaccessible lock file, in this case…

สรุปงาน Azure Native Meetup #1 (DevOps)

ระหว่างทำงานไปช่วงวันหยุด มีแวะไปฟังงานนี้ครับ เหมือนเห็น Link แว็บๆในกลุ่ม Openchat เลยเข้ามาฟังเรื่อยๆ ระหว่างหา Bug ไป เลยเข้า Track DevOps ยาวเลย Track 1: Getting Started Azure Cognitive Service Container (Teerasej Jiraphatchandej) Azure Cognitive Service AI Service ที่มี API ที่ให้เราพร้อมใช้งาน (Ready to Use) โดยมี API / SDK ช่วย หรือจะ Custom ผ่าน Portal ก็ได้ Model ที่ได้ มันก็จะตาม Responsible AI (ศีลของ AI ชอบคำนี้ 555+) Cognitive ประกอบด้วย อะไรบ้าง – Vision (ตามอง) / Text Analysis / Speech (เสียง) / Decision Making ค่าใช้จ่าย pay per use (ตามจำนวนครั้งที่ใช้) วัดความมั่นใจมาจาก Confident Score Azure Cognitive Container Azure Cognitive Service ในรูปแบบ Container เอามา Image มา Deploy On-Premise เองได้ เอามาใช้กรณีที่ไม่อยากส่งข้อมูลไปนอกข้างนอกได้ แก้ปัญหาเรื่อง Privacy ตอบโจทย์ PDPA / Spec & Performance…

[Jenkins] รวม Tools เจ๋งๆ ของ VSCODE ที่มาช่วยจัดการ Jenkinsfile นั้นง่ายขึ้น

jenkins

สำหรับวันนี้ ผมมี Extensions ของ VSCODE ที่มาแนะนำ เพื่อช่วยให้เราสามารถจัดการ JenkinsFile ให้มันง่ายขึ้นครับ ดังนี้ครับ Jenkinsfile – Visual Studio Marketplace Jenkins Pipeline Linter Connector – Visual Studio Marketplace อธิบายเต็มๆ มาดูต่อจากนี้ได้เลยครับ Jenkinsfile คือ อะไร ? การเขียน Code เพื่อสั่งให้ตัว Jenkins มันทำงาน โดยอิงจากภาษา Groovy (Java base) เป็นหลักครับ แต่ถ้าต้องการใช้ภาษาอื่นๆ สามารถลง Plugin มาเสริมได้ครับ พอทำแบบนี้ Step การทำ CI/CD ถูกจัดเก็บเป็น Code ทำให้ และเอาไปฝาก Repository ของงานเราได้เลยครับ ข้อดี Code ไปไหน Step CI/CD ไปด้วยกันด้วย ไม่ต้องมา Config ใหม่ Keyword ในงานกลุ่มนี้ คือ Pipeline as Code ครับ Jenkinsfile [formerly JenkinsFile Support]  Plugin ตัวนี้ เป็นตัวที่ช่วยให้เราสามารถเขียน JenkinFile ได้ง่ายขึ้น เพราะมีตัวที่ช่วย syntax highlighting snippets completion diagnostics การติดตั้ง Search จากหน้า Extension ของ VSCode ได้เลยครับ Before – ดูอย่างยาก After – syntax highlighting ดูง่าย ต้องมาจำ…

[PODMAN] rootless container error “Disk quota exceeded”

วันนี้เป็นปัญหาที่น่าปวดหัวเหมือนกันหลังจากใช้ Podman ไป 1 ปีนิดๆครับ อยู่ลูกค้าแจ้งปัญหามาว่า Disk quota exceeded มาจากไหน ? เดี๋ยวต้องไปหาที่มาเพิ่ม Solution ตรวจสอบก่อนว่า maxkey มีค่าเท่าไหร่ ด้วยคำสั่ง ลองดูจำนวนปัจจุบันสิ มีค่าเท่าไหร่ (ต้อง Login เข้าไป และรันแยก User นะ เพราะ ตัวระบบมันเก็บค่าแยก Per User (Ref: sysctl – Is kernel.keys.maxkeys per user or per key?) ในกรณีที่ค่าของมันเกิน maxkeys เช่น ต้องไปเพิ่ม maxkeys ต้องใช้ user root นะ ด้วยคำสั่ง นอกจากเพิ่ม maxkeys แล้ว ถ้าลองไปดูใน API keyrings(7) – Linux manual page (man7.org) มันจะมี maxbytes ด้วยนะ อาจจะเพิ่มได้ด้วยกันเลย แต่การเพิ่มมันจะใช้ Memory เพิ่ม ต้องระวังด้วย ลองปรับ maxbytes ต้องใช้ user root นะ ด้วยคำสั่ง ** 10485760 bytes = 10 MB ปรับไปแล้วอย่าลืมเอา maxkeys * maxbytes เดี๋ยวเพิ่มไปแล้ว Server RAM ไม่พอ อย่างของผมปรับ maxkeys = 400 maxbytes = 10485760 // 10 MB ใช้…

[C#] Dapper Error connection assigned to the command is in a pending local transaction. 

ช่วงนี้มีไปช่วยน้องในทีมแก้ปัญหาระบบซื้อขาย Bond โดยน้องเอา Service เดิมที่เคยทำไว้ในผูกกันเป็น Flow ใหม่ครับ แล้วทีนี้เจอ Error หลังจากลองไล่ดู Code พบว่าเป็นส่วนคำสั่งที่เรียก Dapper ให้มันช่วย Query ให้ เลยเพิ่มตัว Transaction ใส่ครอบเข้าไปครับ

[CR] Starbucks Mayongchid Juice

ราคา 155 บาท รสชาติ หวานอมเปรี้ยว คิดว่ากดสดๆ น่าจะได้รสชาติมากกว่า สามารถเพิ่ม Espresso Shot ได้ด้วย ส่วนตัวชอบ Valencia มากกว่าครับ หวานกลมกล่อมมากกว่าครับ ถ้าอยากดู Review กลุ่มเมนูน้ำส้ม ดูจาก Tag ได้เลยครับ พลังงาน 140 Kcal ครับ Reference (พลังงานของแต่ละเมนู) ตามรูปเลยครับ

[SECURITY] Password Spraying คือ อะไร

ช่วงนี้ผมได้ลองศึกษาพวก Cloud มันจะมีด้าน Security ด้วยนะ และ Feature ที่รองรับ 1 2 3 4 ผมมาเ๊ะใจคำนึงนะ Password Spraying มันดู้ป็นศํพท์ใหม่ที่ Dev อย่างพวกเราไม่น่าจะรู้จักมาก่อนเลย Password Spraying คือ อะไร การใช้รหัสผ่านทีละตัวใน List ทีมี อาจจะเป็น Default Password หรือ Password ที่นิยมใช้กัน 10 อันดับแรก มาไล่โจมตีบัญชี (account) ที่มีอยู่ ที่ละบัญชี ถ้าผ่านก็จดบันทึกไว้ และเมื่อไล่ครบทุกบัญชีแล้ว จึงค่อยใช้รหัสผ่านตัวต่อไป มาลองโจมตีต่อ ด้วยวิธีการแบบนี้ มันจึงป้องกันยาก เพราะ ถ้าอีกจากกฏแบบเดิมๆ มันจะมี Rule ประมาณว่าลองผิด 3 ครั้ง แบน IP 1 ชั่วโมง แต่พอมาใช้ Password Spraying มันผิดรอบเดียวเอง ระบบไม่สามารถมาดักได้ครับ ต่างกับวิธีการเดิมๆ Brute force อย่างไร ? Brute force เน้นโจมตีบัญชีเดียวด้วย Password ที่มีทั้งหมด ถ้ามาในลักษณะนี้ผู้ดูแลอาจจะเห็น Log แปลกๆ เช่น บัญชีเดียวกันมีการใส่ Password ผิดมา 10 รอบ สามารถ Block ได้ครับ มัน Brute force แหละ แต่เปลี่ยนวิธีคิด ทำให้จับได้ยากขึ้น Reference Password Spraying Attack | OWASP Foundation Password Spraying: What to Do and…

[IIS] ASP.NET Core – HTTP Error 500.19 – Internal Server Error (Error Code 0x8007000d)

วันนี้มาช่วยแก้ปัญหาที่ Site ลูกค้า เนื่องจากเครื่องที่ติดตั้ง Migration Tools (ASP.NET Core 3.1) ที่ทำมาตั้งแต่ปี 2019 พังไปแล้วครับ เลยได้ต้องไปช่วยดูเคสนิดหน่อยหลังจากที่ IT ของลูกค้าได้ลองติดตั้งครับ เมื่อทดสอบพวก Error 500.19 (Error Code 0x8007000d) ครับ ตรวจสอบกันก่อน สิ่งที่ผมสงสัย IIS ไม่รู้จัก Module AspNetCoreModuleV2 โดยการตรวจสอบให้ไปที่ Internet Information Service (IIS) Manager เลือก Site ที่เกิดปัญหา จากนั้นลอง Click ที่ Module ถ้า Error ตามรูป ใช่เลยครับ การแก้ไข AspNetCoreModuleV2 ติดตั้ง ASP.NET Core Runtime (Hosting Bundle) – ต้องลงแบบ Host Bundle เพราะมี IIS runtime support ครับ หลังจากติดตั้งเสร็จ ลอง Restart IIS และตรวจสอบ Internet Information Service (IIS) Manager เลือก Site ที่เกิดปัญหา จากนั้นลอง Click ที่ Modules จะต้องมี AspNetCoreModuleV2 ขึ้นมาแล้วครับ ทดสอบเข้า Site ได้เลยครับ หลายคนอาจจะอ่านแล้วสงสัยว่า อันนี้ทำไมไม่ขยับไปเป็น container เคยลองแล้วครับ แต่ Environment ลูกค้า ขอฟรีทั้ง Tools และไม่มีตั้งงบเรื่อง Server ของ Tool นี้ เลยได้…