标签: nexus

监控nexus repo

有没有人知道nexus插件或API允许监视mvn工件部署到nexus repo?我的问题是开发人员正在将所有类型的罐子上传到nexus回购中,我无法知道谁做了什么以及为什么?我如何对它们强制执行规则,以便在将任何jar上传到nexus之前必须输入注释?有没有办法在mvn/nexus中这样做???

珍妮

maven-2 nexus

8
推荐指数
1
解决办法
739
查看次数

为什么哈德森"mvn clean install"构建比命令行上的3-6倍长?

我们在CI服务器(哈德森)上看到相对较长的构建时间,并且它们开始妨碍我们.我知道哈德森所做的不仅仅是调用maven而且我很乐意为它提供10-20%的工作时间,但是数量级减速似乎太多了.

任何人都知道为什么会这样,以及如何解决问题?我将首先说出不是原因:

  • 虚拟机hudson正在运行:在命令行上,它与我的开发PC大致相同的时间
  • 其他并发任务:我确保没有任何东西从构建任务中转移资源

maven目标实际上是干净和安装,没有任何花哨和资源密集,如javadoc,checkstyle等.查看hudson构建任务控制台输出,当"从[我们的Nexus artefact存储库]中检索以前的构建号"时,似乎有延迟,但我不知道一个简单的方法来衡量这一步的表现,发布一个人工制品似乎太简单了,无法证明速度的总差异.

(问题也在这个帖子中描述)

更新:

我们已将Hudson/Jenkins升级到最新版本,并且已经能够使用计时插件.精简版:

  • 好消息:我们现在知道nexus导致了这个问题
  • 坏消息:我们仍然不知道为什么

更多细节

在我们的一个真正的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会在上传人工制品时记录以下内容:

...

2011-04-05 14:38:53 DEBUG [jpsc28za2RtYQ==] -
Run Code Online (Sandbox Code Playgroud)

osnpslfDefau~ - 复制缓冲区大小为4096的流

2011-04-05 14:39:55 DEBUG [ython-2.5.2.jar] - org.mortbay.log   
Run Code Online (Sandbox Code Playgroud)

- RESPONSE /nexus/content/groups/public/org/python/jython/2.5.2/jython-2.5.2.jar 200

2011-04-05 14:40:07 DEBUG [-2.5.2.jar.sha1] - org.mortbay.log   
Run Code Online (Sandbox Code Playgroud)

- 请求/nexus/content/groups/public/org/python/jython/2.5.2/jython-2.5.2.jar.sha1 on

...

2011-04-05 14:40:12 DEBUG [-2.5.2.jar.sha1] - org.mortbay.log   
Run Code Online (Sandbox Code Playgroud)

- RESPONSE /nexus/content/groups/public/org/python/jython/2.5.2/jython-2.5.2.jar.sha1 200

2011-04-05 14:43:45 DEBUG [ndex.properties] - org.mortbay.log   
Run Code Online (Sandbox Code Playgroud)

- 请求org.mortbay.jetty.HttpConnection@141a720上的/nexus/content/groups/public/.index/nexus-maven-repository-index.properties

... …
Run Code Online (Sandbox Code Playgroud)

performance maven-2 hudson nexus jenkins

8
推荐指数
1
解决办法
2250
查看次数

Maven部署忽略maven-versions插件设置的项目版本

我有一个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",它就可以了.有任何线索如何解决这个问题?

parameters nexus maven jenkins

8
推荐指数
1
解决办法
1790
查看次数

Maven:为什么工件文件名中缺少-SNAPSHOT后缀?

我的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组包括releasessnapshotsrepo.

我没有配置这些回购settings.xml- 这是问题吗?或者我还做错了什么?

snapshot nexus artifact maven

8
推荐指数
2
解决办法
1万
查看次数

Artifactory或Nexus有什么意义,我该如何使用它们?

在研究CI工具时,我发现CI的许多安装也集成到SonaType Nexus和JFrog Artifactory等工件库中.

这些工具听起来与Maven高度集成.我们不使用Maven,也不编译Java.我们使用Qt/qmake/make编译C++,这个版本对我们来说非常有用.我们仍在调查CI工具.

使用Artifact存储库有什么意义?

归档到Nexus或Artifactory(或Archiva)应该是我们的制造链中的一个步骤,还是CI链的一部分,还是它可能是?

我如何使我们的"make"构建或perl/bash/batch脚本与它们交互?

qmake archiva nexus artifactory binary-repository

8
推荐指数
1
解决办法
4488
查看次数

maven没有从settings.xml中选择存储库的用户名

我在〜/ .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)

java deployment nexus maven

8
推荐指数
2
解决办法
5352
查看次数

从maven在nexus中部署工件会出现错误"返回代码是:401"?

我在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 maven

8
推荐指数
1
解决办法
4万
查看次数

Sonatype Nexus:如何在maven的settings.xml中为多个存储库设置单个服务器凭据?

我们在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)

nexus sonatype maven

8
推荐指数
1
解决办法
1万
查看次数

kubectl无法从私有存储库中提取图像

我正在运行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)

nexus docker kubernetes kubectl kubeadm

8
推荐指数
1
解决办法
3万
查看次数

Gradle Maven发布到delombok的源代码

我正在使用以下设置:

  • Gradle 5.2.1
  • 关系发布
  • 龙目岛1.18.6
  • lombok gradle插件io.freefair.lombok 3.1.4

我想在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 gradle lombok build.gradle maven-publish

8
推荐指数
1
解决办法
272
查看次数