目前所有微服务都是放在一个 project 里面(来的时候就这样(逃) 使用 gradle 构建 目前出现的问题,据我知道的 CI 系统都是全量构建(或者是我不会用),就是代码更新后就全部构建 想要的效果: 1.更新 A 服务,只构建 A 服务推送镜像 2.不想使用 Jenkins 3.或者能不能手动点击构建那种,把每个服务都当成 task
1
zengxs 2022-04-24 10:54:25 +08:00 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 就行了 |
2
zengxs 2022-04-24 10:58:49 +08:00 1
@zengxs #1 代码格式不太对,可以看这个 https://pastebin.com/3sLVkWkr
|
3
GuryYu 2022-04-24 11:12:30 +08:00 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 ``` |
4
LoNeFong OP 了解 谢谢前面两位大佬, 我去学习一下
|
7
liubaicai 2022-04-24 13:13:56 +08:00
github 可以设置
paths: - 'xxx/**' |
8
lxz6597863 2022-04-24 18:02:54 +08:00
|
9
iamzuoxinyu 2022-04-25 13:48:40 +08:00
是所谓的 monorepo 么?你们构建的产物也是单镜像么,如果是,那建议不要做多余的事情,只要是 monorepo ,做这种 onchange 肯定会带来更多的麻烦(主要是公共引用依赖带来的)
|
10
LoNeFong OP @iamzuoxinyu 确实算 monorepo 也是构建的单镜像
|