标签: maven-release-plugin

使用Jenkins/Git增加Maven项目版本

我正在使用Jenkins构建Maven Java项目并将它们部署到Nexus存储库.我也使用Git,虽然我更习惯Subversion,所以我的Git知识有限.

我想Jenkins/Maven:

  1. 将功能分支合并到集成分支中
  2. 构建合并代码,运行单元测试
  3. 如果它们通过,则增加Maven版本号
  4. 将合并代码推送到origin的集成分支
  5. 将工件部署到Nexus存储库

我收集Git合并可以实现:http://twasink.net/2011/09/20/git-feature-branches-and-jenkins-or-how-i-learned-to-stop-worrying-about-破碎构建/

我也读了很多关于maven-release-plugin.

我不确定如何达到上述结果.如果我将SCM细节硬编码到每个项目的POM中,那么不会maven-release-plugin仅仅在存储库上而不是Jenkins的本地存储库中执行操作吗?

如果我使用Jenkins将环境变量传递给Maven以指定版本号的解决方案,那么我希望在我的IDE中有本地版本解析问题.

git hudson maven maven-release-plugin jenkins

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

Maven发布:准备无法提交标记

尝试在之前成功发布的maven项目上执行发布.

当我执行mvn release:prepare时,系统会提示我发布标记和新快照标记以及项目构建.

但当它试图推向遥控器时,我明白了

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.0:prepare (default-cli) on project NeuralAnalysis: Unable to tag SCM [ERROR] Provider message: [ERROR] The git-push command failed. [ERROR] Command output: [ERROR] To ssh://gitosis@10.41.129.2/NeuralAnalysis.git [ERROR] ! [rejected] NeuralAnalysis-1.5.6 -> NeuralAnalysis-1.5.6 (non-fast-forward) [ERROR] error: failed to push some refs to 'ssh://gitosis@10.41.129.2/NeuralAnalysis.git' [ERROR] To prevent you from losing history, non-fast-forward updates were rejected

事实上,尝试 git push ssh://gitosis@10.41.129.2/NeuralAnalysis.git NeuralAnalysis-1.5.6手动执行,也会以同样的抱怨退出.

表演git pull'已经是最新的'.git branch显示我在'主人'.git push origin给'一切都是最新的'.

使用Tower查看存储库显示'master','origin/master'和'NeuralAnalysis-1.5.6'在最后一次提交时都是相同的.工作目录包含release.properties和pom.xml.releaseBackup文件.

它看起来像整个存储库的一切都很好.

git maven-release-plugin

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

使用git发布maven的插件,如果在进程中推送了提交,则会出错

我们使用git repository和maven release插件.在第一个构建步骤中,我们将所有更改提取到本地存储库,然后在下一个中运行mvn release:prepare release:perform.release:prepare更新工作区,更新pom文件中的版本,在存储库中创建标记,运行所有测试,构建jar等.如果没问题,则将本地存储库更改推送到远程更改(更新后的poms和标记创建).

问题在于,当有人同时推动一些变化时,从maven推送失败.错误消息是:

error: failed to push some refs to 'http://<my_repository>'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'Note about
fast-forwards' section of 'git push --help' for details.
Run Code Online (Sandbox Code Playgroud)

有人有类似的问题吗?怎么解决?

git release maven-3 maven maven-release-plugin

7
推荐指数
1
解决办法
1550
查看次数

从Maven发布出来的进程:执行插件忽略用户的settings.xml?

根据文档,Maven版本:执行目标检查项目,然后分叉一个新的Maven实例来构建它.由于某种原因,forked实例似乎忽略了用户settings.xml,这导致我的情况出错,因为该文件具有用于在父pom中组成存储库URL的属性的定义.

  • 用户的settings.xml
    "nexus"配置文件中始终处于活动状态的属性的定义.

    <profiles>
      <profile>
        <id>nexus</id>
        <properties>
          <dist.url>http://host.com/nexus/content/repositories</dist.url>
        </properties>
      </profile>
    </profiles>
    
    <activeProfiles>
      <activeProfile>nexus</activeProfile>
    </activeProfiles>
    
    Run Code Online (Sandbox Code Playgroud)
  • Parent的pom.xml
    使用定义的属性来组成存储库的URL.

    <distributionManagement>
      <repository>
        <id>nexus</id>
        <url>${dist.url}/releases</url>
      </repository>
    </distributionManagement>
    
    Run Code Online (Sandbox Code Playgroud)
  • 执行命令:

    mvn release:perform
    
    Run Code Online (Sandbox Code Playgroud)
  • 输出(表示已成功检出,构建,测试和打包项目):

    [INFO] Uploading: ${dist.url}/releases/com/acme/access/my-project/1.0/my-project-1.0.jar
    [INFO] [INFO] ------------------------------------------------------------------------
    [INFO] [INFO] BUILD FAILURE
    [INFO] [INFO] ------------------------------------------------------------------------
    [INFO] [INFO] Total time: 3.659s
    [INFO] [INFO] Finished at: Wed Aug 01 14:40:23 EDT 2012
    [INFO] [INFO] Final Memory: 21M/307M
    [INFO] [INFO] ------------------------------------------------------------------------
    [INFO] [WARNING] The requested profile "nexus" could not be activated because it …
    Run Code Online (Sandbox Code Playgroud)

maven maven-release-plugin

7
推荐指数
1
解决办法
3747
查看次数

在Maven发布期间丢失的属性:执行

我正在从TeamCity运行maven构建并使用build.vcs.number将Subversion修订版写入我的清单.在使用Subversion作为VCS的任何Maven构建中,TeamCity补充道

-Dbuild.vcs.number=1234
Run Code Online (Sandbox Code Playgroud)

到maven命令行,其中1234是正在构建的分支中的最新修订版.

然后在我的pom.xml中,我有

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
            </manifest>
            <manifestEntries>
                <build>${build.vcs.number}</build>
            </manifestEntries>
        </archive>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

这一切都正常,直到我运行Maven release:perform(也来自TeamCity),此时$ {build.vcs.number}变为null,即使我在TeamCity构建日志中可以看到该属性是在命令中传入的线.

maven-release-plugin文档暗示Maven在执行目标期间的某个时刻运行分叉进程 - 这就是我遇到问题的原因吗?

有没有办法可以确保将此特定属性传递给该分叉进程?

teamcity system-properties maven maven-release-plugin

7
推荐指数
1
解决办法
1620
查看次数

maven release plugin release.properties文件包含未加密的密码

我正在运行maven发布插件(org.apache.maven.plugins:maven-release-plugin:2.3.2),并注意到scm的密码在通过via.properties文件时以明文形式保存命令行.我想知道是否有办法解决这个问题.

我正在使用Hudson自动执行发布过程,svn用户名和密码通过Hudson传递到命令行.这样做的原因是执行发布准备的人可以更改,我有多个hudson作业共享一个settings.xml来发布不同的项目.

我传递的参数如下:-Dtag = $ {svn.label} -DreleaseVersion = $ {maven.releaseVersion} -DdevelopmentVersion = $ {maven.developmentVersion} -Dusername = $ {svn.username} -Dpassword = $ { svn.password} -DscmCommentPrefix ='[maven-release-plugin] $ {env.BUILD_URL}'

release.properties文件是在发布期间创建的:prepare,但我不认为它是必要的,因为我在命令行中传递了所有信息.创建此release.properties文件时,它包含纯文本密码.这是有问题的,因为可以使用hudson来浏览工作区,因此任何有权访问hudson的人都可以通过浏览器打开文件来查看密码.

有没有办法不创建release.properties文件,或者不保存文件中的密码?我意识到加密的密码可以保存在settings.xml文件中,但是此文件在多个作业之间共享,并且不能由运行作业的人员编辑.

maven-release-plugin

7
推荐指数
1
解决办法
809
查看次数

如何在多模块项目中处理maven版本?

我有一个像这样的maven项目基础设施:

/trunk/all/pom.xml
/trunk/all/libs/lib1/pom.xml
               /lib2/pom.xml
               ...
/trunk/all/projects/p1/pom.xml
                   /p2/pom.xml
                   ...
Run Code Online (Sandbox Code Playgroud)

你看,我有很多库和许多使用这些库的项目.

所有这些都结合到一个多模块项目中,因为我喜欢

  • 将顶级项目导入eclipse并立即提供所有库和项目
  • mvn test在完成一些全局重构之后,只做一个单独的编译和测试我的所有代码.

目前,我的所有模块都是版本1.0-SNAPSHOT.

现在我想发布项目,p2并且所有库都p2使用(例如lib1lib2)版本1.0.从那以后,我做了一些修改代码lib1,但没有lib2.

