Jenkins + Maven - 如何在 release:perform 清理项目之前执行 shell 脚本

Jenkins + Maven - How to execute shell script before release:perform cleans the project

我有一个 Maven 项目,它在 mvn 包上使用 maven-assembly-plugin 生成一个 zip 文件

MyProy
|--pom
|--src/...
|--target
     |---MyProy-something-1.0.0-SNAPSHOT-zip (contains /1.0.0-SNAPSHOT/...)

我创建了一个 Jenkins 作业并将 shell 脚本执行配置为 post 步骤。此脚本将 zip 文件复制到文件夹 (/something) 并解压缩

|-/something
     |---1.0.0-SNAPSHOT
             |---...

这适用于构建。但是,我想在发布版本时做同样的事情。我安装了 Jenkins 发布插件并在 "configure release build" 中添加了这个任务:

  1. 发布前构建 -> Maven 任务mvn release:prepare
  2. 发布构建成功后->Maven任务mvn release:perform
  3. 成功发布构建后 -> 执行 shell 脚本 - 复制 zip 并解压。

我看到 mvn release:perform 正确执行,例如版本 1.0.0 但问题是当脚本 (3.) 启动时它适用于下一个开发版本 (1.0.1-SNAPSHOT ) 而不是发布版本 (1.0.0)。

我是这样解决问题的:

  1. 发布构建前

    1. mvn release:prepare
  2. 发布构建成功后

    1. mvn release:perform
    2. mvc scm:checkout -DscmVersion=${releaseVersion} -DscmVersionType=tag
    3. -f ${WORKSPACE}/target/checkout 全新安装
    4. 执行 shell 脚本并复制并解压

总而言之,在 release:perform 我签出全新标签后,在下载标签的位置执行全新安装,最后我执行复制 zip 并解压缩的脚本。