ฉันกำลังพยายามใช้ CI / CD ไปป์ไลน์สำหรับโครงการของฉันโดยใช้ Docker, Kubernetes และ Jenkins แอปพลิเคชันของฉันเป็นแอปพลิเคชันหลายผู้เช่าที่แอปพลิเคชันฐานข้อมูลตัวแปรทุกอย่างแตกต่างกันสำหรับผู้เช่ารายอื่น
แอพลิเคชันกลยุทธ์
เมื่อฉันสร้างภาพนักเทียบท่าฉันกำลังใช้ Dockerfile และฉันเก็บ Dockerfile ไว้ในที่เก็บรหัส SVN ของฉัน สำหรับผู้เช่าทุกคนที่เก็บรหัสจะเหมือนกัน เมื่อฉันสร้างภาพในเวลานั้นฉันต้องสร้างภาพที่แตกต่างกันสำหรับผู้เช่าที่แตกต่างกัน
การใช้งาน Dockerfile
ในไฟล์นักเทียบท่าของฉันฉันกำลังเพิ่มจุดเข้าใช้งานดังนี้:
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=tenant1config" , "TestProject.war"]
หากฉันต้องการสร้างภาพนักเทียบท่าสำหรับผู้เช่ารายอื่นต้องเพิ่ม
-Dspring.profiles.active=tenant2config
ดังนั้นจุดเข้าใช้งานใน Dockerfile จึงเป็นแบบไดนามิก
ความสับสนของฉัน
- สำหรับการจัดการคำสั่ง entry point ภายใน Dockerfile เป็นไปได้ไหม?
- หรือฉันจำเป็นต้องเพิ่ม Dockerfile อื่นสำหรับผู้เช่ารายอื่นหรือไม่? และจำเป็นต้องเรียกใช้คำสั่งสร้างนักเทียบท่าแยกต่างหากสำหรับผู้เช่าแยกกันหรือไม่
ฉันจะหาวิธีมาตรฐานที่ดีในการนำปัญหานี้ไปใช้อย่างไร
ENTRYPOINT
ie ของคุณ... -Dspring.profiles.active=${TENANT}
จากนั้นตั้งค่าสภาพแวดล้อมที่ถูกต้องในระหว่างการปรับใช้ของคุณ