Это гостевой пост, который я написал в блоге Puppetlabs для своей программы Module of the Week о модуле MaestroDev / maven, который мы создали.
Модуль Недели: maestrodev / maven — Загрузки артефактов в Maven
Цель | Управление установкой Apache Maven и загрузка артефактов из репозиториев Maven |
модуль | maestrodev / Maven |
Кукольная версия | 2.7+ |
платформы | RHEL5, RHEL6 |
Модуль maven позволяет пользователям Puppet устанавливать и настраивать Apache Maven , инструмент для сборки и управления проектами, а также легко использовать зависимости от репозиториев Maven.
Если вы используете репозитории Maven для хранения артефактов, возникающих в процессе разработки, независимо от того, используете ли вы Maven, Ivy, Gradle или какой-либо другой инструмент, способный передавать сборки в репозитории Maven, этот модуль определяет новый тип maven, который позволит вам развернуть эти артефакты в любой Puppet управляемый сервер. Например, вы можете развертывать файлы WAR непосредственно из своего репозитория Maven, просто используя их groupId, artifactId и версию, связывая мосты разработки и предоставления без каких-либо дополнительных шагов или пакетов, таких как RPM или debs.
Тип maven позволяет легко предоставлять серверы во время разработки с использованием версий SNAPSHOT, используя самую последнюю сборку для обеспечения. Вместе с инструментом CI это позволяет вам всегда поддерживать ваши серверы разработки в актуальном состоянии.
В этой первой версии этот модуль поддерживает
- Установка Apache Maven
- Конфигурирование Maven settings.xml для конфигурации репозитория
- Настройка переменных среды Maven
- Загрузка артефактов из репозиториев Maven
Установка модуля
сложность | Легко |
Время установки | 2 минуты |
Установить модуль Maven так же просто, как использовать инструмент модуля Puppet, доступный в Puppet 2.7.14+ и Puppet Enterprise 2.5+, а также в виде RubyGem:
$ puppet module install maestrodev-maven Preparing to install into /etc/puppet/modules ... Downloading from http://forge.puppetlabs.com ... Installing -- do not interrupt ... /etc/puppet/modules └─┬ maestrodev-maven (v0.0.1) └── maestrodev-wget (v0.0.1)
Кроме того, вы можете установить модуль Maven вручную:
$ cd /etc/puppet/modules/ $ wget http://forge.puppetlabs.com/system/releases/m/maestrodev/maestrodev-maven-0.0.1.tar.gz $ tar zxvf maestrodev-maven-0.0.1.tar.gz && rm maestrodev-maven-0.0.1.tar.gz $ mv maestrodev-maven-0.0.1 maven $ wget http://forge.puppetlabs.com/system/releases/m/maestrodev/maestrodev-wget-0.0.1.tar.gz $ tar zxvf maestrodev-wget-0.0.1.tar.gz && rm maestrodev-wget-0.0.1.tar.gz $ mv maestrodev-wget-0.0.1 wget
Обзор ресурсов
КЛАССЫ
класс мавен
Этот класс устанавливает Apache Maven с версией по умолчанию 2.2.1
maven :: класс maven
Устанавливает Apache Maven, позволяя вам указать версию Maven, которую вы хотите установить
ОПРЕДЕЛЕНИЯ
Maven :: окружающая среда
Определение позволяет нам настраивать переменные окружения Apache Maven для каждого пользователя.
Maven :: Настройки
Настраивает $ HOME / .m2 / settings.xml для каждого пользователя с помощью репозиториев, зеркал, учетных данных и свойств.
ВИДЫ
специалист
Этот новый тип позволяет нам загружать файлы из удаленных репозиториев Maven. Maven должен быть предварительно установлен.
Тестирование модуля
Модуль включает в себя некоторые тесты Puppet rspec, которые используют puppetlabs_spec_helper, поэтому его легко реализовать, и все приборы будут автоматически загружены и тесты будут запущены.
Для установки всех зависимых гемов включен Gemfile, поэтому после запуска
$ bundle install
Тесты могут быть выполнены с
$ bundle exec rake spec
Настройка модуля
сложность | Легко |
Время установки | 5 минут |
Чтобы установить Maven, есть два варианта, простой для установки версии по умолчанию (2.2.1):
include maven
или немного более сложный вариант, который настраивает версию:
class { "maven::maven": version => "3.0.4" }
Maven будет загружен по умолчанию из основного архива Apache. Его можно настроить для загрузки из другого хранилища, например, из локальной сети, с помощью этого синтаксиса хранилища, используемого во всем модуле.
$repo = { id => "myrepo", username => "myuser", password => "mypassword", url => "http://repo.acme.com", mirrorof => "external:*" # if you want to use the repo as a mirror, see maven::settings below } class { "maven::maven": version => "3.0.4", repo => $repo }
После установки Maven вы можете настроить Maven settings.xml для разных пользователей, переопределить зеркала, серверы, локальный репозиторий, активные свойства и репозиторий по умолчанию. Особенно полезно заставить Maven использовать репозиторий во внутренней сети для более быстрой загрузки. Эти настройки используются как командной строкой Maven, так и типом марионеточного марионетки.
Мы используем хэши, чтобы иметь возможность повторно использовать определения репозитория без копирования и вставки, как определение $ repo выше.
# Create a settings.xml with the repo credentials maven::settings { 'maven' : mirrors => [$central], # mirrors entry in settings.xml, uses id, url, mirrorof from the hash passed servers => [$central], # servers entry in settings.xml, uses id, username, password from the hash passed user => 'maven', default_repo_config => { url => $repo['url], snapshots => { enabled => 'true', updatePolicy => 'always' }, releases => { enabled => 'true', updatePolicy => 'always' } } properties => { myproperty => 'myvalue' }, local_repo => '/home/maven/.m2/repository' }
Мы можем переопределить центральный репозиторий с помощью зеркал, которые добавят репозитории в настройки зеркал. Параметр Servers настраивает каждую запись сервера settings.xml для учетных данных пользователя и пароля.
С помощью default_repo_config мы можем добавить репозиторий, который будет включен для всех выполнений Maven, включая тип марионеток aven. Это необходимо для проверки удаленного репозитория на наличие моментальных снимков, поскольку в Maven по умолчанию нет репозитория моментальных снимков.
Параметр properties представляет собой хэш с ключами и значениями для раздела свойств параметров, в то время как local_repo переопределяет местоположение локального репозитория Maven по умолчанию.
Другой файл Maven, который можно настроить для изменения переменных среды Maven, — это $ HOME / .mavenrc с классом maven :: environment. .Mavenrc поставляется сценарием Apache Maven для каждого запуска.
maven::environment { 'env-maven-user' : user => 'maven', maven_opts => '-XX:MaxPermSize=256m', maven_path_additions => '/usr/local/bin' }
Вероятно, самая полезная функциональность модуля — это возможность загружать артефакты из репозиториев Maven. Для этого требуется правильно установить и настроить Maven, что можно сделать с помощью предыдущих классов и определений, и использовать зависимость Maven : получить плагин за кулисами. Название ресурса maven используется как место назначения файла, и пользователь для запуска maven может быть установлен с помощью параметра user.
maven { "/tmp/maven-core-2.2.1.jar": id => "org.apache.maven:maven-core:2.2.1:jar", repos => ["central::default::http://repo.maven.apache.org/maven2","http://mirrors.ibiblio.org/pub/mirrors/maven2"], user => "maven", }
С необязательным параметром repos мы можем определить, из каких репозиториев загружать зависимости, если не используется центральный Maven по умолчанию. Параметр находится в форме, ожидаемой плагином зависимостей Maven , то есть id :: [layout] :: url или просто url, разделенных запятой.
Или немного более многословно:
maven { "/tmp/maven-core-2.2.1-sources.jar": groupid => "org.apache.maven", artifactid => "maven-core", version => "2.2.1", classifier => "sources", packaging => "jar", user => "maven", }
Пример использования
С помощью нескольких простых объявлений мы можем установить Maven на узле, загрузить двоичные файлы Apache Maven с сайта apache.org и распаковать их в / usr / local, а затем загрузить любой файл из центрального репозитория Maven. Примером является maven-core-2.2.1.jar, который находится в репозитории под org.apache.maven groupId и maven-core artifactId.
# Install Maven class { "maven::maven": } -> maven { "/tmp/maven-core-2.2.1.jar": id => "org.apache.maven:maven-core:2.2.1:jar", }
Использование более короткой формы groupId: artifactId: version: packaging позволяет нам быть более кратким, но мы могли бы сделать то же самое, используя параметры groupid, artifactid, version, package типа maven. Обратите внимание, что мы используем стрелку цепочки (->), чтобы явно установить Maven, прежде чем использовать его для загрузки файла JAR.
У вас должен быть файл /tmp/maven-core-2.2.1.jar с содержимым, соответствующим содержимому http://repo.maven.apache.org/maven2/org/apache/maven/maven-core/2.2.1/ maven-core-2.2.1.jar .
Вывод
Если вы используете Apache Maven, этот модуль пригодится для последовательной и повторяемой установки и настройки его на любой машине. Этот модуль также использует выходные артефакты процесса разработки на более поздних этапах доставки продукта без дополнительных шагов или переупаковки.
Пожалуйста, дайте нам знать, если у вас есть какие-либо проблемы с модулем. Мы ищем новые способы улучшения модуля, такие как устранение необходимости установки wget. Мы с нетерпением ждем ваших отзывов!
Учить больше: