{"job_id":"6981d78f-fc4e-41c9-a800-344346752b89","filters":{"level":null,"component":null},"total":75,"logs":[{"seq":1,"level":"INFO","component":"agent","message":"[agent] 2026-09-20 14:35:38.206 [INFO] [agent:6981d78f] 🚀 CI 流水线启动","timestamp":"2026-09-20T14:35:38.206152+08:00"},{"seq":2,"level":"INFO","component":"git","message":"[git] 2026-09-20 14:35:38.206 [INFO] [git:6981d78f] cloning http://git.fanson.cloud/customer-project/jingneng/jn-isp-api.git -> /app/data/workspace/6981d78f-fc4e-41c9-a800-344346752b89 (branch=new-develop)","timestamp":"2026-09-20T14:35:38.206531+08:00"},{"seq":3,"level":"INFO","component":"git","message":"[git] 2026-09-20 14:35:39.676 [INFO] [git:6981d78f] Cloning into '/app/data/workspace/6981d78f-fc4e-41c9-a800-344346752b89'...","timestamp":"2026-09-20T14:35:39.676934+08:00"},{"seq":4,"level":"INFO","component":"git","message":"[git] 2026-09-20 14:35:39.677 [INFO] [git:6981d78f] git clone success: /app/data/workspace/6981d78f-fc4e-41c9-a800-344346752b89","timestamp":"2026-09-20T14:35:39.677043+08:00"},{"seq":5,"level":"INFO","component":"agent","message":"[agent] 2026-09-20 14:35:39.677 [INFO] [agent:6981d78f] 📦 代码已克隆到 /app/data/workspace/6981d78f-fc4e-41c9-a800-344346752b89","timestamp":"2026-09-20T14:35:39.677410+08:00"},{"seq":6,"level":"INFO","component":"orchestrator","message":"[orchestrator] 2026-09-20 14:35:39.678 [INFO] [orchestrator:6981d78f] 📋 发现 .ci.yml 配置文件，使用确定性构建流程","timestamp":"2026-09-20T14:35:39.678382+08:00"},{"seq":7,"level":"INFO","component":"orchestrator","message":"[orchestrator] 2026-09-20 14:35:40.179 [INFO] [orchestrator:6981d78f] 📝 检测到变更的目录: fanson-admin, fanson-admin/src, fanson-common, fanson-common/src","timestamp":"2026-09-20T14:35:40.179086+08:00"},{"seq":8,"level":"INFO","component":"git","message":"[git] 2026-09-20 14:35:40.182 [INFO] [git:6981d78f] 目录 fanson-admin 代码指纹: 283d4f2","timestamp":"2026-09-20T14:35:40.182153+08:00"},{"seq":9,"level":"INFO","component":"orchestrator","message":"[orchestrator] 2026-09-20 14:35:40.803 [INFO] [orchestrator:6981d78f] 📝 单服务项目，开始构建（代码指纹 283d4f2）","timestamp":"2026-09-20T14:35:40.803986+08:00"},{"seq":10,"level":"INFO","component":"orchestrator","message":"[orchestrator] 2026-09-20 14:35:40.804 [INFO] [orchestrator:6981d78f] 🔨 开始构建 1 个服务","timestamp":"2026-09-20T14:35:40.804103+08:00"},{"seq":11,"level":"INFO","component":"orchestrator","message":"[orchestrator] 2026-09-20 14:35:40.808 [INFO] [orchestrator:6981d78f] 🔨 构建服务: jingneng/jn-isp-api-fanson-admin-new → 镜像标签 jingneng/jn-isp-api-fanson-admin-new:new-develop-283d4f2","timestamp":"2026-09-20T14:35:40.808325+08:00"},{"seq":12,"level":"INFO","component":"orchestrator","message":"[orchestrator] 2026-09-20 14:35:40.808 [INFO] [orchestrator:6981d78f] 已自动注入 -pl fanson-admin -am: mvn -pl fanson-admin -am clean package -DskipTests","timestamp":"2026-09-20T14:35:40.808447+08:00"},{"seq":13,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:35:40.808 [INFO] [docker:6981d78f] building docker.fanson.cloud/jingneng/jn-isp-api-fanson-admin-new:new-develop-283d4f2 (with cache)","timestamp":"2026-09-20T14:35:40.808969+08:00"},{"seq":14,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:35:41.070 [INFO] [docker:6981d78f] ERROR: failed to build: Cache export is not supported for the docker driver.","timestamp":"2026-09-20T14:35:41.070283+08:00"},{"seq":15,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:35:41.070 [INFO] [docker:6981d78f] Switch to a different driver, or turn on the containerd image store, and try again.","timestamp":"2026-09-20T14:35:41.070412+08:00"},{"seq":16,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:35:41.070 [INFO] [docker:6981d78f] Learn more at https://docs.docker.com/go/build-cache-backends/","timestamp":"2026-09-20T14:35:41.070507+08:00"},{"seq":17,"level":"ERROR","component":"docker","message":"[docker] 2026-09-20 14:35:41.072 [ERROR] [docker:6981d78f] docker command failed (exit=1): ERROR: failed to build: Cache export is not supported for the docker driver.\nSwitch to a different driver, or turn on the containerd image store, and try again.\nLearn more at https://docs.docker.com/go/build-cache-backends/","timestamp":"2026-09-20T14:35:41.072531+08:00"},{"seq":18,"level":"WARNING","component":"docker","message":"[docker] 2026-09-20 14:35:41.073 [WARNING] [docker:6981d78f] buildx 不可用，已切换为原生 docker build (之后本 job 不会再重试 buildx)","timestamp":"2026-09-20T14:35:41.073005+08:00"},{"seq":19,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:35:41.073 [INFO] [docker:6981d78f] building docker.fanson.cloud/jingneng/jn-isp-api-fanson-admin-new:new-develop-283d4f2 (native docker build)","timestamp":"2026-09-20T14:35:41.073116+08:00"},{"seq":20,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:35:41.991 [INFO] [docker:6981d78f] #1 DONE 0.7s","timestamp":"2026-09-20T14:35:41.991438+08:00"},{"seq":21,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:35:42.366 [INFO] [docker:6981d78f] #3 DONE 0.0s","timestamp":"2026-09-20T14:35:42.366834+08:00"},{"seq":22,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:35:42.831 [INFO] [docker:6981d78f] #4 DONE 0.8s","timestamp":"2026-09-20T14:35:42.831997+08:00"},{"seq":23,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:35:44.181 [INFO] [docker:6981d78f] #2 DONE 2.1s","timestamp":"2026-09-20T14:35:44.181027+08:00"},{"seq":24,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:35:44.789 [INFO] [docker:6981d78f] #5 DONE 0.6s","timestamp":"2026-09-20T14:35:44.789013+08:00"},{"seq":25,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:35:44.975 [INFO] [docker:6981d78f] #6 DONE 0.0s","timestamp":"2026-09-20T14:35:44.975916+08:00"},{"seq":26,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:35:44.976 [INFO] [docker:6981d78f] #7 DONE 0.0s","timestamp":"2026-09-20T14:35:44.976044+08:00"},{"seq":27,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:35:45.574 [INFO] [docker:6981d78f] #8 DONE 0.7s","timestamp":"2026-09-20T14:35:45.574126+08:00"},{"seq":28,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:35:45.783 [INFO] [docker:6981d78f] #9 CACHED","timestamp":"2026-09-20T14:35:45.783611+08:00"},{"seq":29,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:35:45.783 [INFO] [docker:6981d78f] #10 CACHED","timestamp":"2026-09-20T14:35:45.783776+08:00"},{"seq":30,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:35:45.783 [INFO] [docker:6981d78f] #11 CACHED","timestamp":"2026-09-20T14:35:45.783897+08:00"},{"seq":31,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:35:45.784 [INFO] [docker:6981d78f] #12 CACHED","timestamp":"2026-09-20T14:35:45.784021+08:00"},{"seq":32,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:35:47.299 [INFO] [docker:6981d78f] #13 DONE 1.7s","timestamp":"2026-09-20T14:35:47.299105+08:00"},{"seq":33,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:35:56.885 [INFO] [docker:6981d78f] #14 DONE 9.5s","timestamp":"2026-09-20T14:35:56.885751+08:00"},{"seq":34,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:35:57.231 [INFO] [docker:6981d78f] #15 CACHED","timestamp":"2026-09-20T14:35:57.231402+08:00"},{"seq":35,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:35:59.097 [INFO] [docker:6981d78f] #16 DONE 1.9s","timestamp":"2026-09-20T14:35:59.097207+08:00"},{"seq":36,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:00.844 [INFO] [docker:6981d78f] #17 DONE 1.6s","timestamp":"2026-09-20T14:36:00.844257+08:00"},{"seq":37,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:01.953 [INFO] [docker:6981d78f] build success: docker.fanson.cloud/jingneng/jn-isp-api-fanson-admin-new:new-develop-283d4f2","timestamp":"2026-09-20T14:36:01.953750+08:00"},{"seq":38,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:01.953 [INFO] [docker:6981d78f] pushing docker.fanson.cloud/jingneng/jn-isp-api-fanson-admin-new:new-develop-283d4f2","timestamp":"2026-09-20T14:36:01.953861+08:00"},{"seq":39,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.033 [INFO] [docker:6981d78f] The push refers to repository [docker.fanson.cloud/jingneng/jn-isp-api-fanson-admin-new]","timestamp":"2026-09-20T14:36:02.033794+08:00"},{"seq":40,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.067 [INFO] [docker:6981d78f] 4161b83d5aa5: Preparing","timestamp":"2026-09-20T14:36:02.067200+08:00"},{"seq":41,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.067 [INFO] [docker:6981d78f] 5f70bf18a086: Preparing","timestamp":"2026-09-20T14:36:02.067340+08:00"},{"seq":42,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.067 [INFO] [docker:6981d78f] 71a2618c0925: Preparing","timestamp":"2026-09-20T14:36:02.067445+08:00"},{"seq":43,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.067 [INFO] [docker:6981d78f] 6fc52eaf99f6: Preparing","timestamp":"2026-09-20T14:36:02.067545+08:00"},{"seq":44,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.067 [INFO] [docker:6981d78f] cd4b3dc03178: Preparing","timestamp":"2026-09-20T14:36:02.067651+08:00"},{"seq":45,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.067 [INFO] [docker:6981d78f] b4cfcb8385a8: Preparing","timestamp":"2026-09-20T14:36:02.067761+08:00"},{"seq":46,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.067 [INFO] [docker:6981d78f] 2b730cf18c09: Preparing","timestamp":"2026-09-20T14:36:02.067858+08:00"},{"seq":47,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.067 [INFO] [docker:6981d78f] edeaba958753: Preparing","timestamp":"2026-09-20T14:36:02.067954+08:00"},{"seq":48,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.068 [INFO] [docker:6981d78f] 8bf42db0de72: Preparing","timestamp":"2026-09-20T14:36:02.068050+08:00"},{"seq":49,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.068 [INFO] [docker:6981d78f] b4cfcb8385a8: Waiting","timestamp":"2026-09-20T14:36:02.068145+08:00"},{"seq":50,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.068 [INFO] [docker:6981d78f] 31892cc314cb: Preparing","timestamp":"2026-09-20T14:36:02.068239+08:00"},{"seq":51,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.068 [INFO] [docker:6981d78f] 2b730cf18c09: Waiting","timestamp":"2026-09-20T14:36:02.068331+08:00"},{"seq":52,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.068 [INFO] [docker:6981d78f] 11936051f93b: Preparing","timestamp":"2026-09-20T14:36:02.068424+08:00"},{"seq":53,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.068 [INFO] [docker:6981d78f] 8bf42db0de72: Waiting","timestamp":"2026-09-20T14:36:02.068517+08:00"},{"seq":54,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.068 [INFO] [docker:6981d78f] edeaba958753: Waiting","timestamp":"2026-09-20T14:36:02.068614+08:00"},{"seq":55,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.068 [INFO] [docker:6981d78f] 11936051f93b: Waiting","timestamp":"2026-09-20T14:36:02.068717+08:00"},{"seq":56,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.068 [INFO] [docker:6981d78f] 31892cc314cb: Waiting","timestamp":"2026-09-20T14:36:02.068814+08:00"},{"seq":57,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.437 [INFO] [docker:6981d78f] 6fc52eaf99f6: Layer already exists","timestamp":"2026-09-20T14:36:02.437126+08:00"},{"seq":58,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.479 [INFO] [docker:6981d78f] 5f70bf18a086: Layer already exists","timestamp":"2026-09-20T14:36:02.479900+08:00"},{"seq":59,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.481 [INFO] [docker:6981d78f] 71a2618c0925: Layer already exists","timestamp":"2026-09-20T14:36:02.481357+08:00"},{"seq":60,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.481 [INFO] [docker:6981d78f] cd4b3dc03178: Layer already exists","timestamp":"2026-09-20T14:36:02.481653+08:00"},{"seq":61,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.490 [INFO] [docker:6981d78f] b4cfcb8385a8: Layer already exists","timestamp":"2026-09-20T14:36:02.490204+08:00"},{"seq":62,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.611 [INFO] [docker:6981d78f] edeaba958753: Layer already exists","timestamp":"2026-09-20T14:36:02.611678+08:00"},{"seq":63,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.712 [INFO] [docker:6981d78f] 2b730cf18c09: Layer already exists","timestamp":"2026-09-20T14:36:02.712558+08:00"},{"seq":64,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.712 [INFO] [docker:6981d78f] 31892cc314cb: Layer already exists","timestamp":"2026-09-20T14:36:02.712714+08:00"},{"seq":65,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.713 [INFO] [docker:6981d78f] 8bf42db0de72: Layer already exists","timestamp":"2026-09-20T14:36:02.713547+08:00"},{"seq":66,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:02.779 [INFO] [docker:6981d78f] 11936051f93b: Layer already exists","timestamp":"2026-09-20T14:36:02.779159+08:00"},{"seq":67,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:08.262 [INFO] [docker:6981d78f] 4161b83d5aa5: Pushed","timestamp":"2026-09-20T14:36:08.262220+08:00"},{"seq":68,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:08.966 [INFO] [docker:6981d78f] new-develop-283d4f2: digest: sha256:591dfe6449de1109e31c3814e00804e81afa9f500b58bbd1a6a7cc2712f52773 size: 2628","timestamp":"2026-09-20T14:36:08.966512+08:00"},{"seq":69,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:09.060 [INFO] [docker:6981d78f] The push refers to repository [docker.fanson.cloud/jingneng/jn-isp-api-fanson-admin-new]","timestamp":"2026-09-20T14:36:09.060022+08:00"},{"seq":70,"level":"INFO","component":"docker","message":"[docker] 2026-09-20 14:36:09.092 [INFO] [docker:6981d78f] tag does not exist: docker.fanson.cloud/jingneng/jn-isp-api-fanson-admin-new:cache","timestamp":"2026-09-20T14:36:09.092874+08:00"},{"seq":71,"level":"ERROR","component":"docker","message":"[docker] 2026-09-20 14:36:09.093 [ERROR] [docker:6981d78f] docker command failed (exit=1): The push refers to repository [docker.fanson.cloud/jingneng/jn-isp-api-fanson-admin-new]\ntag does not exist: docker.fanson.cloud/jingneng/jn-isp-api-fanson-admin-new:cache","timestamp":"2026-09-20T14:36:09.093787+08:00"},{"seq":72,"level":"WARNING","component":"docker","message":"[docker] 2026-09-20 14:36:09.094 [WARNING] [docker:6981d78f] cache push skipped: The push refers to repository [docker.fanson.cloud/jingneng/jn-isp-api-fanson-admin-new]\ntag does not exist: docker.fanson.cloud/jingneng/jn-isp-api-fanson-admin-new:cache","timestamp":"2026-09-20T14:36:09.094125+08:00"},{"seq":73,"level":"INFO","component":"orchestrator","message":"[orchestrator] 2026-09-20 14:36:09.094 [INFO] [orchestrator:6981d78f] ✅ 服务构建完成: docker.fanson.cloud/jingneng/jn-isp-api-fanson-admin-new:new-develop-283d4f2","timestamp":"2026-09-20T14:36:09.094221+08:00"},{"seq":74,"level":"INFO","component":"agent","message":"[agent] 2026-09-20 14:36:09.132 [INFO] [agent:6981d78f] ✅ 构建完成: 成功构建 1 个镜像: docker.fanson.cloud/jingneng/jn-isp-api-fanson-admin-new:new-develop-283d4f2","timestamp":"2026-09-20T14:36:09.132208+08:00"},{"seq":75,"level":"INFO","component":"agent","message":"[agent] 2026-09-20 14:36:09.165 [INFO] [agent:6981d78f] workspace cleaned","timestamp":"2026-09-20T14:36:09.165287+08:00"}]}