Gitlab-CI:仅在更新特定文件夹时触发构建

时间:2016-07-05 11:16:56

标签: .net continuous-integration gitlab gitlab-ci

我正致力于为一个非常大的.Net项目改进我们当前的构建系统。把它放在上下文中 - 这个项目有178个Visual Studio解决方案和超过800个csproj文件。

我们目前正在使用TeamCity但是我们拥有的团队数量已经变得非常混乱并且变得非常难以维护。在某些时候,我们迁移到Gitlab(在我到达之前),我正在尝试使用Gitlab-CI获得可行的解决方案。

我已经设法使用Gitlab-CI构建,测试和打包每个组件,但它并不漂亮,因为一切都是在1个作业中完成的。我们现在决定这样做,因为如果我们构建单个组件,那么管理Gitlab-CI中的所有工件是非常困难的(并且很慢)。但我会把它留给另一个SO问题......; - )

我今天的问题是如何配置我的.gitlab-ci.yml文件,以便只在该特定文件夹发生更改时才执行作业?

考虑这个(简化的)目录树: . ├── Build ├── Config ├── Core ├── Database ├── Services └── Websites

如果将更改合并到master中且影响Core或Config,则应构建并测试整个树,因为一切都依赖于这些组件。 但是,如果对服务进行了更改,则无需构建和测试除服务之外的任何内容。

同样,如果数据库发生变化,那么这可能会变得过于复杂,只会构建数据库和服务。

1 个答案:

答案 0 :(得分:1)

偶然发现了你的问题。

这只是一个想法,但在您的构建脚本中,您可以将git log -n 1 --pretty=format:%h Databasegit log -n 1 --pretty=format:%h进行比较,并且只有在不同时才重建。

git log -n 1将显示有关您的仓库或特定目录/文件的最后一次提交的一些信息。

commit <full sha hash of current commit>
Author: Author Name <user@domain.tld>
Date:   Fri Mar 10 11:08:42 2017 +0100

    commit message

--pretty=format:%h只会输出缩短的哈希值

git log -n 1 --pretty=format:%h
1234567

git log -n 1 --pretty=format:%h Database
7654321