在RPM spec文件中使用Jenkins BUILD NUMBER

Name: My Software Version: 1.0.5 Release: 1 Summary: This is my software 

不知道是否有人曾经尝试过,或者是否容易,但是:

一个spec文件有两个独特的指标:

  • 版本(指定软件版本)
  • Release(它指定包的编号 – 如果你build立一个RPM,它被打破了,build立另一个,你释放“Release”号码。

我想知道如果有人尝试过,或者知道如何,我可以使用Jenkins $ BUILD_NUMBERvariables来dynamic更改Release号,从而每当新的成功构build完成时就增加Release号。

Solutions Collecting From Web of "在RPM spec文件中使用Jenkins BUILD NUMBER"

这已经很长时间了……幸好我没有基于rpm的系统,所以我无法测试这个。

您可以在命令行rpmbuild --define="version = ${env.BUILD_NUMBER}参数传递给rpmbuild rpmbuild --define="version = ${env.BUILD_NUMBER}

发布规范的代码片段以及用于构建rpm的脚本会很有帮助。 你不希望你的构建脚本编辑规范文件,我假设它从一些源代码管理下拉。

我一直在使用Jenkins内部版本号作为'release',并通过fpm进行打包。

夫妇fpm与詹金斯提供的一些全球性

 # $BUILD_ID - The current build id, such as "2005-08-22_23-59-59" (YYYY-MM-DD_hh-mm-ss) # $BUILD_NUMBER - The current build number, such as "153" # $BUILD_TAG - String of jenkins-${JOB_NAME}-${BUILD_NUMBER}. Convenient to put into a resource file, a jar file, etc for easier identification. 

在下面的示例命令中有一些模糊的变量,但$BUILD_NUMBER是我在这里发布的版本 (fpm将其称为迭代 )。

 fpm_out=$(fpm -a all -n $real_pkg_name -v $version -t rpm -s dir --iteration $BUILD_NUMBER ./*) 

在我的Jenkins设置中,我已经决定完全绕开版本编号。 相反,我使用自制脚本来生成并跟踪正在生成的各种版本。

在我的spec文件中:

 Version: %{_iv_pkg_version} Release: %{_iv_pkg_release}%{?dist} 

在Jenkins构建脚本中:

 # Just initialising some variables, and retrieving the release number. package="$JOB_NAME" # We use setuptools, so we can query the package version like so. # Use other means to suit your needs. pkg_version="$(python setup.py --version)" pkg_release="$(rpm-release-number.py "$package" "$pkg_version")" # Creating the src.rpm (ignore the spec file variables) rpmbuild --define "_iv_pkg_version $pkg_version" \ --define "_iv_pkg_release $pkg_release" \ -bs "path/to/my/file.spec" # Use mock to build the package in a clean chroot mock -r epel-6-x86_64 --define "_iv_pkg_version $pkg_version" \ --define "_iv_pkg_release $pkg_release" \ "path/to/my/file.src.rpm" 

rpm-release-number.py是一个简单的脚本,用于维护一个基于文件的数据库(JSON格式,便于维护)。 它可以同时处理运行,所以不用担心,但是如果你有构建奴隶(据我所知,我不使用它们,所以不能测试)。 你可以在这里找到源代码和文档。

结果是我得到以下包版本方案:

 # Build the same version 3 times foo-1.1-1 foo-1.1-2 foo-1.1-3 # Increment the version number, and build twice foo-1.2-1 foo-1.2-2 

PS:请注意,Jenkins构建脚本只是一个示例,创建rpmbuild目录结构和检索.src.rpm和.spec文件名的逻辑稍微复杂一些。