如何让TeamCity压缩一个zip文件?

5
我的问题:我在TeamCity上构建了一个生成zip文件的项目:Files.zip。它包含很多文件,而且zip文件是这些文件的良好容器。
不幸的是,由于历史原因,这个zip文件的标题中没有版本号。我希望它有一个版本号,像这样:Files.1.2.3.4.zip。
我想也许我可以创建一个包含zip文件的容器,并为其添加一个版本号,就像这样:ContainingZip.1.2.3.4.zip!Files.zip。所以Files.zip被压缩到另一个zip文件中!(疯狂)
但是我无法通过TeamCity和它的工件路径来完成这个操作?
我觉得应该可以这样做: /**/。=> Files.Zip => ContainingZip.1.2.3.4.zip!Files.zip 但只会生成Files.Zip 分成两步来做,也不太行: /**/。=> Files.Zip Files.Zip => ContainingZip.1.2.3.4.zip 这也不行,因为在检查工件是否存在时,Files.zip并不存在。
有人知道怎么做吗? (还是我必须在构建步骤中预先压缩?)
谢谢。

版本号数值从哪里来? - Paul Hunt
是谁创建了 Files.zip?是你的构建步骤,还是一个 /**/. => Files.Zip 的工件规则? - sferencik
构件规则。我们目前有"/**/. => Files.Zip"。但请注意,Files.zip是我们需要的名称和格式,只是我想再次将其压缩成一个带版本号的zip文件。 - TinyRacoon
你可以重写一个命令行(适用于Windows的PowerShell)脚本,仅将zip文件重命名。你真的需要压缩一个zip文件吗?如果确实需要,更好的选择是将其打包成tar文件。 - Biswajit_86
把文件压缩成tar格式有什么好处呢?(我们所有的系统都是Windows,供您参考。) - TinyRacoon
你可以尝试使用自定义的命令行命令。 - KumailR
2个回答

1

回答:TeamCity不允许在构件窗口中进行双重压缩。您必须使用构建步骤。

您可以通过 PowerShell 构建步骤来执行以下操作...

如果您有 PowerShell 5+,则可以使用 Compress-Archive。或者,对于旧版 PowerShell,此处https://dev59.com/-HM_5IYBdhLWcg3w9oMA提供了很好的信息。

通过 Ant 构建步骤:

<?xml version="1.0" encoding="UTF-8"?>
<project name="zipper" default="zip" basedir=".">

<property name="project-name" value="Files.zip" />
<property name="folder-to-zip" value="./FolderToZip/" />

<target name="zip">
<delete file="${project-name}" />
<zip destfile="${project-name}" basedir="${folder-to-zip}" excludes="${project-name}" />
</target>
</project>

0

您可以在工件路径中使用参数引用,因此如果您定义了一个名为VersionNumber的配置参数,其中包含版本号值,并使用工件定义

/**/. => Files.%VersionNumber%.Zip

然后你将会得到期望的输出。


谢谢,但这并没有回答我的问题。我想知道如何将一个包含zip文件的构件放入另一个zip文件中。 - TinyRacoon
1
抱歉误解了。我不认为TeamCity允许您在一个构建配置中双重压缩文件,您需要创建第二个构建配置,仅依赖于第一个构建配置的工件,并使用它再次进行压缩。 - Paul Hunt
你应该将此作为答案提交。即使“不行”也是一种回答。 - TinyRacoon
这是一个老问题,但我非常确定使用文件名=> blah.zip,您可以将文件添加到zip包中。 - Aref Karimi
你可以使用7-zip或其他工具在命令行构建步骤中更新现有的zip文件,然后将结果输出为一个artifact。顺便说一句,我点赞了这个问题,因为它解决了我的问题(在TC中创建zip文件)。 - Dr. Andrew Burnett-Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接