Ang*_*elo 5 linux scp maven jenkins
我想拥有自己创建的工件的maven存储库,但我在尝试将maven 3工件部署到自定义服务器时遇到问题.为了更好地解释这一点,我将提供一些信息:
我的第一次尝试是用我的机器.我在Eclipse中运行Maven来进行部署,一切正常.我将以下内容添加到我的项目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>
Run Code Online (Sandbox Code Playgroud)
在我的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>
Run Code Online (Sandbox Code Playgroud)
所以在我的本地机器上它可以工作,但我需要使用Jenkins来完成这项工作.我修改了Jenkins settings.xml,因为它在Linux上运行,所以不需要sshExecutable.Jenkins settings.xml看起来像
<servers>
<server>
<id>my server id</id>
<username>server username</username>
<password>server password</password>
</server>
</servers>
Run Code Online (Sandbox Code Playgroud)
然后我修改了pom.xml来执行scp而不是scpexe
<distributionManagement>
<repository>
<id>my server id</id>
<name>my repository name</name>
<url>scp://my server//path/to/my/repository</url>
</repository>
</distributionManagement>
Run Code Online (Sandbox Code Playgroud)
但是根据这个页面https://cwiki.apache.org/confluence/display/MAVEN/Maven+3.x+Compatibility+Notes maven 3不支持scp.我以任何方式运行它,我从Jenkins日志中收到以下错误消息
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 :
Run Code Online (Sandbox Code Playgroud)
如果我使用scpexe而不是scp,我会收到另一条错误消息
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 :
Run Code Online (Sandbox Code Playgroud)
我可以进行部署的唯一方法是分两步完成
mvn deploy:deploy-file -DgroupId = $ groupId -DartifactId = $ artifactId -Dversion = $ version -Dpackaging = jar -Dfile = path/to/file.jar -Durl = scp:// my server // path/to/my/repository -DrepositoryId =我的存储库ID
我尝试了很多东西,包括将该命令写入Jenkins目标,但每次我在Jenkins中使用scp命令时,构建都会失败.
任何想法如何解决这个问题将不胜感激.
我有兴趣看看是否有任何真正的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>
Run Code Online (Sandbox Code Playgroud)
关于此的一些注意事项:我通过运行到deploy阶段并提供deployment.server设置来激活此配置文件.为方便起见,我将相应的设置添加到my中,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>
Run Code Online (Sandbox Code Playgroud)
我skip是实际的deploy目标,因为它会在我跑到deploy阶段时被执行,这是我不想要的.
| 归档时间: |
|
| 查看次数: |
8637 次 |
| 最近记录: |