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



我正在为一个非常大的。net项目改进我们当前的构建系统。这个项目有178个Visual Studio解决方案和超过800个csproj文件。

我们目前正在使用TeamCity,但由于我们拥有的团队数量,它已经变得非常混乱,并且变得非常难以维护。在某种程度上,我们迁移到Gitlab(在我到达之前),我试图使用Gitlab- ci找到一个可行的解决方案。

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

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

考虑这个(简化的)目录树:

.
├── Build
├── Config
├── Core
├── Database
├── Services
└── Websites

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

同样的,也许这变得太复杂了,如果数据库改变了,那么只构建数据库和服务。

偶然发现了你的问题。

这只是一个想法,但在你的构建脚本中,你可以比较git log -n 1 --pretty=format:%h Databasegit log -n 1 --pretty=format:%h,只有在这不同的情况下才重建。

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

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

最新更新