寻求有关此类问题的建议。
我们在NodeJ上编写了微服务栈,并在Kubernetes集群上运行。我们为每个仓库都有单独的GitHub存储库,并且当前在我们的CI / CD流程中使用Circleci。到目前为止,我们有大约25-30个存储库,但是它们的数量会增加,我们现在面临的问题是,我们需要在每个存储库中使用Circleci配置yaml,如果需要在ci / cd管道中全局更改某些内容,我们需要在每个存储库中进行更新,这显然是一个痛苦的过程,Circleci不支持为多个存储库使用一个配置文件。
我相信我们在多个存储库方面的情况/设置不是唯一的,是否有人有经验/想法支持哪个CI工具描述了针对多个存储库使用一个配置文件的情况?
答案 0 :(得分:0)
下面是我不得不处理类似情况时考虑的2种方法。您需要为自己定义要优化的内容,并根据该决定做出决定
优化灵活性和隔离。在这种情况下,不是使所有存储库都使用相同的配置文件,而是将文件保留在每个存储库中并自动管理该文件。
例如:您必须创建一个CLI工具或脚本来自动复制圈子文件并提交到适当的存储库(无论何时需要进行更改)
PROS :隔离-所有存储库都有其自己的配置,如果您要在其中的nodejs服务中使用golang微服务或其他配置,则修改CI管道就不会成为问题< / p>
CONS :为单独管理该配置而编写自动化程序需要做一些额外的工作
进行优化,以简化可维护性。确定如何在您的存储库中共享单个管道配置。
例如:使用git子模块来保存circle.yml文件,或将单独的npm软件包与circle.yml文件一起使用。另一种选择是使用支持模板的CI工具,然后定义管道模板并将其重新用于每个单独的管道(支持该模板的CI工具之一-Teamcity)
在类似情况下,我个人选择了方法#1。恕我直言,当人们决定使用微服务而不是一个分布式的整体平台时,这是必须付出的代价:)我也非常喜欢当所有存储库都是描述性的且自包含的并且CI管道是代码时实现这一目标的方法之一
答案 1 :(得分:0)
在我看来,您有2个选择-您可以拥有一个CI作业/配置,可以部署任何单个/多个服务(如果所有服务都相同)。或者,如果每种服务都与您不同,则您需要为每个服务单独配置作业/配置。如果它在中间的某个地方,这是一个问题,是否要一个包含一堆if / then语句的作业,例如“如果repo = user,则执行此特殊操作。”在某种程度上,“ if / then”方法对我来说很好用,但是最终,有太多特殊情况,为每个服务使用唯一的配置会更容易。
我通过拥有git超级用户解决了“很难在30个git存储库中进行1行更改”的问题。基本上,普通用户只能使用PR合并,但超级用户可以直接提交。由于我只更改配置文件之类的东西,因此很少有合并冲突或损坏的测试用例,因此可以正常工作。这是一些示例代码:
#!/usr/bin/env bash
for dir in /temp/*/
do
cd $dir
git pull
sed 's/Nick/John/g' report.txt > report_new.txt
git commit -m "CI change" && git push
cd ..
done