【问题标题】:Nexus OSS - How can i add branch name and build no along with the rpm package name and push it to nexus oss?Nexus OSS - 我如何添加分支名称和 build no 以及 rpm 包名称并将其推送到 nexus oss?
【发布时间】:2018-03-05 20:55:25
【问题描述】:

我有一个 jenkins 构建,它生成一个 rpm,这个 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。

但我现在想做的是让每个功能分支也能做到这一点。我想获取功能分支名称以及生成该 rpm 的 jenkins 构建号,它也是 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 和相应的内部版本号。

提前非常感谢!!!!

【问题讨论】:

    标签: jenkins build jenkins-pipeline nexus rpm


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我使用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 命令行本身获取分支名称并在 nexus 中构建 no。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-24
      • 2016-11-30
      • 1970-01-01
      • 2014-07-05
      • 1970-01-01
      • 2016-07-27
      • 2022-01-01
      相关资源
      最近更新 更多