สภาพแวดล้อมการพัฒนาที่อิงกับนักเทียบท่านี้มีไว้สำหรับผู้มีส่วนร่วมใหม่ของคำเตือนของเจนกินส์และปลั๊กอินครอบคลุมเพื่อลดเวลาเริ่มต้นขึ้น ประกอบด้วยส่วนต่อไปนี้:
ฉันนำเสนอสภาพแวดล้อมการพัฒนานี้ในการประชุมทางออนไลน์ของเจนกินส์ที่บันทึกไว้ในเดือนมกราคม 2565
สภาพแวดล้อมการพัฒนาได้รับการทดสอบบน MacOS, Ubuntu Linux (ในเครื่องเสมือนที่ทำงานบน MacOS) และ Windows ยินดีต้อนรับคำขอดึงเสมอ
เครื่องมือเวอร์ชันล่าสุดต่อไปนี้:
นอกจากนี้จำเป็นต้องใช้เครื่องมือรุ่นล่าสุดต่อไปนี้:
หากเกิดข้อผิดพลาดให้สังเกตคำแนะนำการแก้ไขปัญหาด้านล่าง สำหรับผู้ใช้ Windows: ใช้ Git Bash เพื่อดำเนินการสคริปต์เชลล์
./bin/clone-repos-https.sh (หรือ ./bin/clone-repos.sh หากคุณได้ตั้งค่าคีย์ SSH ใน GitHub แล้ว) คุณต้องรอจนกว่าการสร้างจะประสบความสำเร็จก่อนที่จะเปิด Intellij มิฉะนั้น Intellij จะไม่พบคลาสที่สร้างขึ้นทั้งหมด ครั้งแรกที่ผู้ใช้ Maven ต้องรอสองสามนาทีจนกว่าจะดาวน์โหลดการพึ่งพาทั้งหมดจาก Maven Centralwarnings-ng-plugin-devenv./bin/jenkins.sh คำสั่งนี้สร้างภาพ Jenkins Docker ดาวน์โหลดปลั๊กอินที่ลงทะเบียนทั้งหมดและเริ่มต้นพื้นที่ทำงานของ Jenkins ด้วยงานบางอย่าง ต้องใช้เวลาไม่กี่นาที (ดูขั้นตอนที่ 9) หากการดาวน์โหลดทั้งหมดประสบความสำเร็จ แต่การติดตั้งล้มเหลวเนื่องจากข้อผิดพลาดให้แก้ไขและเรียกใช้งาน mvn -V -U -e install –DskipTests เพื่อลองติดตั้งเท่านั้น
หากข้อผิดพลาด "บรรทัดคำสั่งยาวเกินไป" เกิดขึ้นดำเนินการตามขั้นตอนต่อไปนี้:
@argfile (Java9+)หากการทดสอบล้มเหลวเนื่องจากการหมดเวลาทดสอบเจนกินส์ให้ดำเนินการตามขั้นตอนต่อไปนี้:
-Djenkins.test.timeout=1000 สิ่งนี้จะเพิ่มขีด จำกัด การหมดเวลาเป็น 1,000 วินาที คุณสามารถใช้เชลล์สคริปต์ง่ายๆ ( ./bin/clone-repos.sh ) เพื่อโคลนและสร้างโมดูลในขั้นตอนเดียว สคริปต์ตรวจสอบโมดูลต่อไปนี้โดยใช้โปรโตคอล Git SSH สิ่งนี้ต้องการให้คุณลงทะเบียนคีย์สาธารณะของคุณใน GitHub หากคุณไม่มีปุ่มใน GitHub คุณสามารถใช้สคริปต์ ./bin/clone-repos-https.sh ที่ใช้โปรโตคอล HTTPS
เมื่อคุณวางแผนที่จะจัดทำคำขอดึงสำหรับหนึ่งในปลั๊กอินที่คุณต้องการเพื่อสร้างส้อมของที่เก็บและทำการเปลี่ยนแปลงทั้งหมดในส้อมนี้ ฉันสร้างเอกสารการทำงานร่วมกันของ GitHub ในโครงการสไตล์การเข้ารหัสของฉัน
Intellij (Ultimate) เป็นสภาพแวดล้อมการพัฒนาที่ได้รับการสนับสนุนหลักสำหรับปลั๊กอินคำเตือน โครงการที่กำหนดไว้ล่วงหน้าจะถูกเก็บไว้ในโฟลเดอร์ .idea idea ที่อ้างอิงโมดูลทั้งหมดของปลั๊กอินคำเตือน โครงการนี้มีค่าที่ตั้งไว้ล่วงหน้าของสไตล์การเข้ารหัสของฉันและการกำหนดค่าที่เป็นประโยชน์อื่น ๆ
ควรใช้ IDE อื่น ๆ (Eclipse, NetBeans, Visual Studio Code) เช่นกัน
ใช้การกำหนดค่า Intellij Run ที่ให้ไว้ All in [module-name] เพื่อเรียกใช้หน่วยและการทดสอบการรวมของโมดูลที่เกี่ยวข้อง การกำหนดค่าเหล่านี้ได้รับการกำหนดค่าไว้แล้วเพื่อบันทึกความครอบคลุมสาขาของแพ็คเกจโมดูลที่เกี่ยวข้อง (ใช้ Run with Coverage )
ก่อนที่คุณจะสามารถดีบักการเปลี่ยนแปลงของคุณก่อนอื่นคุณต้องค้นหาว่ารหัสของคุณกำลังทำงานอยู่ที่ไหน: บนคอนโทรลเลอร์หรือบนตัวแทน? หากคุณไม่แน่ใจให้เรียกใช้ Debuggers ระยะไกลทั้งสองตั้งเบรกพอยต์และรอให้ดีบักเกอร์ที่เกี่ยวข้องหยุด
Docker Compose Configuration เริ่มต้นคอนโทรลเลอร์ของ Jenkins โดยอัตโนมัติในโหมด 'Debug' เช่นมันกำลังฟังคำขอการดีบักระยะไกล หากรหัสของคุณทำงานในคอนโทรลเลอร์คุณจะต้องแนบดีบักเกอร์ระยะไกลที่ localhost:8000 (แมปกับพอร์ตเดียวกันในคอนเทนเนอร์ Docker) ใช้การกำหนดค่าการกำหนดค่าการดีบัก Jenkins Controller (Remote Debugger) ที่ให้ไว้เพื่อเชื่อมต่อดีบักเกอร์ใน Intellij
การกำหนดค่า Docker Compose ยังเริ่มต้น Agent Jenkins โดยอัตโนมัติในโหมด 'debug' เช่นมันกำลังฟังคำขอการดีบักระยะไกล แนบดีบักเกอร์ระยะไกลที่ localhost:8001 (แมปกับพอร์ตเดียวกันในคอนเทนเนอร์ Docker) เพื่อทำการดีบักรหัสที่ทำงานบนเอเจนต์ ใช้การกำหนดค่าการดีบัก Jenkins Agent (Remote Debugger) ที่ให้มาเพื่อเชื่อมต่อดีบักเกอร์ใน Intellij
การทดสอบ UI สามารถเริ่มต้นได้โดยใช้ UI Tests [module] (Firefox) หรือ UI Tests [module] (Chrome) โปรดทราบว่าตัวเรียกใช้งานทั้งสองต้องการการติดตั้งไดรเวอร์ซีลีเนียมที่สอดคล้องกัน หากไดรเวอร์เหล่านี้ไม่ได้ติดตั้งใน /opt/bin บนเครื่องในเครื่องของคุณคุณต้องปรับการกำหนดค่าตัวเรียกใช้งานเพื่อให้ตรงกับการตั้งค่าของคุณ
การทดสอบ UI ทั้งหมดจำเป็นต้องดำเนินการภายในวิชาที่กำหนดภายใต้การทดสอบ (เช่นเจนกินส์ภายใต้การทดสอบ, JUT), ดูโครงการทดสอบการตอบรับการตอบรับสำหรับรายละเอียดเพิ่มเติม
สภาพแวดล้อมการพัฒนานี้มีการติดตั้ง Jenkins ที่กำหนดเองซึ่งคุณสามารถปรับใช้ปลั๊กอินที่ปรับเปลี่ยนได้เพื่อให้คุณสามารถเห็นการเปลี่ยนแปลงของคุณโดยตรงในงานที่กำหนดค่าล่วงหน้าบางอย่างที่ใช้ปลั๊กอินเหล่านี้
เริ่มต้นคอนโทรลเลอร์ Jenkins ที่ให้ไว้ในโครงการนี้ (คุณต้องติดตั้ง Docker และ Docker-compose) เปิดเทอร์มินัลและเรียกใช้ ./jenkins.sh ในโฟลเดอร์ระดับบนสุด คำสั่งนี้เป็น wrapper สำหรับ docker-compose up : ใช้การตั้งค่าผู้ใช้และกลุ่มที่เหมาะสมเพื่อให้การอนุญาตของปริมาณ Docker สำหรับโฟลเดอร์ Home Jenkins ได้รับการตั้งค่าอย่างถูกต้อง คำสั่งนี้สร้างคอนเทนเนอร์ Docker สำหรับคอนโทรลเลอร์ Jenkins และอีกหนึ่งสำหรับตัวแทน Java สิ่งนี้จะต้องใช้เวลาสักครู่เมื่อเรียกว่าครั้งแรกเนื่องจากภาพนักเทียบท่าจะถูกแต่งขึ้น หลังจากสร้างภาพแล้วคอนเทนเนอร์สองตู้ต่อไปนี้จะเริ่มขึ้น:
จากนั้นคุณสามารถเปิดเจนกินส์ได้ที่ URL http: // localhost: 8080/ ใช้ข้อมูลรับรองต่อไปนี้เพื่อเข้าสู่ระบบในฐานะผู้ดูแลระบบ:
ไดเรกทอรีโฮมเมดของคอนโทรลเลอร์เจนกินส์ (Jenkins_Home) ติดตั้งเป็นปริมาตรนักเทียบท่า เช่นสามารถมองเห็นได้บนโฮสต์เป็นไดเรกทอรีปกติที่ ./docker/volumes/jenkins-controller docker/volumes/jenkins-controller มันจะอยู่รอดเซสชันและสามารถเปลี่ยนแปลงได้โดยตรงบนโฮสต์ดูเอกสารอย่างเป็นทางการสำหรับรายละเอียด สิ่งนี้ช่วยในการตรวจสอบไฟล์ที่สร้างโดยคอนโทรลเลอร์เจนกินส์
เนื่องจากปัญหาประสิทธิภาพในปลั๊กอิน DSL งานของเจนกินส์การตั้งค่าอินสแตนซ์เจนกินส์ใหม่จึงช้ามาก ดังนั้นจึงเหมาะสมที่จะลบส่วนการกำหนดค่าของงานของไฟล์ jenkins.yaml ของคุณหลังจากสร้างงานแล้ว คุณสามารถเขียนทับเนื้อหาของไฟล์ ./docker/volumes/jenkins-home/jenkins.yaml ในอินสแตนซ์เจนกินส์ที่สร้างขึ้นใหม่ของคุณด้วยเนื้อหาใน jenkins-no-jobs.yaml
ปริมาณภายใต้ macOS ค่อนข้างช้า ใน MacBook ของฉันที่ใช้งาน Jenkins ที่ให้มาของ analysis-model ในคอนเทนเนอร์ Docker นั้นช้ากว่าการทำงาน Jenkins เดียวกันในคอนเทนเนอร์ Docker ที่ทำงานในเครื่องเสมือน Linux บน MacBook เดียวกัน (ฟังดูไร้สาระ?)
เมื่อคุณเสร็จสิ้นการเปลี่ยนแปลงการพัฒนาในพื้นที่ของคุณ (เช่นการทดสอบหน่วยเป็นสีเขียวทั้งหมด) คุณควรทดสอบการเปลี่ยนแปลงของคุณในเจนกินส์ นอกจากนี้ยังช่วยเตรียมการทดสอบการรวมหรือการทดสอบ UI สำหรับการเปลี่ยนแปลงของคุณ
หากคุณมีการเปลี่ยนแปลงเฉพาะในโมดูล analysis-model (และคุณไม่มีวิธี API ใหม่) คุณจะต้องสร้างใหม่และติดตั้ง Maven Mowen analysis-model.jar และหลังจากนั้นสร้าง Jenkins Wrapper Wrapper analysis-model-api-plugin ปลั๊กอินนี้จะต้องนำไปใช้กับเจนกินส์
กระบวนการนี้ง่ายขึ้นโดยเรียกใช้สคริปต์ ./bin/go.sh ในโมดูล analysis-model มันจะติดตั้งโมดูล analysis-model.jar ในที่เก็บ maven ในพื้นที่ของคุณ จากนั้นสคริปต์นี้จะสร้างปลั๊กอินจริงและปรับใช้กับเจนกินส์
หากคุณมีเพียงการเปลี่ยนแปลงในปลั๊กอินคำเตือน -NG คุณจะต้องสร้าง warnings-ng.jpi ใหม่และปรับใช้กับเจนกินส์ คุณสามารถใช้หนึ่งในสคริปต์เชลล์ต่อไปนี้สำหรับงานนี้:
./bin/clean.sh : สร้างปลั๊กอินโดยใช้ mvn clean install และปรับใช้ให้ประสบความสำเร็จในอินสแตนซ์ของเจนกินส์./bin/go.sh : สร้างปลั๊กอินโดยใช้ mvn clean install -DskipITs (ข้ามการทดสอบการรวม) และปรับใช้ให้ประสบความสำเร็จใน Jenkins Instace./bin/skip.sh : สร้างปลั๊กอินโดยใช้ mvn clean install -DskipTests (ข้ามการทดสอบทั้งหมดและการวิเคราะห์แบบคงที่) และปรับใช้ความสำเร็จในอินสแตนซ์ของเจนกินส์สิ่งที่ต้องทำ
หากคุณมีการเปลี่ยนแปลงในหนึ่งในปลั๊กอิน Foresics (API หรือการใช้งาน GIT) คุณจะต้องสร้างปลั๊กอินเจนกินส์เหล่านี้ใหม่และปรับใช้กับอินสแตนซ์ของเจนกินส์
เพื่อลดความซับซ้อนของกระบวนการนี้ให้เรียกใช้สคริปต์ ./go.sh ในโฟลเดอร์ปลั๊กอินที่สอดคล้องกันมันจะสร้างปลั๊กอินและปรับใช้ให้ประสบความสำเร็จกับเจนกินส์
ก่อนที่จะทำการเปลี่ยนแปลงโปรดติดต่อฉัน โดยทั่วไปแล้วมันเป็นไปได้ที่จะทำการเปลี่ยนแปลงที่เข้ากันได้ย้อนหลัง
สคริปต์บิลด์จากส่วนสุดท้ายยังสามารถเริ่มต้นได้โดยใช้หนึ่งใน Intellij Launchers Build and Deploy [module-name] ตัวเรียกใช้งานเหล่านี้สร้างปลั๊กอินที่เกี่ยวข้องและปรับใช้เป็นเจนกินส์
การทดสอบ UI สามารถเริ่มต้นได้โดยใช้การกำหนดค่าตัวเรียกใช้ Intellij หรือใช้สคริปต์บรรทัดคำสั่ง ดังที่ได้กล่าวไปแล้วการทดสอบ UI ทั้งหมดจำเป็นต้องทำงานภายในวิชาที่กำหนดภายใต้การทดสอบ ในกรณีของเราเราใช้เวอร์ชัน Jenkins LTS ล่าสุดที่มีอยู่และชุดปลั๊กอินที่กำหนดไว้ล่วงหน้าจากอิมเมจนักเทียบท่าของเรา
การทดสอบ UI สามารถเริ่มต้นได้โดยใช้ UI Tests Warnings (Firefox) หรือ UI Warnings Tests (Chrome) โปรดทราบว่าตัวเรียกใช้งานทั้งสองต้องการการติดตั้งไดรเวอร์ซีลีเนียมที่สอดคล้องกัน หากไดรเวอร์เหล่านี้ไม่ได้ติดตั้งใน /opt/bin บนเครื่องในเครื่องของคุณคุณต้องปรับการกำหนดค่าตัวเรียกใช้งานเพื่อให้ตรงกับการตั้งค่าของคุณ
นอกจากนี้คุณยังสามารถเริ่มต้นการทดสอบ UI โดยใช้เชลล์ Scrips ที่ให้ไว้ testFirefox.sh หรือ testChrome.sh โปรดทราบว่าคุณอาจต้องปรับสคริปต์เหล่านี้ด้วย (ดูส่วนก่อนหน้า)