V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jackleeforce3615
V2EX  ›  程序员

采用 CI/CD 方式部署的服务,如何私有化部署到客户内网

  •  
  •   jackleeforce3615 · 339 天前 · 3356 次点击
    这是一个创建于 339 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们有一个产品采用脚手架 full-stack-fastapi-postgresql 开发,在内部部署的时候都是用 gitlab + gitlab runner + docker swarm 部署。现在有需求要部署到客户内网,一下子傻眼了,难道要在客户内容搭建一套 gitlab ci 环境 然后把代码推送到客户的gitlab 来进行部署么?

    32 条回复    2021-06-23 23:19:33 +08:00
    zlink
        1
    zlink  
       339 天前
    vpn ?
    youyi1996
        2
    youyi1996  
       339 天前
    都上 docker 了为啥不导出镜像拷贝到客户那边?
    killva4624
        3
    killva4624  
       339 天前
    - 客户端内网服务器如果可以连接外网,可以考虑做一套或者找现成的轮子,实现自动轮询最新配置+自动变更(比如 Azure IoT );
    killva4624
        4
    killva4624  
       339 天前
    - 如果客户端不能连接外网,那就找客户要一个连接外网的内网的服务器做中转,从这个服务器上连接 CI 和客户内网的部署环节,比如 Rundeck
    Actrace
        5
    Actrace  
       339 天前
    @killva4624 😂,有点腿裤子放屁的感觉。
    liuxu
        6
    liuxu  
       339 天前
    不用,这个方案我搞过,gitlab runner 有个 shell 模式,runner 在服务器内网安装,原理其实是 runner 定时每秒请求 gitlab 获取 event 执行 ci,只要内网有机器能访问到 gitlab 就行
    wengych
        7
    wengych  
       339 天前
    @liuxu 还要依赖于 registry...
    jackleeforce3615
        8
    jackleeforce3615  
    OP
       339 天前
    @zlink 这个估计悬,可能还得升级公司基础设施( VPN 网速不够)

    @youyi1996 感谢回复,这样镜像导出来好像没办法用 `docker swarm` 部署。

    @killva4624 感谢回复,你说的这两个方案 我消化理解一下。
    jackleeforce3615
        9
    jackleeforce3615  
    OP
       339 天前
    @wengych 是 我们内网部署的时候有一台 `artifactory `,`gitlab-ci.yaml` 里面执行脚本把镜像 push 到 `artifactory`上面。然后执行 docker-swarm 命令拉取镜像部署。 现在看来感觉这个 registry 要放到外网。
    jackleeforce3615
        10
    jackleeforce3615  
    OP
       339 天前
    @liuxu 你的意思是在客户内网安装 `runner`, 只要客户内网 `runner ` 可以访问到我公司的 `gitlab` 就可以是把?
    jackleeforce3615
        11
    jackleeforce3615  
    OP
       339 天前
    回复怎么不能支持 markdown .
    liuxu
        12
    liuxu  
       339 天前
    securityCoding
        13
    securityCoding  
       339 天前
    我们上了 k8s+helm ,helm 防火墙开放白名单
    流程标准化后没那么累
    defunct9
        14
    defunct9  
       339 天前
    开 ssh,让我上去看看。(刚弄完一套 gitlab + 2 处 git + harbor + argocd,网络一样复杂,穿越了 3 个机房)
    pelloz
        15
    pelloz  
       339 天前
    我问一下,客户服务器没有 k8s 或者 docker 的环境,也没有相应的运维资源去支持,你们都是怎么解决私有化部署的?
    bthulu
        16
    bthulu  
       339 天前
    @liuxu 内网是不能访问外网的, 根本就连不到 gitlab
    clf
        17
    clf  
       339 天前
    runner 在内网就行了,runner 开权限连 gitlab 就 OK 。runner 就是实际打包的机器。

    镜像要不要推送到镜像仓库看你们需求。
    killva4624
        18
    killva4624  
       339 天前
    @Actrace 去年刚做过一个类似的场景,国内某大型企业,内网准入极其苛刻,前期研发手动 VPN 变更,后期为了大规模部署真是绞尽脑汁……
    ljhrot
        19
    ljhrot  
       339 天前
    建议放弃在内网折腾 CI/CD 的想法,大规模服务可以尝试使用 ansible 部署,就是包括基础环境和服务应用,做稳定版本的部署和升级就行了
    wengych
        20
    wengych  
       339 天前   ❤️ 1
    代码交付还是二进制交付,代码交付可以做 repo mirror,然后客户方面内网部署一套独立的 gitlab 和 cicd
    如果是二进制交付,做一个白名单入口把 repository 开放给客户,客户主机可以用 puppet/ansible 之类的工具做配置管理。
    ghwolf007
        21
    ghwolf007  
       339 天前
    内网完全物理隔离的情况我碰到过,之前用过搭 gitlab 的方式 很操蛋,后面转 k8s+helm 了, 镜像导出导入,helm install 一把梭
    robinlovemaggie
        22
    robinlovemaggie  
       339 天前
    邮寄硬盘——简单粗暴无脑解决私有化部署各种的弊端
    miao1007
        23
    miao1007  
       339 天前 via iPhone
    内外网应该有 dmz 才对啊
    qizhca
        24
    qizhca  
       339 天前
    如果是国电那种一区二区的内网,好像没有物理接触去部署以外更好的解决方案
    lework1234
        25
    lework1234  
       339 天前
    docker-compose 一把梭
    Rush9999
        26
    Rush9999  
       339 天前   ❤️ 1
    docker export -o *.tar CONTAINER
    liuxu
        27
    liuxu  
       338 天前
    @bthulu 你不是楼主,是在给谁设置限制
    lfzyx
        28
    lfzyx  
       338 天前
    招个 devops 运维工程师能解决
    adoal
        29
    adoal  
       338 天前 via iPhone
    需方内外网严格隔离、需方外包给外面单位开发而不是养自研团队、CI/CD,这三项不能流畅地兼顾,至少要放弃一项
    julyclyde
        30
    julyclyde  
       338 天前
    用反弹的
    saltsstack 、gitlab-runner 之类的
    wengych
        31
    wengych  
       338 天前
    @adoal 定期邮寄光盘吧
    jackleeforce3615
        32
    jackleeforce3615  
    OP
       336 天前
    大家都给了很好的思路,感谢!
    实际上我们这个产品刚开发完毕,还没有客户来当小白鼠。以后可能各种网络情况的客户都会碰到吧。

    根据大家的回复,我整理了一下思路:
    如果是客户可以访问外网的:

    1.外网部署一个 gitlab + docker-registry( artifactory )
    2.公司内网 gitlab 的项目与外网 gitlab 做成 mirror 。
    3.内网代码提交触发 CI 制作镜像, 并推到外网的 docker-registry 上,同时触发外网 gitlab mirror 项目的 CI, 这个 CI 在客户侧的 gitlab runner 上面执行,拉取镜像下来部署。

    如果客户不可以访问外网。估计只能导出容器或者镜像到客户侧部署了吧。 这是最操蛋也是最无奈的做法。

    不过考虑到我们这个产品不止有我们自创的镜像,还依赖一些公共服务镜像,如 redis,postgresql,traefik 等等,估计得逼客户开放外网。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3246 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 10:24 · PVG 18:24 · LAX 03:24 · JFK 06:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.