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

问题描述 投票:0回答:2

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

非常感谢提前!!!!

jenkins build jenkins-pipeline nexus rpm
2个回答
1
投票

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

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


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规范文件中(我的Makefile也设置了其他像RPM_RELEASE和可选的RELEASE_TAG):

Release: %{RPM_RELEASE}%{?RELEASE_TAG}%{?COMMIT_TAG}%{?dist}
© www.soinside.com 2019 - 2024. All rights reserved.