0

我正在使用 TeamCity 8 为我的网站设置 CI。对于网站,这很容易,因为我只需复制整个文件夹。

但是对于我们的 SQL 更新,我们进行了设置,以便在每个版本中,我们都有一个单独的文件夹。例如:

db
  update
    001
    002
    003
    ...
    018

因此,我试图弄清楚如何设置版本控制设置步骤以仅监视最后一个文件夹的更改。最坏的情况是,我可以监视整个更新树的变化,因为理论上,我们应该只对最后一个文件夹进行更改。

但是弄清楚如何指向最后一个文件夹会更干净,因为a)它将防止触发构建从对先前文件夹的意外更改,以及b)它将允许每次运行脚本的单个本地路径(无需另一个逻辑来确定要运行的路径)。

但这可能是不可能的,因此请与社区联系。如果重要的话,我们的 VCS 是 Git/Github。

4

2 回答 2

0

你可以做一个像这样的结构:

db
  update
    001
    002
    003
    004
    ...
    current

然后在当前文件夹里面是这样的:

004-Script-1.sql
004-Script-2.sql
004-Script-3.sql

然后,您的 TC 构建将运行current文件夹中的任何脚本,然后将基于名称的第一部分的脚本移动到相应的文件夹中。你必须按顺序:

  1. 如果文件夹不存在,请创建该文件夹。
  2. 将文件移动到正确的文件夹中
  3. 执行 git pull,提交所有修改的文件并推送

这是假设您不会在该环境中多次重新运行脚本,并且提交者将文件提交并推送到当前文件夹中,这些文件将按照正确的名称语法运行。否则,您最终可能会得到各种随机文件夹名称。

或者,您可以使用 bash 查找该文件夹中最高的文件夹名称,然后运行其中的所有内容(下面假设您在上传目录中):

$ ls
001    002    003    004    005    026    124    204
$ LAST=`exec ls | sed 's/\([0-9]\+\).*/\1/g' | sort -n | tail -1`
$ echo $LAST
204

这将假设最高文件夹中的所有内容都将被运行,并重新运行,除非您使用了逻辑。

于 2013-10-16T23:01:28.483 回答
0

您可以按名称定义构建参数,如下所示:cur.release.folder.numbeer 并要求它提示用户是否尝试强制构建在特定文件夹上运行。

Trigger rules: +:/db/update/%cur.release.folder.number%/**

或者

每当您手动创建文件夹时,在您的项目中添加一个逻辑以通过名称 cur.release.folder.number 设置属性,并在 teamcity 的构建步骤中,通过额外的步骤来处理它。

构建步骤 #1 将使用简单的 shell 脚本计算最新的文件夹编号。您可以使用 -Dparamname=%teamcity.build.checkoutDir%/tmpFileHoldingFolderNoInfo.txt

构建步骤 #2:在触发规则中使用与上述相同的 - 默认设置为空并使用步骤 #1 中的值

于 2013-11-06T14:36:30.360 回答