【问题标题】:downloading lastfinished build from teamcity从 teamcity 下载 lastfinished build
【发布时间】:2013-12-04 14:31:50
【问题描述】:

我正在使用 Perl 的 File::Fetch 从 Teamcity 中最后完成的构建中下载文件。这工作正常,除了文件是版本化的,但我没有得到版本号。

sub GetTeamcityFiles {
    my $latest_version = "C:/dowloads"
    my $uri = "http://<teamcity>/guestAuth/repository/download/bt11/.lastFinished/MyApp.{build.number}.zip";

    # fetch the uri to extract directory 
    my $ff = File::Fetch->new(uri => "$uri");
    my $where = $ff->fetch( to => "$latest_version" );

这给了我一个文件: C:\downloads\MyApp.{build.number}.zip.

但是,下载的文件的名称中包含内部版本号。不幸的是,zip 中没有版本文件,所以这是我告诉我下载了什么文件的唯一方法。有没有办法得到这个版本号? c:\downloads\MyApp.12345.zip

【问题讨论】:

    标签: perl teamcity


    【解决方案1】:

    随着构建配置修改

    如果您能够在 TeamCity 中修改构建配置,则可以轻松地将构建号嵌入到 zip 文件中。

    • 创建新的构建步骤 - 选择命令行
    • 对于脚本,请执行以下操作:echo %build.number% &gt; version.txt
    • 这会将 version.txt 放在 TeamCity 中构建文件夹的根目录中,您可以稍后在创建它时将其包含在您的 zip 中。
    • 您可以稍后读取该文件。

    我现在无法访问我的服务器,所以我没有参数的确切名称,但输入 %build 会拉出可供选择的 TeamCity 参数列表,我认为你追求的是 %build.number%。


    无需修改构建配置

    如果您无法修改配置,您将需要 egrep 之类的东西:

    $ echo MyApp.12.3.4.zip | egrep -o '([0-9]+.){2}[0-9]+'
    > 12.3.4
    
    $ echo MyApp.1234.zip | egrep -o '[0-9]+'
    > 1234
    

    看起来你在 Windows 上运行;在这些情况下,我使用UnxUtils & UnxUpdates 来访问这样的实用程序。它们非常轻量级,不安装到注册表,只需将它们添加到您的系统 PATH。

    【讨论】:

    • 你是对的,我在windows上运行。不幸的是,我没有能力修改配置。还有其他文件,但我不关心它们。那么也许还有另一种方法可以获得最后一个完成的构建?如果我可以将所有 zip 文件转储到一个目录中,我就可以从名称中去掉版本号,
    • 我假设您需要内部版本号,但如果您只需要从文件名中删除它,那么只需一个简单的移动命令即可。你不会关心内部版本号是什么,所以一个简单的动作就可以解决它; Windows 命令提示符为move MyApp.*.zip MyApp.zip。如果您愿意,在您的 perl 脚本中,您可以使用正则表达式来处理其他文件变得更复杂一些;匹配内部版本号之前的模式和内部版本号 .zip,并将其作为第一个匹配 + .zip 输出。
    • 我确实需要内部版本号。我的意思是如果我可以从名称中去掉版本号并将其保存在变量文本文件中。任何。我使用这个内部版本号(手动执行此操作时)用版本号重命名旧的日志/结果/安装目录。不幸的是,我是 {build.number}。我希望有一张通配符,所以它会抓住 MyApp 并将其保存为真实名称.. 所以 MyApp.1.2.0.4
    猜你喜欢
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多