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

咨询一个 CI 构建问题,问问合适的解决方案

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

    目前所有微服务都是放在一个 project 里面(来的时候就这样(逃) 使用 gradle 构建 目前出现的问题,据我知道的 CI 系统都是全量构建(或者是我不会用),就是代码更新后就全部构建 想要的效果: 1.更新 A 服务,只构建 A 服务推送镜像 2.不想使用 Jenkins 3.或者能不能手动点击构建那种,把每个服务都当成 task

    10 条回复    2022-04-27 15:43:19 +08:00
    zengxs
        1
    zengxs  
       73 天前   ❤️ 1
    据我所知 gitlab runner 应该可以实现,其他 ci 系统不太了解

    1. 只更新:
    git diff --name-only HEAD~1..HEAD 检查这次提交变更的文件列表
    然后通过脚本生成一个对应的 ci 配置文件
    然后通过 trigger 执行下一步的 ci 任务

    一个简单的例子
    stages:
    - setup
    - trigger

    generate-config:
    stage: setup
    image: python
    tags: [ docker ]
    script:
    - pip install pyyaml
    - ./generate-config.py > generated-config.yml
    - cat generated-config.yml
    artifacts:
    paths:
    - generated-config.yml
    expire_in: 3 days

    trigger:
    stage: trigger
    needs: [ generate-config ]
    trigger:
    include:
    - artifact: generated-config.yml
    job: generate-config

    2. 手动点击执行构建任务
    生成的 ci 任务里面配置 when: manual 就行了
    zengxs
        2
    zengxs  
       73 天前   ❤️ 1
    @zengxs #1 代码格式不太对,可以看这个 https://pastebin.com/3sLVkWkr
    GuryYu
        3
    GuryYu  
       73 天前   ❤️ 1
    不清楚你的微服务数量有多少,数量不多时可以参考:
    将每个微服务的编译 job 拆分,每个 job 通过 only:changes 来配置单个微服务所关注的相关文件
    ```
    build microService1:
    stage: build
    script: xxx build
    only:
    changes:
    - microService1/**
    - publicConfig.xxx

    build microService2:
    stage: build
    script: xxx build
    only:
    changes:
    - microService2/**
    - publicConfig.xxx
    ```
    LoNeFong
        4
    LoNeFong  
    OP
       73 天前
    了解 谢谢前面两位大佬, 我去学习一下
    LoNeFong
        5
    LoNeFong  
    OP
       73 天前
    @GuryYu 大概十来个 但是全都在一个 project 所以很头疼
    LoNeFong
        6
    LoNeFong  
    OP
       73 天前
    @GuryYu 大概就是 only-changes 这种功能了, 学艺不精 之前没仔细看到这个
    liubaicai
        7
    liubaicai  
       73 天前
    github 可以设置
    paths:
    - 'xxx/**'
    iamzuoxinyu
        9
    iamzuoxinyu  
       72 天前
    是所谓的 monorepo 么?你们构建的产物也是单镜像么,如果是,那建议不要做多余的事情,只要是 monorepo ,做这种 onchange 肯定会带来更多的麻烦(主要是公共引用依赖带来的)
    LoNeFong
        10
    LoNeFong  
    OP
       70 天前
    @iamzuoxinyu 确实算 monorepo 也是构建的单镜像
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4021 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 53ms · UTC 09:42 · PVG 17:42 · LAX 02:42 · JFK 05:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.