我希望下一个版本p2是版本1.1,lib1在版本中使用1.1(它自上一版本以来已被修改),但lib2仍然在版本中1.0(因为它没有被修改).

更一般:如果我发布了一个版本,我想增加自上次发布以来发布项目的次要编号以及所有已更改的库.

我是否必须自己照顾所有模块版本,或者是否有能够为我完成所需工作的插件?

maven-2 maven-release-plugin

6
推荐指数
1
解决办法
4177
查看次数

Maven的最佳存储库管理

我正在使用maven和Jenkins进行自动构建.我正在为Maven寻找最好的开源存储库管理.这样我就可以通过资源库经理在Maven和jenkins之间进行整合.

maven-plugin maven maven-release-plugin jenkins binary-repository

6
推荐指数
1
解决办法
1753
查看次数

获取mvn release:回滚以删除GIT中的标记

我有一个maven项目,存储在我们的GIT存储库中.当我发布这个项目时mvn release:prepare,mvn release:perform有时它会在后面的步骤中失败,但无论如何都会为此版本创建一个标记.此标记不会被删除mvn release:rollback,如果我再次尝试准备该版本,则会因此标记已存在错误而失败:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5.2:prepare (default-cli) on project lwl-module: Unable to tag SCM
[ERROR] Provider message:
[ERROR] The git-tag command failed.
[ERROR] Command output:
[ERROR] fatal: tag 'lwl-module-1.5.1' already exists
[ERROR] -> [Help 1]
[ERROR]
Run Code Online (Sandbox Code Playgroud)

有没有办法mvn release:rollback删除我们的GIT存储库中的最后一个标签?

我正在使用此版本插件:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.5.2</version>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

git rollback maven maven-release-plugin git-tag

6
推荐指数
1
解决办法
3396
查看次数

从Build Pipeline推送到本地Azure DevOps Git

精简版

有人能告诉我如何在Azure DevOps构建管道中设置"命令行脚本"任务,该管道将更改推送到本地Git存储库(事实上,管道所基于的Git存储库)?

无论我尝试什么,我的脚本总是在打印后超时Pushing commits to git.

更长的版本

我们正在将现有的Java/Maven项目从Jenkins构建服务器迁移到Azure DevOps构建环境,我正在尝试设置一个模仿Jenkins"Release Staging"功能的构建管道.

我的第一次尝试是直接在签出的源上调用Maven发布插件.这涉及到几个障碍,其中大部分都是我能够以某种方式克服的:

  1. 标准的Azure DevOps git环境没有设置所需的配置值"user.email"和"user.name"; 这可以通过git config在推送之前调用单独的"命令行脚本"任务来解决.
  2. Azure DevOps以"分离的HEAD状态"检出源 - 为解决此问题,安装脚本任务也会调用git checkout master.

设置完成后,我的Maven调用脚本会运行到释放插件尝试推送到Git的位置; 读取日志文件中的相应行

[INFO] Executing: cmd.exe /X /C "git push https://xxx.visualstudio.com/YYY/_git/zzz refs/heads/master:refs/heads/master"
[INFO] Working directory: D:\a\1\s</code>
Run Code Online (Sandbox Code Playgroud)

之后,在超时发生之前没有任何事情发生(至少没有记录任何内容):

##[error]The operation was canceled.
##[section]Finishing: Maven pom.xml
Run Code Online (Sandbox Code Playgroud)

为了找出导致这个问题的原因,我尝试了一些事情,其中​​包括:

  • 禁用maven调用并git push直接从脚本调用,
  • 注册一个"商店"类型的Git凭证助手(假设一个身份验证问题负责超时),

但没有成功.我现在已经没有想法如何git push接到工作电话了 - 这里是否有人可以帮助我?

PS:你可能会说,就Azure DevOps而言,我是一个新手,所以我肯定不知道该系统的所有技巧和功能.特别是,我不知道是否有任何东西提供与Maven发布插件相同的功能.我们确实使用Azure DevOps包管理,但我们希望为快照和发布版本(Nexus等工具的方式)保留单独的订阅源,因此我们必须有一个机制来自动推进版本号,签出和返回构建包装模块并将其发布到发布订阅源.

如果有人可以提出另一种方法来实现这一点,我也愿意接受建议.

git maven maven-release-plugin azure-devops azure-pipelines

6
推荐指数
3
解决办法
3844
查看次数