如何通过dpkg-buildpackage在构建服务器上进行自动化构建时设置版本号和软件包文件名?

我们的构建服务器通过dpkg-buildpackage构建Ubuntu软件包(*.deb)。服务器通过git签出源代码,并通过make <target>运行构建。源目录包含debian/子目录,其中包含dpkg配置文件。
我想将内部构建计数器编号添加到当前软件包版本中,并进一步设置软件包文件名,但dpkg-buildpackage不允许我控制生成的package_version_arch.deb的外观。我该如何实现这一点?
2个回答

看一下git-buildpackage

Customizing snapshot numbers

If the auto incrementing of the snapshot number doesn't suite you needs you can give any python expression that evaluates to a positive integer to calculate the new snapshot number:

gbp dch -S -a --snapshot-number=1  
gbp dch -S -a --snapshot-number='snapshot + 2'
gbp dch -S -a --snapshot-number='os.popen("git-log --pretty=oneline | wc -l").readlines()[0]'
gbp dch -S -a --snapshot-number=`git-log --pretty=oneline debian/0.3.3 | wc -l`

You can also add the snapshot-number calculation to gbp.conf:

[DEFAULT]
snapshot-number = os.popen("git-log --pretty=oneline | wc -l").readlines()[0]

dch本身既不接受-S选项,也不接受--snapshot-number选项。 - Stefan
@Stefan为什么要这样做,当git-buildpackage提供了这个选项呢?在这种情况下,将dch视为对gbp的命令,而不是作为参数传递给dch可执行文件。请参阅手册页面:http://manpages.ubuntu.com/manpages/trusty/man1/gbp-dch.1.html - muru
3我明白。但是我仍然不想使用git-buildpackage,而只想单独使用dpkg-buildpackage,因为git-buildpackage对项目/目录布局有一定的要求。 - Stefan
@Stefan,使用dch命令的--newversion选项手动设置版本号是否有效? - muru

您可以在控制文件sampkg/DEBIAN/control中更改版本号。

控制文件是Debian软件包的核心,它包含所有相关元数据。例如软件包名称、版本、支持的架构和依赖关系都包含在此文件中。

Package: sampkg
Architecture: all
Essential: no
Section: web
Priority: optional
Depends: python (>=2.3)
Maintainer: Swaminathan Mathivanan
Description: Sample package.

最终的软件包名称将是sampkg_1.0.0_all.deb


我知道,但我需要以自动化的方式来完成。例如,在控制文件中的版本可能是1.2.3ubuntu3~ppa3,而我想要添加我的构建号码,变成1.2.3ubuntu3~ppa3-<buildnumber> - Stefan
为此,您需要再保留一个临时控制文件,用于向deb软件包中添加<buildNumber>。一旦构建号准备好,您可以使用sed/replace将构建号替换为临时控制文件,并将其保存到原始控制文件中。例如:Version: 1.0.0.$$BUILD$$。 - msnfreaky
如何在dpkg-buildpackage中指定自定义控制文件? - Stefan