首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Turborepo有2个react应用程序,CircleCI CI/CD只运行更改的应用程序

Turborepo有2个react应用程序,CircleCI CI/CD只运行更改的应用程序
EN

Stack Overflow用户
提问于 2022-09-23 06:49:11
回答 1查看 227关注 0票数 1

我使用Turborepo作为我的monorepo项目,我有两个反应应用程序。我如何配置Turborepo和CircleCI (repos在Github上),所以如果我对一个项目进行更改,管道将不会运行到第二个项目?

我知道turbo正在使用散列algo来检查项目是否有任何更改,然后重新构建它。

我试过在这里查找,https://turborepo.org/docs/ci/circleci,但没有解释这一行为。

步骤如下:

  1. 将代码更改为项目1
  2. 将monorepo的更改提交给Github
  3. Github检测到一个提交并触发CircleCI来运行CI/CD,所以这部分我不确定,如果它触发CI/CD,它将触发这两个项目,对吗?如果是这样的话,我怎样才能只为我所作的改变而预防呢?
EN

回答 1

Stack Overflow用户

发布于 2022-11-12 10:32:10

我已经研究了好几天这样的解决方案了。在涡轮增压器中有两个核心概念来实现这一点:

  • 过滤工作区
  • 缓存Buildoutputs并将缓存存储在云中(不是您要寻找的)

因此,您可以针对特定的项目filter您的monorepo,例如:

代码语言:javascript
复制
pnpm turbo run build --filter='my-project...[HEAD^1]' --dry=json

-> -这将查看是否需要运行项目“my”的任务build,并将当前源代码与"HEAD^1“进行比较。dry=json选项可以帮助您查看是否需要运行“构建”或不运行“我的项目”。

你可以过滤更多,检查文档。

现在,我在此基础上建立的是:

  1. 如果需要部署我的graphql-服务器,github工作流上的一个新作业将在此筛选器命令的帮助下查看,他将将此决定的输出设置为工件,以便为以后的作业(https://github.com/actions/upload-artifact)提供此信息。
  2. 我的实际停靠-构建和部署到飞行后运行的作业,将下载这个工件,并设置一个继续的环境变量,这取决于它是否应该构建+部署。
  3. 之后的每个作业都有一个if: ${{ env.CONTINUE == 'true' }}来跳过它们,如果不需要构建/部署的话。

如果您可以直接使用turbo cli运行构建/部署任务,可能会简单得多,因为您可以将筛选器和构建的执行组合起来--但在我的情况下是不可能的。

如果您需要“跳过”稍后在您的工作流中出现的作业,这将更加困难,因为github不支持工作的“堕胎”

对于所有其他命令,如linttypechecktest ->,只需向它们添加一个适当的筛选器选项,您就可以实现它们只在PR中的“受影响”工作区/项目上运行。

资源来源:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73823932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档