ณ จุดนี้ เราไม่พัฒนาหรือยอมรับคุณสมบัติใหม่ หรือแม้แต่แก้ไขจุดบกพร่องที่ไม่สำคัญ
ปลั๊กอิน Maven นี้รวม Maven เข้ากับ Docker
เป้าหมายการออกแบบคือ:
Dockerfile
คือวิธีการสร้างโปรเจ็กต์ Docker นั่นคือสิ่งที่ปลั๊กอินนี้ใช้ พวกเขามีผลบังคับใช้mvn package
คุณจะได้รับอิมเมจ Docker เมื่อคุณพิมพ์ mvn deploy
รูปภาพของคุณจะถูกผลักmvn dockerfile:build
และใหม่กว่า mvn dockerfile:tag
และใหม่กว่า mvn dockerfile:push
โดยไม่มีปัญหา นอกจากนี้ยังช่วยลดความจำเป็นบางอย่างเช่น mvn dockerfile:build -DalsoPush
; mvn dockerfile:build dockerfile:push
แทนคุณสามารถพูดแทนได้โครงการนี้ปฏิบัติตามหลักจรรยาบรรณแบบเปิด ในการเข้าร่วม คุณจะต้องปฏิบัติตามรหัสนี้
ดูบันทึกการเปลี่ยนแปลงสำหรับรายการรุ่นต่างๆ
ปลั๊กอินนี้ต้องการ Java 7 หรือใหม่กว่า และ Apache Maven 3 หรือใหม่กว่า (dockerfile-maven-plugin <=1.4.6 ต้องการ Maven >= 3 และสำหรับกรณีอื่นๆ Maven >= 3.5.2) หากต้องการรันการทดสอบการรวมหรือใช้ปลั๊กอินในทางปฏิบัติ จำเป็นต้องมีการตั้งค่า Docker ที่ใช้งานได้
สำหรับตัวอย่างเพิ่มเติม โปรดดูไดเร็กทอรีการทดสอบการรวมระบบ
โดยเฉพาะอย่างยิ่ง การทดสอบขั้นสูงจะแสดงบริการเต็มรูปแบบซึ่งประกอบด้วยบริการไมโครสองรายการที่ได้รับการทดสอบการบูรณาการโดยใช้ helios-testing
นี่เป็นการกำหนดค่าปลั๊กอินจริงเพื่อสร้างอิมเมจของคุณด้วย mvn package
และพุชด้วย mvn deploy
แน่นอนคุณสามารถพูด mvn dockerfile:build
ได้อย่างชัดเจน
< plugin >
< groupId >com.spotify</ groupId >
< artifactId >dockerfile-maven-plugin</ artifactId >
< version >${dockerfile-maven-version}</ version >
< executions >
< execution >
< id >default</ id >
< goals >
< goal >build</ goal >
< goal >push</ goal >
</ goals >
</ execution >
</ executions >
< configuration >
< repository >spotify/foobar</ repository >
< tag >${project.version}</ tag >
< buildArgs >
< JAR_FILE >${project.build.finalName}.jar</ JAR_FILE >
</ buildArgs >
</ configuration >
</ plugin >
Dockerfile
ที่เกี่ยวข้องอาจมีลักษณะดังนี้:
FROM openjdk:8-jre
MAINTAINER David Flemström <[email protected]>
ENTRYPOINT ["/usr/bin/java", "-jar", "/usr/share/myservice/myservice.jar"]
# Add Maven dependencies (not shaded into the artifact; Docker-cached)
ADD target/lib /usr/share/myservice/lib
# Add the service itself
ARG JAR_FILE
ADD target/${JAR_FILE} /usr/share/myservice/myservice.jar
หมายเหตุสำคัญ
วิธี Maven-ish ที่สุดในการอ้างอิง build artifact น่าจะเป็นการใช้ตัวแปร project.build.directory
สำหรับการอ้างอิง 'target'-directory อย่างไรก็ตาม สิ่งนี้ส่งผลให้เกิดเส้นทางสัมบูรณ์ ซึ่งคำสั่ง ADD ใน Dockerfile ไม่รองรับ แหล่งที่มาดังกล่าวจะต้องอยู่ภายใน บริบท ของรุ่น Docker และด้วยเหตุนี้จึงต้องอ้างอิงโดย เส้นทางสัมพัทธ์ ดู #101
อย่า ใช้ ${project.build.directory}
เป็นวิธีอ้างอิงไดเร็กทอรี build ของคุณ
การใช้ปลั๊กอินนี้กับงานสร้างของคุณมีข้อดีหลายประการ
ปลั๊กอินนี้ช่วยให้คุณใช้ประโยชน์จากแคช Docker ได้อย่างสม่ำเสมอมากขึ้น โดยเร่งความเร็วในการสร้างของคุณได้อย่างมากมายโดยให้คุณแคชการขึ้นต่อกันของ Maven ในรูปภาพของคุณ นอกจากนี้ยังสนับสนุนให้หลีกเลี่ยง maven-shade-plugin
ซึ่งยังช่วยเพิ่มความเร็วในการสร้างอีกด้วย
คุณไม่จำเป็นต้องพูดอะไรเช่น:
mvn package
mvn dockerfile:build
mvn verify
mvn dockerfile:push
mvn deploy
ในทางกลับกัน ก็เพียงพอที่จะพูดว่า:
mvn deploy
ด้วยการกำหนดค่าพื้นฐาน จะช่วยให้แน่ใจว่าอิมเมจถูกสร้างและพุชในเวลาที่ถูกต้อง
คุณสามารถพึ่งพาข้อมูล Docker ของโปรเจ็กต์อื่นได้ เนื่องจากปลั๊กอินนี้จะแนบข้อมูลเมตาของโปรเจ็กต์เมื่อสร้างอิมเมจ Docker เพียงเพิ่มข้อมูลนี้ในโครงการใดๆ:
< dependency >
< groupId >com.spotify</ groupId >
< artifactId >foobar</ artifactId >
< version >1.0-SNAPSHOT</ version >
< type >docker-info</ type >
</ dependency >
ตอนนี้คุณสามารถอ่านข้อมูลเกี่ยวกับอิมเมจ Docker ของโปรเจ็กต์ที่คุณพึ่งพาได้:
String imageName = getResource ( "META-INF/docker/com.spotify/foobar/image-name" );
นี่เป็นวิธีที่ยอดเยี่ยมสำหรับการทดสอบการรวมที่คุณต้องการเวอร์ชันล่าสุดของอิมเมจ Docker ของโปรเจ็กต์อื่น
โปรดทราบว่าคุณต้องลงทะเบียนส่วนขยาย Maven ใน POM ของคุณ (หรือ POM หลัก) เพื่อให้รองรับประเภท docker-info
:
< build >
< extensions >
< extension >
< groupId >com.spotify</ groupId >
< artifactId >dockerfile-maven-extension</ artifactId >
< version >${version}</ version >
</ extension >
</ extensions >
</ build >
โครงการของคุณมีลักษณะดังนี้:
a/
Dockerfile
pom.xml
b/
Dockerfile
pom.xml
ตอนนี้คุณสามารถใช้โปรเจ็กต์เหล่านี้กับ Fig หรือ docker-compose หรือระบบอื่นๆ ที่ทำงานร่วมกับ Dockerfiles ได้แล้ว ตัวอย่างเช่น docker-compose.yml
อาจมีลักษณะดังนี้:
service-a :
build : a/
ports :
- ' 80 '
service-b :
build : b/
links :
- service-a
ตอนนี้ docker-compose up
และ docker-compose build
จะทำงานตามที่คาดไว้
ดูเอกสารการใช้งาน
ดูเอกสารการรับรองความถูกต้อง
วิธีตัดการปล่อย Maven:
mvn clean [-B -Dinvoker.skip -DskipTests -Darguments='-Dinvoker.skip -DskipTests']
-Dgpg.keyname=<key ID used for signing artifacts>
release:clean release:prepare release:perform
เราใช้ gren
เพื่อสร้าง Releases ใน Github:
gren release