用于多个存储库的单个CI配置

问题描述 投票:1回答:2

寻求有关此类问题的建议。

我们有在NodeJ上编写并在Kubernetes集群上运行的微服务堆栈。 我们为每个仓库都有单独的GitHub存储库,并且当前在我们的CI / CD流程中使用Circleci。 到目前为止,我们有大约25-30个存储库,但是它们的数量会增加,我们现在面临的问题是,我们需要在每个存储库中使用Circleci配置yaml,如果需要在ci / cd管道中全局更改某些内容,我们需要在每个存储库中进行更新,这显然是一个痛苦的过程,Circleci不支持为多个存储库使用一个配置文件。

我相信我们在多个存储库方面的情况/设置不是唯一的,是否有人有经验/想法,其中哪个CI工具支持描述了针对多个存储库使用一个配置文件的情况?

github continuous-integration microservices circleci circleci-2.0
2个回答
0
投票

以下是我在不得不处理类似情况时考虑的两种方法。 您需要自己定义要优化的内容,然后根据该决定做出决定

  1. 优化灵活性隔离性 。 在这种情况下,不是使所有存储库都使用相同的配置文件,而是将文件保留在每个存储库中并自动管理该文件。

    例如:您必须创建一个CLI工具或脚本来自动复制圈子文件并提交到适当的存储库(无论何时需要进行更改)

    PROS :隔离-所有存储库都有自己的配置,如果您要在其中的一个nodejs服务中使用golang微服务或其他配置,则修改CI管道就不会成为问题

    缺点 :编写一些额外的工作来围绕该配置进行自动化管理

  2. 优化以更易于维护 。 图如何在整个仓库中共享单个管道配置。

    例如:使用git子模块来保存circle.yml文件,或者将单独的npm软件包与circle.yml文件一起使用。 另一种选择是使用支持模板的CI工具,然后定义管道模板并将其重新用于每个单独的管道(支持该模板的CI工具之一-Teamcity)

我本人在类似情况下选择了方法#1。 恕我直言,当人们决定使用微服务而不是一个分布式的整体平台时,这是必须付出的代价:)我也非常喜欢当所有存储库都是描述性的且自包含的并且CI管道是代码时帮助实现这一目标的方法之一


0
投票

在我看来,您有2个选择-您可以拥有一个CI作业/配置,可以部署任何单个/多个服务(如果所有服务都相同)。 或者,如果每种服务都与您不同,则您需要为每个服务单独配置作业/配置。 如果它在中间某处,则是一个问题,您是否要执行包含一堆if / then语句的单个作业,例如“ if 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
© www.soinside.com 2019 - 2024. All rights reserved.