如何允许快照回购中的任何版本

How to allow any version in Snapshot repo

我们正在将功能分支构建到一个版本 'feature_' 中。每个功能构建将生成相同的版本。由于这些都没有发布,我想将工件部署到快照存储库中,但是 Nexus 不允许没有 'SNAPSHOT' 的版本进入快照存储库。

如何配置 Nexus 以允许存储库中的任何版本?

这实际上是一个Maven限制。你仍然可以使用像 feature_x-1.2.3-SNAPSHOT 这样的版本。

你到底想达到什么目的?

通过将“-SNAPSHOT”附加到分支版本解决了这个问题。 让 Jenkins 中的 Maven 使用正确的版本非常棘手。我现在解决的方法是这样的。在构建作业中配置 Git 以构建分支 origin/feature/*。那么:

  • 在'build'部分,首先要做的是执行shell命令来构造一个文件'env.properties',其中包含要使用的功能分支版本Maven 构建命令。

    echo BRANCH_VERSION="feature_${GIT_BRANCH##*/}-SNAPSHOT" > env.properties

    这使用了 Jenkins 的 GIT_BRANCH 环境 属性。 '##*/' 是一个 Bash Shell Parameter Expansion,它从参数值中去除除最后一个 '/' 字符之后的部分之外的所有内容。

  • 然后使用 Environment Injector Plugin 到 'inject environment variables' 到使用上一步创建的 'env.properties' 的构建作业。 在 'Properties File Path' 字段中输入 'env.properties'。

  • 使用 Maven 使用 'Invoke top-level Maven targets' 构建具有正确版本的版本化 pom: help:effective-pom -Dbuild.number=${BRANCH_VERSION} -Doutput=versioned-pom.xml。此步骤是必要的,否则 jar 工件中的 pom 不包含导致其他问题的正确版本。

  • 使用另一个 'Invoke top-level Maven targets' 步骤使用在上一步中创建的 pom 版本进行实际构建和部署:-f versioned-pom.xml clean source:jar deploy

这就是所有人。如果有人知道更简单的解决方案,请告诉我。