如何编辑"版本:xxx"从脚本自动化debian包构建?

时间:2016-04-25 10:43:30

标签: jenkins sed

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

  Version: 1.1.0

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

 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"在我们的文件中,但这不起作用,必须有更好的方法吗?

有什么想法吗?

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

2 个答案:

答案 0 :(得分:1)

创建两个文件:

<强> 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.example

rest1
Version: 1.1.0
rest2

运行命令

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

预期输出

rest1
Version: 1.1.42
rest2

答案 1 :(得分:1)

单引号:

Option Explicit
Dim blnDisableEvents As Boolean

Private Sub ListBox1_Change()
    If blnDisableEvents Then Exit Sub
End Sub

Private Sub ListBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Not Me.ListBox1.ListIndex = -1 Then
        blnDisableEvents = True
        Me.ListBox1.Selected(Me.ListBox1.ListIndex) = False
        blnDisableEvents = False
    End If

End Sub

Private Sub userform_initialize()
    Dim i As Integer
    With Me
        For i = 1 To 2
            .ListBox1.AddItem i
        Next
    End With

End Sub

OR

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