Cypress — Run Cypress บน Jenkins

tumit
odds.team
Published in
2 min readJan 27, 2020

จดการรัน Cypress บน Jenkins ไว้อีกซักนิด

รันผ่าน Docker สะดวกสุด

ในการรัน Cypress บน CI/CD ถ้าจะให้ไม่ต้องเสียเวลาเซ็ตอัพอะไรมากมาย เราก็ใช้ Docker เป็น agentในการรัน

คราวนี้ถ้าไปดูในเอกสาร Cypress มี Docker image ให้แบบ official ให้ 3 ตัวตามนี้

https://cypress.slides.com/cypress-io/cypress-on-ci#/

เนื่องจากไม่แน่ใจว่าจะเอาตัวไหนดี เลยเลือก cypress-included จะได้ครบ ๆ (เดี๋ยวค่อยมาปรับกันอีกที)

รัน Cypress แบบ Headless

ก่อนอื่น เวลาเรารัน Cypress บน CI เราจะไม่มี UI ดังนั้นเราจะรันด้วย

cypress run

ซึ่งมันจะรันแบบไม่เปิด UI ขึ้นมาได้ (เรียกว่า headless) เพื่อความสะดวกเราก็ไปเพิ่ม cypress run ที่ package.json ก็จะได้ประมาณนี้

npm run test:ci ถ้าผ่านก็จะได้ประมาณนี้

เตรียม Jenkinsfile

ปกติ Jenkins เราสามารถรับ Job ได้หลายแบบ แต่แบบที่น่าจะจัดการง่ายสุดคือการเขียน Jenkinsfile ขึ้นมารัน pipeline โอเคมาเริ่มเขียน Jenkinsfile กัน

run ด้วย cypress-included image และ npm run test:ci
สร้าง Job เพื่อรัน pipeline

เทค 1: รันปุ๊บ… ค้าง

เหมือนจะมีปัญหาที่ entrypoint

เพราะ entrypoint ของ cypress-included เหมือนจะทำงานไม่ได้ และเราก็อยากแค่รันตัว test:ci เราเท่านั้น ดังนั้นก็จัดการ disable entrypoint ซะ

เทค 2: ก็ยังพัง

เพิ่ม args เพื่อ disable entrypoint แล้วรัน Job อีกที รอบนี้ทะลุไปรัน test:ci แล้วแต่ว่า …

ติดเรื่องหา cache ไม่เจอ

เท่าที่ลองค้นดูปรากฎว่าต้องรันด้วย root มันถึงจะไปหา cache ได้ถูก ==’ เอาลองใหม่

เทค 3 ได้ซักที

เย้ Finished: SUCCESS

เพิ่มเติมอีกนิด

สังเกตุว่าตัว cypress-included มันพ่นอะไรแปลก เช่น [0m (Run Starting) มันคือโค้ดสีบน Terminal ถ้าเราอยากให้มันสวย ๆ ก็ใส่ ansiColor ซะ ก็จะดูดีแบบนี้

ใส่ option ansiColor(‘xterm’)
สวยงามตามท้องเรื่อง

Refs:

  • https://cypress.slides.com/cypress-io/cypress-on-ci
  • ถ้าจะรันแบบ included-as-non-root ลองดูตามตัวอย่างนี้ (ยังไม่ได้ลอง)
  • ** (Edit) ตอนแรกคิดว่าไม่ต้อง npm install แต่พอลองเช็คแล้วที่มันทำได้เพราะเคยทดลอง npm install มาก่อนมันเลย cache ไว้ แปลว่าถ้ามาใหม่ ๆ ก็ต้อง npm install ก่อน

จบปิ๊ง ~

--

--