我正在为一个非常大的。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 Database
和git 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