我有一个生成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。
提前多多感谢!!!!
答案 0 :(得分:1)
我自己找到了一种方法,而且它是迄今为止最简单的方法,你在mvn deploy:delpoy文件语法中拥有了version id属性。如果我们编辑它以包含分支名称和构建,则很容易将其添加到rpm名称。就我而言,我是这样做的:
-Dversion = $ {RPM_VERSION} - $ {BRANCH_NAME} _ $ {BUILD_NUMBER} -SNAPSHOT
答案 1 :(得分:0)
我使用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 specfile中(我的Makefile
还设置了RPM_RELEASE
和RELEASE_TAG
之类的其他内容):
Release: %{RPM_RELEASE}%{?RELEASE_TAG}%{?COMMIT_TAG}%{?dist}