2013-09-27 3 views
5

Я хочу иметь собственный репозиторий maven для созданных мной артефактов, но у меня есть проблема с попыткой развернуть артефакт maven 3 на пользовательский сервер. Чтобы объяснить это лучше я собираюсь дать некоторую информацию:Как развернуть maven3 артефакт на удаленном сервере с помощью scp

  • Я использую Maven 3
  • Я использую Eclipse, Keppler
  • Я использую Дженкинс
  • Удаленный сервер работает Ubuntu Server 11.04
  • Дженкинс работает на сервере Ubuntu
  • Моя локальная машина работает под управлением Windows XP

Моя первая попытка была с моей машиной. Я запускаю Maven в Eclipse для развертывания, и все работает нормально. Добавить следующее моих проектов POM

<build> 
      ... 
     <extensions> 
      <extension> 
       <groupId>org.apache.maven.wagon</groupId> 
       <artifactId>wagon-ssh-external</artifactId> 
       <version>1.0-beta-6</version> 
      </extension> 
     </extensions> 
      ... 
     </build> 

... 

<distributionManagement> 
     <repository> 
      <id>my server id</id> 
      <name>my repository name</name> 
      <url>scpexe://my server//path/to/my/repository</url> 
     </repository> 
    </distributionManagement> 

И в моем settings.xml добавить

<servers> 
     <server> 
      <id>my server id</id> 
     <username>server username</username> 
     <password>server password</password> 

     <configuration> 
      <sshExecutable>plink</sshExecutable> 
      <scpExecutable>pscp</scpExecutable> 
     </configuration> 

    </server> 
</servers> 

Так что в моей локальной машине это работает, но мне нужно, чтобы получить эту работу, используя Дженкинс. Я изменил Jenkins settings.xml, потому что он работает на Linux, поэтому не требуется sshExecutable. Settings.xml Дженкинс выглядит

<servers> 
     <server> 
      <id>my server id</id> 
     <username>server username</username> 
     <password>server password</password> 

    </server> 
</servers> 

Тогда я изменил pom.xml выполнить только УПП и не scpexe

<distributionManagement> 
     <repository> 
      <id>my server id</id> 
      <name>my repository name</name> 
      <url>scp://my server//path/to/my/repository</url> 
     </repository> 
    </distributionManagement> 

Но согласно этой странице https://cwiki.apache.org/confluence/display/MAVEN/Maven+3.x+Compatibility+Notes Maven 3 не поддерживает УПП. Я бегу это каким-либо образом, и я получил следующее сообщение об ошибке из Дженкинс войти

