我正致力于为一个非常大的.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,则应构建并测试整个树,因为一切都依赖于这些组件。 但是,如果对服务进行了更改,则无需构建和测试除服务之外的任何内容。
同样,如果数据库发生变化,那么这可能会变得过于复杂,只会构建数据库和服务。
答案 0 :(得分:1)
偶然发现了你的问题。
这只是一个想法,但在您的构建脚本中,您可以将git log -n 1 --pretty=format:%h Database
与git 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