有没有人知道nexus插件或API允许监视mvn工件部署到nexus repo?我的问题是开发人员正在将所有类型的罐子上传到nexus回购中,我无法知道谁做了什么以及为什么?我如何对它们强制执行规则,以便在将任何jar上传到nexus之前必须输入注释?有没有办法在mvn/nexus中这样做???
珍妮
我们在CI服务器(哈德森)上看到相对较长的构建时间,并且它们开始妨碍我们.我知道哈德森所做的不仅仅是调用maven而且我很乐意为它提供10-20%的工作时间,但是数量级减速似乎太多了.
任何人都知道为什么会这样,以及如何解决问题?我将首先说出不是原因:
maven目标实际上是干净和安装,没有任何花哨和资源密集,如javadoc,checkstyle等.查看hudson构建任务控制台输出,当"从[我们的Nexus artefact存储库]中检索以前的构建号"时,似乎有延迟,但我不知道一个简单的方法来衡量这一步的表现,发布一个人工制品似乎太简单了,无法证明速度的总差异.
(问题也在这个帖子中描述)
更新:
我们已将Hudson/Jenkins升级到最新版本,并且已经能够使用计时插件.精简版:
更多细节
在我们的一个真正的maven项目(maven构建时间:3分钟,哈德森构建时间:9分钟)我们可以看到哈德森也在3分钟内执行构建,但是然后花费6分钟将人工制品上传到nexus.
使用nexus的web UI执行另一个人工制品的手动上传,我能够确认以下内容:
<nexusworkdir>/nexus/storage/test/test2/test2/1.0.0/test2-1.0.0.rpm
真正的益智者是为什么nexus需要一分钟来创建这个文件:
<nexusworkdir>/nexus/proxy/attributes/test/test2/test2/1.0.0/test2-1.0.0.rpm
据我所知,它只是计算一个MD5和SHA1签名并记录一般的人工制品信息,但75MB文件的md5sum和sha1sum需要<1s才能运行...
最后,它似乎不是某种网络超时,因为延迟似乎与人工制品大小大致成正比.
知道nexus在收到人工制品后所做的事情.
更新2:
将nexus日志级别设置为debug,nexus会在上传人工制品时记录以下内容:
Run Code Online (Sandbox Code Playgroud)... 2011-04-05 14:38:53 DEBUG [jpsc28za2RtYQ==] -
osnpslfDefau~ - 复制缓冲区大小为4096的流
Run Code Online (Sandbox Code Playgroud)2011-04-05 14:39:55 DEBUG [ython-2.5.2.jar] - org.mortbay.log
- RESPONSE /nexus/content/groups/public/org/python/jython/2.5.2/jython-2.5.2.jar 200
Run Code Online (Sandbox Code Playgroud)2011-04-05 14:40:07 DEBUG [-2.5.2.jar.sha1] - org.mortbay.log
- 请求/nexus/content/groups/public/org/python/jython/2.5.2/jython-2.5.2.jar.sha1 on
Run Code Online (Sandbox Code Playgroud)... 2011-04-05 14:40:12 DEBUG [-2.5.2.jar.sha1] - org.mortbay.log
- RESPONSE /nexus/content/groups/public/org/python/jython/2.5.2/jython-2.5.2.jar.sha1 200
Run Code Online (Sandbox Code Playgroud)2011-04-05 14:43:45 DEBUG [ndex.properties] - org.mortbay.log
- 请求org.mortbay.jetty.HttpConnection@141a720上的/nexus/content/groups/public/.index/nexus-maven-repository-index.properties
Run Code Online (Sandbox Code Playgroud)... …
我有一个Maven项目"核心".在项目的pom.xml中,版本为0.1.我在Jenkins中使用参数化构建并设置文本参数myNewVersion = 3.1.我还设置了以下maven目标:
versions:set -DnewVersion=${myNewVersion} versions:commit deploy
Run Code Online (Sandbox Code Playgroud)
在构建时,maven将pom.xml中的版本正确更新为"3.1".但是,maven部署任务将我的项目部署为"core-0.1",版本仍为0.1.我的Nexus中相应的0.1 dir中包含的pom文件指出版本号为"3.1".
我该怎么做才能强制maven部署任务使用maven版本插件设置的正确版本?
非常感谢您的帮助.
编辑1: 澄清我的需求:POM中项目的版本不应该说明实际的构建版本.我用它来确定我的"核心"项目与底层系统和API的兼容性.更详细:项目"core"从jenkins获取"interfaceVersion = 3.1"或"interfaceVersion = 4.0"参数.这决定了我的核心项目使用哪个版本来依赖于另一个"库"包.
现在,我有两个Jenkins构建作业,一个用于3.1,一个用于4.0库项目依赖的核心项目.每个都从SVN检出相同的项目代码,但将不同的版本参数传递给正在构建的"核心"项目.我想在pom.xml中将此版本号用作我的项目版本号,并将我的jar的版本号用于nexus(即core-3.1.jar或core-4.0.jar).
编辑2: 我再来一点.我只是使用我在jenkins中设置的version参数作为参数化构建部分中的参数作为pom文件中项目的版本号.Maven警告这样做,但它确实有效.但是,依赖于"核心"的所有项目现在都需要指定"$ {myNewVersion}"作为依赖版本.
所以我尝试再次使用versions-maven-plugin来设置/覆盖pom文件中的版本,就像我上面所说的那样.但是,现在使用maven deploy时出现"拒绝访问"错误.如果我删除"版本:set -DnewVersion = $ {myNewVersion}版本:commit"并只使用"deploy",它就可以了.有任何线索如何解决这个问题?
我的maven工件被部署到Nexus快照存储库.在那里,它存储在正确的目录中,但其文件名具有以下模式:
mylibrary-1.0-20130213.125827-2.jar
Run Code Online (Sandbox Code Playgroud)
但是,Maven无法下载该快照.根据错误日志,Maven似乎期望以下文件名:
mylibrary-1.0-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)
这些是我的pom中的存储库设置:
<repositories>
<repository>
<id>mycompany-all</id>
<url>https://servername/nexus/content/groups/mycompany/</url>
</repository>
</repositories>
<distributionManagement>
<repository>
<id>mycompany-releases</id>
<url>https://servername/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>mycompany-snapshots</id>
<url>https://servername/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
Run Code Online (Sandbox Code Playgroud)
注意:nexus组包括releases
和snapshots
repo.
我没有配置这些回购settings.xml
- 这是问题吗?或者我还做错了什么?
在研究CI工具时,我发现CI的许多安装也集成到SonaType Nexus和JFrog Artifactory等工件库中.
这些工具听起来与Maven高度集成.我们不使用Maven,也不编译Java.我们使用Qt/qmake/make编译C++,这个版本对我们来说非常有用.我们仍在调查CI工具.
使用Artifact存储库有什么意义?
归档到Nexus或Artifactory(或Archiva)应该是我们的制造链中的一个步骤,还是CI链的一部分,还是它可能是?
我如何使我们的"make"构建或perl/bash/batch脚本与它们交互?
我在〜/ .m2/settings.xml中有这个:
<servers>
<server>
<username>deployment</username>
<password>xxxxxx</password>
<id>central</id>
</server>
<server>
<username>deployment</username>
<password>xxxxxx</password>
<id>snapshots</id>
</server>
</servers>
Run Code Online (Sandbox Code Playgroud)
这在我的POM中:
<distributionManagement>
<repository>
<id>central</id>
<name>libs-release-local</name>
<url>http://repo.example.com:8081/nexus/content/repositories/libs-release-local</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>libs-local</name>
<url>http://repo.example.com:8081/nexus/content/repositories/libs-local</url>
</snapshotRepository>
</distributionManagement>
Run Code Online (Sandbox Code Playgroud)
我面临的问题是工件没有部署,nexus日志显示用于进行身份验证的用户名是"匿名的".这就是它失败的原因.为什么maven没有选择settings.xml中指定的用户名/密码,我做错了什么?
此外,我尝试使用-X运行maven,DEBUG日志说它正在读取设置的正确文件:
[DEBUG] Reading global settings from /home/praddy/apache-maven-3.0.5/conf/settings.xml
[DEBUG] Reading user settings from /home/praddy/.m2/settings.xml
[DEBUG] Using local repository at /home/praddy/.m2/repository
Run Code Online (Sandbox Code Playgroud) 我在nexus中部署时遇到401错误.我没有对已安装的nexus进行任何更改.Nexus正在运行localhost:8080/nexus
,我可以使用默认用户/密码登录.当我正在运行mvn deploy
时,我收到此错误.
这是我的POM.
<groupId>testproject</groupId>
<artifactId>testproject</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>testproject</name>
<url>http://maven.apache.org</url>
<distributionManagement>
<repository>
<id>releases</id>
<url>http://localhost:8080/nexus/content/repositories/releases</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://localhost:8080/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
<dependencies>
.........
</dependencies>
Run Code Online (Sandbox Code Playgroud)
和〜/ .m2/settings.xml
<servers>
<server>
<id>snapshots</id>
<username>deployment</username>
<password>deployment123</password>
</server>
<server>
<id>releases</id>
<username>deployment</username>
<password>deployment123</password>
</server>
</servers>
Run Code Online (Sandbox Code Playgroud)
例外:
Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default- deploy) on project testproject: Failed to deploy artifacts: Could not transfer artifact testproject:testproject:jar:1.0-20131213.150615-1 from/to snapshots (http://localhost:8080/nexus/content/repositories/snapshots): Failed to transfer file: http://localhost:8080/nexus/content/repositories/snapshots/testproject/testproject/1.0-SNAPSHOT/testproject-1.0-20131213.150615-1.jar.
Return code is: 401 -> [Help 1]
Run Code Online (Sandbox Code Playgroud)
请帮我.
我们在Nexus中有多个存储库(即版本,快照和站点).所有3个存储库都在公共组下,用户使用相同的凭据访问所有这些存储库.在settings.xml中为每个存储库提供相同的用户名和密码会使其变得多余且难以维护.
您能否建议一种优雅的方式来描述所有3个存储库的一个服务器凭据?
任何帮助是极大的赞赏.
我们使用的是maven 2.2.1和Nexus OSS 2.7.1
这是我的settings.xml
<settings>
<servers>
<server>
<id>snapshot</id>
<username>deployment</username>
<password>deployment123</password>
</server>
<server>
<id>release</id>
<username>deployment</username>
<password>deployment123</password>
</server>
<server>
<id>site</id>
<username>deployment</username>
<password>deployment123</password>
</server>
</servers>
<mirrors>
<mirror>
<!--This sends everything else to /public -->
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/nexus/content/groups/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<!--Enable snapshots for the built in central repo to direct -->
<!--all requests to nexus via the mirror -->
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles> …
Run Code Online (Sandbox Code Playgroud) 我正在运行kubeadm alpha版本来设置我的kubernates集群.从kubernates,我试图拉出在nexus存储库中托管的docker图像.当我试图创建一个pod时,它每次都会给出"ImagePullBackOff".有人可以帮我这个吗?
有关详细信息,请参见https://github.com/kubernetes/kubernetes/issues/41536
Pod定义:
apiVersion: v1
kind: Pod
metadata:
name: test-pod
labels:
name: test
spec:
containers:
- image: 123.456.789.0:9595/test
name: test
ports:
- containerPort: 8443
imagePullSecrets:
- name: my-secret
Run Code Online (Sandbox Code Playgroud) 我正在使用以下设置:
我想在delombok完成后将sourceJar上传到联系。
对于Maven发布,我使用以下内容:
task javadocJar(type: Jar) {
from javadoc.destinationDir
classifier = 'javadoc'
}
task sourcesJar(type: Jar) {
from sourceSets.main.allJava
classifier = 'sources'
}
Run Code Online (Sandbox Code Playgroud)
...
publications {
maven(MavenPublication) {
from components.java
artifact sourcesJar
artifact javadocJar
}
}
Run Code Online (Sandbox Code Playgroud)
上传到nexus的资源与我的原始资源只是一对一的。如何更改配置,以使上传的源成为delombok源?
nexus ×10
maven ×5
jenkins ×2
maven-2 ×2
archiva ×1
artifact ×1
artifactory ×1
build.gradle ×1
deployment ×1
docker ×1
gradle ×1
hudson ×1
java ×1
kubeadm ×1
kubectl ×1
kubernetes ×1
lombok ×1
parameters ×1
performance ×1
qmake ×1
snapshot ×1
sonatype ×1