Статьи

Кукольный модуль для Maven Repository Artifact Загрузки

Логотип кукольных лабораторийЭто гостевой пост, который я написал в блоге 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. Мы с нетерпением ждем ваших отзывов!

Учить больше: