我正在一个monorepo项目中,该项目包含一些使用不同语言的不同子项目。现在,我每次提交都会运行三个不同的CircleCI“作业”。但是,这些软件包中的每一个都独立地进行编译和测试。因此,我实际上不必每次都花时间运行所有三个作业。

是否有某种方法可以将CircleCI作业限制为将代码提交到的目录?

评论

我们最终通过一个构建工具构建了所有子项目(跨3种以上语言)来解决了这一问题-在我们的示例中是Gradle。到那时,我们能够利用Gradle构建缓存(最终将其缓存在CircleCI的构建缓存中!)来跳过不必要的子项目构建。如果有用的话,很高兴将其写为答案。

#1 楼

该讨论对如何完成我想要的事情给出了很好的建议。

https://discuss.circleci.com/t/does-circleci-2-0-work-with-monorepos/10378 / 11

评论


简要介绍所讨论的方法将是很好的-如果链接由于任何原因中断,则仅链接答案总是有失去其所有价值的风险。

–丹·科尼莱斯库(Dan Cornilescu)
17年11月16日在1:14

#2 楼

我们正在将CircleCI与Go monorepo结合使用。
git push触发了CircleCI作业,该作业查找更改中包含哪些服务。
对于每个服务,请运行一个CircleCI作业,操作如下:另外,以开源形式发布:https://github.com/Tufin/circleci-monorepo

#3 楼

我来这里的还有@ effi-bar-shean和@langkilde的先前答案,它们对问题进行了很好的概述。我的答案将集中在JavaScript


如何构建已更改的monorepo部分?


您可以使用CircleCI的2.0 API这样您就可以分别触发多个工作流程。如果您有JavaScript monorepo,则可以使用lerna之类的工具来触发您选择的工作流。这些软件包的工作流程。您可以在此处看到完整的示例

这里是Javascript monorepo存储库的示例

希望我的回答对您有所帮助😊