Nexus OSS - 我如何添加分支名称并在rpm包名称下构建no并将其推送到nexus oss?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nexus OSS - 我如何添加分支名称并在rpm包名称下构建no并将其推送到nexus oss?相关的知识,希望对你有一定的参考价值。
我有一个生成rpm的jenkins构建,并使用以下命令将此rpm部署到nexus oss repo进行存储。
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。
但我现在要做的是让每个功能分支都成为可能。我想获得功能分支名称以及jenkins构建no,生成的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 repo中创建分支名称和构建no,以及为该分支和相应的构建号生成的rpm。
非常感谢提前!!!!
我自己找到了一种方法,而且它是迄今为止最简单的方法,你在mvn deploy:delpoy文件语法中有版本id属性。如果我们编辑它以包含分支名称和构建,则很容易将其添加到rpm名称。在我的情况下,我这样做:
-Dversion = $ {RPM_VERSION} - $ {BRANCH_NAME} _ $ {} BUILD_NUMBER -SNAPSHOT
我使用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}
以上是关于Nexus OSS - 我如何添加分支名称并在rpm包名称下构建no并将其推送到nexus oss?的主要内容,如果未能解决你的问题,请参考以下文章
Sonatype Nexus OSS 无法加载 nexus-npm-repository-plugin