На основании сегодняшних требований необходимо выполнить непрерывную доставку ваших артефактов каждым изменением вашего мастера (GIT)/багажника (SVN). Вопрос в том, что вам нужно добиться этого с Maven?
Обычно вы используете так называемый Снимок
Версии, что означает, что ваша версия выглядит как 1.2.3-Снимок
и указывает на то, что вы в настоящее время работаете над версией выпуска 1.2.3
Отказ После этого вы продолжаете с следующей версией снимка, как 1.2.4-Snapshot
и так далее. В зависимости от вашей среды это изменилось, что означает, что каждое изменение, которое вы сделали на Master (Git), вам нужно создать новую версию выпуска, что означает 1.2.3
и дальше будет 1.2.4
Отказ Разработка будет сделана на филиалах, где вам может понадобиться версия снимка.
Давайте посмотрим в один модуль POM файл, который выглядит так:
4.0.0 com.soebes.smpp smpp 4.0.1 com.soebes.examples.j2ee domain 1.2.3-SNAPSHOT ...
Версия определяется с 1.2.3-Снимок
Если вы сейчас звоните:
mvn clean package
Вы будете производить артефакты, которые выглядят как Домен-1.2.3-Snapshot.jar
Отказ К сожалению, этот вид артефакта — это то, что может измениться в течение времени на основе философии Maven. Это означает, что если вы теперь сделаете изменение в своем коде и просто сделайте это снова MVN чистый пакет
Это создаст тот же Домен-1.2.3-Snapshot.jar
файл. Нет никакой реальной разницы, если вы делаете MVN чистая установка
вместо. Это будет устанавливать только созданный артефакт в ваш локальный кеш $ Главная/.m2/Репозиторий
Отказ Кроме того, если вы делаете MVN Clean Deploy
Разница только в том, что каждый раз, когда вы это делаете в своем менеджере репозитория, схема именования немного отличается, что означает, что артефакт будет выглядеть как Домен-1.2.3-20180821.202345-1.jar.
. Таким образом, в конце концов артефакт содержит отметку времени. Но самое главное, что Снимка
Версии не являются неизменными, так как вы уже могли бы реализовать на основе вышеуказанного.
Таким образом, единственный способ создать настоящие неизменные версии — создавать выбросы с точки зрения Maven. Это означает, что вы должны использовать версию без -Snapshot
Отказ Таким образом, в последствии у вас есть файл POM, который выглядит следующее:
4.0.0 com.soebes.smpp smpp 4.0.1 com.soebes.examples.j2ee domain 1.2.3 ...
Так что вы можете сделать MVN Clean Deploy
И вы создали неизменяемый релиз артефакта Домен-1.2.3.jar
Отказ Если вы попытаетесь сделать это во второй раз, ваш менеджер репозитория скажет вам, что это не работает, потому что релизы определения являются неизменными, что означает, что вы не можете перезаписать их. Таким образом, следствие, если вы сделали изменение/ошибку/исправить вашему проекту, вы должны изменить номер версии. Хорошо, не очень сложно, просто измените версию на 1.2.4
совершать и сделать еще один MVN Clean Deploy
? Так хорошо до сих пор.
Некоторые люди не любят коммиты, когда была изменена только версия. Таким образом, вопрос: есть ли более удобный способ справиться с этим?
Начиная с Maven 3.5.0 + (Я рекомендую использовать самую последнюю версию), есть более удобный способ справиться с этим. Вы можете написать свой файл POM, как следующее:
4.0.0 com.soebes.smpp smpp 4.0.1 com.soebes.examples.j2ee domain ${revision} ...
Итак, теперь вы можете просто создать артефакты релиза, используя следующее:
mvn -Drevision=1.2.3 clean package
Это только создаст артефакты в цель
Справочник вашего проекта. Если вам нравится развернуть их в репозиторий, есть Улучшения нужны :
4.0.0 com.soebes.smpp smpp 4.0.1 com.soebes.examples.j2ee domain ${revision} org.codehaus.mojo flatten-maven-plugin 1.0.0 true flatten process-resources flatten flatten.clean clean clean
Итак, теперь вы можете создать релиз, используя следующую команду:
mvn -Drevision=1.2.3 clean deploy
Но, конечно, версия может быть использована только один раз. Так что если вы хотите сделать другой релиз, вы должны изменить версию Но сейчас это действительно легко:
mvn -Drevision=1.2.4 clean deploy
В настоящее время поддерживается три свойства, которые могут использоваться внутри тега версии:
- редакция
- Sha1.
- список изменений
Только эти три свойства могут использоваться внутри тега версии. Вы можете, конечно, использовать комбинации таких, как это:
${revision}${sha1}${changelist}
Если вы используете разные свойства, вы получите предупреждение Maven. Я настоятельно рекомендую пользователям взять уведомление о предупреждениях, и, конечно, очистите их.
Так как насчет мульти модуля? Там вы можете использовать их. Родитель будет выглядеть так:
4.0.0 com.soebes.smpp smpp 4.0.1 com.soebes.examples.j2ee parent ${revision} pom .. [enhancements described earlier] ..webgui app domain service service-client appasm assembly shade
И ребенок, например Домен
будет выглядеть так:
4.0.0 com.soebes.examples.j2ee parent ${revision} domain ..
Теперь вы можете построить весь проект с корневого уровня с помощью команды:
mvn -Drevision=1.7.0-SNAPSHOT clean package
Выход будет выглядеть так:
[INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] [INFO] parent [pom] [INFO] domain [jar] [INFO] service-client [jar] [INFO] webgui [war] [INFO] service [ejb] [INFO] app [ear] [INFO] appasm [pom] [INFO] shade [jar] [INFO] assembly [pom] [INFO] [INFO] ------------------< com.soebes.examples.j2ee:parent >------------------- [INFO] Building parent 1.7.0-SNAPSHOT [1/9] [INFO] --------------------------------[ pom ]--------------------------------- [INFO] .... [INFO] [INFO] -----------------< com.soebes.examples.j2ee:assembly >------------------ [INFO] Building assembly 1.7.0-SNAPSHOT [9/9] [INFO] --------------------------------[ pom ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ assembly --- [INFO] Deleting /Users/kama/ws-git/javaee/assembly/target [INFO] [INFO] --- flatten-maven-plugin:1.0.0:clean (flatten.clean) @ assembly --- [INFO] Deleting /Users/kama/ws-git/javaee/assembly/.flattened-pom.xml [INFO] [INFO] --- jacoco-maven-plugin:0.8.1:prepare-agent (default) @ assembly --- [INFO] argLine set to -javaagent:/Users/kama/.m2/repository/org/jacoco/org.jacoco.agent/0.8.1/org.jacoco.agent-0.8.1-runtime.jar=destfile=/Users/kama/ws-git/javaee/assembly/target/jacoco.exec [INFO] [INFO] --- flatten-maven-plugin:1.0.0:flatten (flatten) @ assembly --- [INFO] Generating flattened POM of project com.soebes.examples.j2ee:assembly:pom:1.7.0-SNAPSHOT... [INFO] [INFO] --- maven-site-plugin:3.7.1:attach-descriptor (attach-descriptor) @ assembly --- [INFO] No site descriptor found: nothing to attach. [INFO] [INFO] --- maven-assembly-plugin:3.0.0:single (assemblies) @ assembly --- [INFO] Reading assembly descriptor: jar-with-prod.xml [INFO] Reading assembly descriptor: assembly.xml [INFO] Reading assembly descriptor: jar-with-dev.xml [INFO] Building jar: /Users/kama/ws-git/javaee/assembly/target/assembly-1.7.0-SNAPSHOT-prod.jar [INFO] Building zip: /Users/kama/ws-git/javaee/assembly/target/assembly-1.7.0-SNAPSHOT-archive.zip [INFO] Building jar: /Users/kama/ws-git/javaee/assembly/target/assembly-1.7.0-SNAPSHOT-dev.jar [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] parent 1.7.0-SNAPSHOT .............................. SUCCESS [ 1.535 s] [INFO] domain ............................................. SUCCESS [ 0.876 s] [INFO] service-client ..................................... SUCCESS [ 0.111 s] [INFO] webgui ............................................. SUCCESS [ 0.474 s] [INFO] service ............................................ SUCCESS [ 0.454 s] [INFO] app ................................................ SUCCESS [ 0.282 s] [INFO] appasm ............................................. SUCCESS [ 0.237 s] [INFO] shade .............................................. SUCCESS [ 0.443 s] [INFO] assembly 1.7.0-SNAPSHOT ............................ SUCCESS [ 1.238 s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 6.292 s [INFO] Finished at: 2018-08-26T15:57:12+02:00 [INFO] ------------------------------------------------------------------------
Таким образом, сейчас действительно легко создать отпуск со всего проекта, используя следующую команду:
mvn -Drevision=1.7.0 clean deploy
Это приведет к выпуску, развернутому диспетчеру репозитория. Так что теперь давайте посмотрим на использование его в непрерывном интеграционном решении, таким как Дженкинс. На Jenkins у вас часто ситуация для производства артефактов на филиальной базе (возможно, снимок на основе возможности развертывать их в тестовые среды). Таким образом, вы можете объединить такие свойства:
4.0.0 com.soebes.smpp smpp 4.0.1 com.soebes.examples.j2ee domain ${revision}${sha1}${changelist} ... 1.0.0
В вашем трубопроводе Jenkins вы можете извлечь имя ветви и вставить его в звонок по сборке:
mvn -Dsha1=-BRANCHNAME -Dchangelist=-SNAPSHOT clean deploy
Этот подход имеет то преимущество, что на каждом ветви вы используете другую версию, отличащуюся -Бросковое имя
И эти версии — это снимки. Это удобная, потому что все менеджеры репозитои поддерживают версии снимки через некоторое время.
Оригинал: «https://dev.to/khmarbaise/continuous-delivery-with-apache-maven—4i03»