Gitlab CI/CD部署GKE集群成功但代码变更未生效,寻求排查
GitLab CI/CD部署GKE后代码变更不生效的排查点
以下是可能遗漏的配置或步骤,按优先级排查:
1. Docker镜像标签未使用唯一标识
如果构建镜像时一直使用latest标签,GKE会默认认为镜像未更新,不会触发拉取新镜像。必须为每次构建生成唯一标签(如Git提交哈希、时间戳):
- 检查
.gitlab-ci.yml中的镜像构建命令,确保用动态标签:build-docker: script: - docker build -t gcr.io/[你的项目ID]/[镜像名]:$CI_COMMIT_SHA . - docker push gcr.io/[你的项目ID]/[镜像名]:$CI_COMMIT_SHA
2. Deployment未更新镜像标签
即使推送了新镜像,若deployment.yaml里的镜像标签未同步更新,GKE会继续使用旧镜像:
- 在CI部署步骤中,需要将新的镜像标签替换到Deployment配置里:
deploy-gke: script: - sed -i "s/OLD_IMAGE_TAG/$CI_COMMIT_SHA/g" deployment.yaml - kubectl apply -f deployment.yaml - 同时确保
deployment.yaml中镜像拉取策略配置正确(若用latest标签必须设置imagePullPolicy: Always,但更推荐用唯一标签):spec: containers: - name: [容器名] image: gcr.io/[项目ID]/[镜像名]:$CI_COMMIT_SHA imagePullPolicy: Always
3. NextJS构建产物未正确写入镜像
检查Dockerfile是否完整复制了构建后的产物,避免因路径错误或遗漏导致旧代码被打包:
- 正确的NextJS多阶段构建示例:
FROM node:18-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build # 确保构建命令执行成功 FROM node:18-alpine AS runner WORKDIR /app COPY --from=builder /app/.next ./.next COPY --from=builder /app/public ./public COPY --from=builder /app/package*.json ./ RUN npm install --production CMD ["npm", "start"]
4. CI/CD步骤执行完整性验证
- 查看GitLab CI运行日志,确认「构建NextJS」「推送镜像到GCR」「部署GKE」三个步骤均成功执行,无跳过或失败环节。
- 登录GCR控制台,检查镜像标签的创建时间,确认新镜像已成功推送。
5. GKE Pod更新验证
- 执行
kubectl get pods查看Pod创建时间,确认部署后是否有新Pod启动。 - 若Pod未更新,可手动执行
kubectl rollout restart deployment/[你的部署名]强制重启,验证是否能加载新代码。
内容的提问来源于stack exchange,提问作者Hyeonjun Jeong
相关产品推荐
相关产品推荐

