Jenkins 如何编辑";版本:xxx“;从脚本自动生成debian软件包?

Jenkins 如何编辑";版本:xxx“;从脚本自动生成debian软件包?,jenkins,sed,Jenkins,Sed,Debian控制文件有这样一行(在许多其他文件中): 我们使用jenkins将应用程序构建为.deb包。在詹金斯,我们正在做这样的事情: cp -r $WORKSPACE/p1.1/ourap/scripts/ourapp_debian $TARGET/ cd $TARGET fakeroot dpkg-deb --build ourapp_debian $ sed -i 's/xxx/$BUILD_NUMBER/g' control 我们希望在控制文件中执行以下操作: Packag

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

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

 cp -r $WORKSPACE/p1.1/ourap/scripts/ourapp_debian $TARGET/
 cd $TARGET
 fakeroot dpkg-deb --build ourapp_debian
$ sed -i 's/xxx/$BUILD_NUMBER/g' control
我们希望在控制文件中执行以下操作:

 Packages: ourapp
 Version: 1.1.$BUILD_NUMBER
但显然这是不可能的

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

我们已经尝试过这样的事情:

 cp -r $WORKSPACE/p1.1/ourap/scripts/ourapp_debian $TARGET/
 cd $TARGET
 fakeroot dpkg-deb --build ourapp_debian
$ sed -i 's/xxx/$BUILD_NUMBER/g' control
然后把“Version:xxx”放在我们的文件中,但这不起作用,必须有更好的方法吗

有什么想法吗

我们不使用更改日志,因为这个包将安装在没有人可以访问的服务器上。变更日志是提供给客户的word文档。 我们不使用或不需要任何Debian helper工具。

创建两个文件:

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.%s\n", 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
创建两个文件:

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.%s\n", 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-ri“s/(Version.*\)[0-9]*/\1$BUILD\u NUMBER/g”

sed-ni”/Version/{s/[0-9]*$/$BUILD_NUMBER/};p“
带单引号:

sed -ri "s/(Version.*\.)[0-9]*/\1$BUILD_NUMBER/g" <control file>
sed-ri“s/(Version.*\)[0-9]*/\1$BUILD\u NUMBER/g”

sed-ni”/Version/{s/[0-9]*$/$BUILD_NUMBER/};p“

为什么不从头开始创建文件,而不是替换某些内容并在上面添加一行?仅此命令:
sed-i's/xxx/$BUILD\u NUMBER/g'control
您应该用双引号引用。为什么不从头开始创建文件,而不是替换某些内容并在上面添加一行?仅此命令:
sed-i's/xxx/$BUILD\u NUMBER/g'控件
应使用双引号报价。。