จดการรัน Cypress บน Jenkins ไว้อีกซักนิด
รันผ่าน Docker สะดวกสุด
ในการรัน Cypress บน CI/CD ถ้าจะให้ไม่ต้องเสียเวลาเซ็ตอัพอะไรมากมาย เราก็ใช้ Docker เป็น agentในการรัน
คราวนี้ถ้าไปดูในเอกสาร Cypress มี Docker image ให้แบบ official ให้ 3 ตัวตามนี้
เนื่องจากไม่แน่ใจว่าจะเอาตัวไหนดี เลยเลือก cypress-included จะได้ครบ ๆ (เดี๋ยวค่อยมาปรับกันอีกที)
รัน Cypress แบบ Headless
ก่อนอื่น เวลาเรารัน Cypress บน CI เราจะไม่มี UI ดังนั้นเราจะรันด้วย
cypress run
ซึ่งมันจะรันแบบไม่เปิด UI ขึ้นมาได้ (เรียกว่า headless) เพื่อความสะดวกเราก็ไปเพิ่ม cypress run ที่ package.json ก็จะได้ประมาณนี้
เตรียม Jenkinsfile
ปกติ Jenkins เราสามารถรับ Job ได้หลายแบบ แต่แบบที่น่าจะจัดการง่ายสุดคือการเขียน Jenkinsfile ขึ้นมารัน pipeline โอเคมาเริ่มเขียน Jenkinsfile กัน
เทค 1: รันปุ๊บ… ค้าง
เพราะ entrypoint ของ cypress-included เหมือนจะทำงานไม่ได้ และเราก็อยากแค่รันตัว test:ci เราเท่านั้น ดังนั้นก็จัดการ disable entrypoint ซะ
เทค 2: ก็ยังพัง
เพิ่ม args เพื่อ disable entrypoint แล้วรัน Job อีกที รอบนี้ทะลุไปรัน test:ci แล้วแต่ว่า …
เท่าที่ลองค้นดูปรากฎว่าต้องรันด้วย root มันถึงจะไปหา cache ได้ถูก ==’ เอาลองใหม่
เทค 3 ได้ซักที
เพิ่มเติมอีกนิด
สังเกตุว่าตัว cypress-included มันพ่นอะไรแปลก เช่น [0m ([4m[1mRun Starting[22m[24m)[0m มันคือโค้ดสีบน Terminal ถ้าเราอยากให้มันสวย ๆ ก็ใส่ ansiColor ซะ ก็จะดูดีแบบนี้
Refs:
- https://cypress.slides.com/cypress-io/cypress-on-ci
- ถ้าจะรันแบบ included-as-non-root ลองดูตามตัวอย่างนี้ (ยังไม่ได้ลอง)
- ** (Edit) ตอนแรกคิดว่าไม่ต้อง npm install แต่พอลองเช็คแล้วที่มันทำได้เพราะเคยทดลอง npm install มาก่อนมันเลย cache ไว้ แปลว่าถ้ามาใหม่ ๆ ก็ต้อง npm install ก่อน
จบปิ๊ง ~