我试图建立一个monorepo完整的CI/CD管道,在www.example.com上开发nx.dev那里我只构建和部署在提交中更改的应用程序和服务。
我的云构建链接到我的github仓库,当一个更改被推送时,它会启动一个构建。首先安装npm,然后构建更改后的应用程序。
根据nx www.example.com上的nrwls文档https://nx.dev/guides/monorepo-affected#ci,他们说使用
npm run affected:build -- --base=origin/master~1 --head=origin/master
这将比较当前提交与前一个提交,以找出要构建哪些服务或应用程序。
我已经尝试使用这个,但在云构建中运行时出现此错误
Step #1: fatal: Not a valid object name master~1
Step #1: Command failed: git merge-base master~1 master
Step #1: fatal: Not a valid object name master~1
当使用cloud-build-local在本地构建时,它工作得很好,并成功地确定了要构建哪些服务。
我认为它失败的原因是因为当cloud build checkout git仓库时,它只 checkout 了提交,而没有以前的提交信息。因此它不能引用前一个提交。
有什么办法可以解决这个问题吗?还是我错过了什么?
谢谢!
5条答案
按热度按时间6yoyoihd1#
你也许可以用一个表情来表达。
这就是我如何使用github操作的方法
9q78igpj2#
我也面临着同样的问题,原因是受影响的需要深入检查,因为它与
master
不同。因此,GHA中的以下更改将解决此问题:v1l68za43#
Cloud Build既不获取分支也不获取历史。
在构建中包含存储库历史记录
Cloud Build不会 checkout 任何其他分支或历史记录。这样做是为了提高效率,这样构建就不必为了构建一个提交而等待获取整个存储库和历史。
所以他们建议在构建过程中获取历史。例如,这是一个如何将.git文件夹添加到构建工作区的黑客示例,因此NX可以计算受影响的项目。
如果你有一个私有的仓库,there is an article描述认证过程。
j8yoct9x4#
正如另一个人所提到的,其他分支不会被提取。
除了触发测试/构建/部署的分支之外,您还必须获取提交或分支。在我们的例子中,我们使用一个分支来表示最后一次成功的构建。
这是我们脚本的一个例子(在Codeship中)。目前使用的是nx v7。到目前为止对我们来说效果很好。
px9o7tmv5#
为了让这个在云构建中工作,你需要首先“unshallow”git clone。我发现,通过将版本“写入”到一个文件中,并在构建过程中持久化,可以更轻松地使用云构建:
为了在受影响的命令中使用这些命令,您可以这样做: