如何从脚本中编辑"Version: xxx"以自动化 debian 软件包构建?



Debian 控制文件有这样一行(以及其他许多行):

  Version: 1.1.0

我们使用 jenkins 将我们的应用程序构建为.deb包。 在 Jenkins 中,我们正在做这样的事情:

 cp -r $WORKSPACE/p1.1/ourap/scripts/ourapp_debian $TARGET/
 cd $TARGET
 fakeroot dpkg-deb --build ourapp_debian

我们想在我们的控制文件中做这样的事情:

 Packages: ourapp
 Version: 1.1.$BUILD_NUMBER

但显然这是不可能的。

因此,我们需要类似 sed 脚本的东西来查找以 Version 开头的行:并用常量加上 Jenkins 创建的 BUILD_NUMBER env var 替换它后面的任何内容。

我们尝试过这样的事情:

$ sed -i 's/xxx/$BUILD_NUMBER/g' control

然后把"版本:xxx"放在我们的文件中,但这不起作用,一定有更好的方法吗?

有什么想法吗?

我们不使用更改日志,因为此软件包将安装在没有人可以访问的服务器上。 更改日志是提供给客户的 Word 文档。我们不使用也不需要任何 Debian 辅助工具。

创建两个文件:

F.awk

function vp(s) { # return 1 for a string with version info
    return s ~ /[ t]*Version:/
}
function upd() { # an example of version number update function
    v[3] = ENVIRON["BUILD_NUMBER"]
}
vp($0) {
    gsub("[^.0-9]", "") # get rid of everything but `.' and digits
    split($0, v, "[.]") # split version info into array `v' elements
    upd()
    printf "Version: %s.%s.%sn", v[1], v[2], v[3]
    next # done with this line
}
{ # print the rest without modifications
    print 
}

f.示例

rest1
Version: 1.1.0
rest2

运行命令

BUILD_NUMBER=42 awk -f f.awk f.example

预期输出为

rest1
Version: 1.1.42
rest2

用单引号:

sed -ri "s/(Version.*.)[0-9]*/1$BUILD_NUMBER/g" <control file>

sed  -ni  "/Version/{s/[0-9]*$/$BUILD_NUMBER/};p" <control file>

最新更新