监视最近的文件夹以查看TeamCity中的更改

时间:2013-10-16 12:23:49

标签: git version-control github continuous-integration teamcity

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

但是对于我们的SQL更新,我们设置了这样,每个版本都有一个单独的文件夹。例如:

db
  update
    001
    002
    003
    ...
    018

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

但是如何确定如何指向最后一个文件夹将更加清晰,因为a)它将阻止触发构建意外更改到以前的文件夹,并且b)它将允许每次运行脚本的单个本地路径(没有另一条逻辑来确定要运行的路径)。

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

2 个答案:

答案 0 :(得分: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,提交所有已修改的文件并按
  4. 这假设您不会在该环境中多次重新运行脚本,并且提交者提交并将文件推送到将按照正确的名称语法运行的当前文件夹。否则你最终会得到各种随机文件夹名称。

    或者你可以使用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
    

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

答案 1 :(得分:0)

您可以按名称定义build-parameter,其外观如下: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中的值