Nexus OSS - 我如何添加分支名称并构建 no 以及 rpm 包名称并将其推送到 nexus oss?

Nexus OSS - How can i add branch name and build no along with the rpm package name and push it to nexus oss?

我有一个生成 rpm 的 jenkins 构建,这个 rpm 使用以下命令部署到 nexus oss 存储库进行存储。

mvn deploy:deploy-file -DgroupId=com.company.app.rpm.snapshot -DartifactId=$RPM_NAME -Dversion=$RPM_VERSION -DgeneratePom=true -Dpackaging=rpm -DrepositoryId=ReleaseCandidate -Durl=${NEXUS_URL}/ReleaseCandidate -Dfile=$rpm

效果很好。目前这是这样设置的,当 tfs-git 上的主分支创建一个 rpm 时,它会使用这个命令发送到 Nexus OSS。

但我现在想做的是让每个功能分支也能做到这一点。我想获取功能分支名称以及生成该 rpm 的 jenkins 构建号,该 rpm 也是 nexus oss 中 rpm 的一部分。为此,我尝试编辑 artifactId=$RPM_NAME 并将其设为

-DartifactId=${BRANCH_NAME}_${BUILD_NUMBER}_${RPM_NAME}

但显然这种格式是不允许的,它会抛出错误

 'artifactId' with value 'branchname_18' does not match a valid id pattern.[ERROR] -> [Help 1]

我需要你们的建议。我如何使分支名称和构建在 nexus 存储库中不可用,以及为该分支生成的 rpm 和相应的构建号。

提前致谢!!!!

我使用 Makefile 调用 rpmbuild 执行非 Jenkins 特定 git 的东西来获取分支名称:

GIT_BRANCH:=$(notdir $(shell git name-rev --name-only HEAD | perl -pe 's/[~^]+\d*$$//'))

这允许我的团队构建 RPM 以在他们的本地机器上进行测试。然后添加一个 Jenkins 内部版本号(在 Makefile 中):

COMMIT_TAG=%{nil}
( ... cut ... )
  # Get Jenkins number in there too
  ifneq "$(BUILD_NUMBER)" ""
    COMMIT_TAG+=_J$(BUILD_NUMBER)
  endif
  ifneq "$(GIT_BRANCH)" "undefined"
    ifneq "$(GIT_BRANCH)" "master"
      COMMIT_TAG+=_$(shell echo $(GIT_BRANCH)|tr - _)
    endif
  endif

因此,将 Jenkins 内部版本号“_J000”和非 master 分支名称(没有连字符)放入 COMMIT_TAG。后来:

export COMMIT_TAG
rpmbuild --define="COMMIT_TAG $(shell echo "$(COMMIT_TAG)" | tr -d ' ')"

所以现在有一个同名的 RPM 宏。在 RPM 规范文件中(我的 Makefile 还设置了其他的 RPM_RELEASE 和可选的 RELEASE_TAG):

Release: %{RPM_RELEASE}%{?RELEASE_TAG}%{?COMMIT_TAG}%{?dist}

我自己找到了一种方法,这是迄今为止最简单的方法,您在 mvn deploy:delpoy 文件语法中有版本 ID 属性。如果我们编辑它以包含分支名称和构建号,它很容易被添加到 rpm 名称中。就我而言,我是这样做的:

-Dversion=${RPM_VERSION}-${BRANCH_NAME}_${BUILD_NUMBER}-SNAPSHOT