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
我有一个生成 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