mavenExecutionResult exceptions not empty 
message : Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project myproject: Failed to deploy artifacts/metadata: No connector available to access repository my_repository (scp://my server//path/to/my/repository) of type default using the available factories WagonRepositoryConnectorFactory 
cause : Failed to deploy artifacts/metadata: No connector available to access repository my_repository (scp://my server//path/to/my/repository) of type default using the available factories WagonRepositoryConnectorFactory 
Stack trace : 

Если я использую scpexe вместо УПП я получил еще одно сообщение об ошибке

mavenExecutionResult exceptions not empty 
message : Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project pruebanueva: Failed to deploy artifacts: Could not transfer artifact {$groupId}:{$artifactId}:{$package}:{$version} from/to my_repository (scpexe://my server//path/to/my/repository): Error executing command for transfer 
cause : Failed to deploy artifacts: Could not transfer artifact {$groupId}:{$artifactId}:{$package}:{$version} from/to my_repository (scpexe://my server//path/to/my/repository): Error executing command for transfer 
Stack trace : 

Единственный способ, которым я мог развернуть, было делать это в два этапа

  1. Настройка Дженкинс, чтобы просто установить гол
  2. , выполнив следующую команду из командной строки

МВН развертывания: развертывание-файл -DgroupId = $ идентификатор_группы -DartifactId = $ артефакта -Dversion = $ версия -Dpackaging = баночка -Dfile = путь/к/file.jar -Durl = УПП:// мой сервер // путь/к/мой/хранилище -DrepositoryId = мое хранилище идентификатор

Я пробовал много вещей, в том числе письма, которые командуют в Дженкинс цели, но каждый раз, когда я использую команду УПП в Дженкинс сборки терпит неудачу.

Любая идея, как решить эту проблему, будет оценена по достоинству.

ответ

6

Мне интересно узнать, есть ли какие-либо реальные решения Maven для этого.Я всегда это исправил с помощью плагина Maven Antrun следующим образом:

<profile> 
    <id>deploy</id> 
    <activation> 
    <property> 
     <name>deployment.server</name> 
    </property> 
    </activation> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <version>1.7</version> 
     <executions> 
      <execution> 
      <phase>deploy</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      <configuration> 
       <target> 
       <echo>deploying to server: ${deployment.server}</echo> 
       <taskdef classname="org.apache.tools.ant.taskdefs.optional.ssh.Scp" name="scp" /> 
       <scp file="${project.build.directory}/${project.artifactId}.war" password="${deployment.password}" todir="${deployment.userName}@${deployment.server}:" trust="true" verbose="true" /> 
       <!-- <sshexec command="echo unity | sudo -S cp ${project.build.finalName}.jar $(if [ -e /station ]; then echo /station/lib; else echo /opt/pkg-station*/webapps/station*/WEB-INF/lib; fi)" host="${targetStation}" password="unity" trust="true" username="wps"></sshexec> --> 
       </target> 
      </configuration> 
      </execution> 
     </executions> 
     <dependencies> 
      <dependency> 
      <groupId>com.jcraft</groupId> 
      <artifactId>jsch</artifactId> 
      <version>0.1.25</version> 
      </dependency> 
      <dependency> 
      <groupId>org.apache.ant</groupId> 
      <artifactId>ant-jsch</artifactId> 
      <version>1.7.1</version> 
      </dependency> 
     </dependencies> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-deploy-plugin</artifactId> 
     <version>2.7</version> 
     <configuration> 
      <skip>true</skip> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
</profile> 

Несколько замечаний по этому поводу: Я активировать этот профиль с комбинацией работает на deploy фазе, и обеспечивая установку deployment.server. Для моего удобства тогда, добавляем соответствующие настройки к моим settings.xml так, что я не должен предоставлять их все в командной строке каждый раз:

<profile> 
    <id>alwaysActiveProfile</id> 
    <properties> 
     <deployment.server>10.10.10.10</deployment.server> 
     <deployment.userName>userName<deployment.userName> 
     <deployment.password>password</deployment.password> 
    </properties> 
</profile> 

Я skip фактической deploy цели, потому что он будет выполнен когда я бегу к фазе deploy, чего я не хочу.

+0

Мне очень жаль, но это не работает для меня. Где я должен поставить этот большой «профиль»? в моем pom.xml? если да, то где в моем pom.xml? внутри тегов сборки или в другом месте ?. Благодаря!!! – Angelo

+0

Первый (большой) фрагмент входит в ваш файл POM. Это «профиль», который находится в структуре XML-файла POM следующим образом: 'project.profiles.profile'. Второй фрагмент находится в вашем 'settings.xml'. Вы можете найти этот файл в папке 'conf' вашей установки Maven. Есть примеры внутри стандартного 'settings.xml', чтобы показать вам, куда его поместить. –

+0

Когда я запустил его, я получил следующую ошибку: «Ошибка развертывания: элемент репозитория не был указан в POM внутри элемента распределения управления или в -DaltDeploymentRepository = id :: layout :: url parameter» – Angelo

0

Ответ Ферхагена является правильным, но более чистый раствор Maven это: https://stackoverflow.com/a/3303525/1881318

+0

Я очень ценю вашу помощь, но я уже исправил это с помощью Archiva, потому что maven 3 не разрешает scp – Angelo

+0

Я не уверен, как maven не разрешил бы scp. При этом у меня возникают проблемы с тем, что scp работает с закрытым ключом, а не с паролем. См. [Мой вопрос по scp] (http://stackoverflow.com/q/27538847/744133). – YoYo

Смежные вопросы