我的monoreo项目使用Turborepo,我有两个react应用程序。我如何配置Turborepo和CircleCI(repo在Github上(,这样如果我对一个项目进行更改,管道就不会为第二个项目运行?
我知道turbo正在使用哈希算法来检查项目是否有任何更改,然后重建它。
我试着看看这里https://turborepo.org/docs/ci/circleci但并不能解释这种行为。
步骤是:
- 对项目1进行代码更改
- 将monorepo的更改提交到Github
- Github检测到提交并触发CircleCI运行CI/CD所以这部分是我不确定的,如果它触发CI/CD,它会触发两个项目,对吗?如果是这样的话,我怎么能只为我所做的改变而阻止呢
我已经为这样的解决方案工作了好几天了。要实现这一点,涡轮回购有两个核心概念:
- 筛选工作区
- 缓存构建输出并将缓存存储在云中(而不是您想要的(
因此,您可以为特定项目filter
您的单回购,例如:
pnpm turbo run build --filter='my-project...[HEAD^1]' --dry=json
->这将观察是否需要任务CCD_ 2来为项目"运行;我的项目";,将电流源与";头^1";。选项dry=json有助于查看是否需要运行";构建";或者不用于";我的项目";。
你可以过滤更多,检查文档。
现在,我在此基础上构建了什么:
github工作流上的一个新作业在这个filter命令的帮助下查看是否需要部署我的graphql服务器,他将把这个决策的输出设置为工件,为以后的作业提供这些信息(https://github.com/actions/upload-artifact)
我实际的docker构建和部署到随后运行的飞行io作业,将下载这个工件并设置一个CONTINUE环境变量,这取决于它是否应该构建+部署。
之后的每个作业都有一个
if: ${{ env.CONTINUE == 'true' }}
,如果不需要构建/部署的话,可以跳过它们。
如果您可以直接使用turbo
cli运行构建/部署作业,这可能会简单得多,因为这样您就可以将过滤器和构建的执行结合起来,但在我的情况下这是不可能的。
如果你需要";跳过";在您的工作流程中稍后出现的工作,这比它应该做的更难,因为github不支持";堕胎;工作。
对于像lint
、typecheck
和test
这样的所有其它命令->只要给它们添加一个适当的过滤器选项,你就会实现它们只在你的";受影响";PR.中的工作空间/项目
资源:
- https://dev.to/ngconf/deploying-nx-affected-apps-from-github-actions-54n4
- 在GitHub Action工作流中,如何在推送或合并之前获得上一次提交
- https://github.com/orgs/community/discussions/26313