# java-k8cicd **Repository Path**: yanhplayground/java-k8cicd ## Basic Information - **Project Name**: java-k8cicd - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-24 - **Last Updated**: 2026-07-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Java Kubernetes CI/CD 示例 本项目是参考 `net-k8cicd` 整理出的 Java/Spring Boot 版本,用于演示 Jenkins 在 Kubernetes agent 中完成代码拉取、Maven 测试、Docker 镜像构建推送、Kubernetes 部署和回滚。 ## 功能对照 | .NET 版本 | Java 版本 | | --- | --- | | ASP.NET Core 6 | Spring Boot 3 + Java 17 | | `/Home/Index` 返回 `Index` | `/Home/Index` 返回 `Index` | | Serilog 写 warning/error 文件 | Logback 写 `logs/warning`、`logs/error` | | Docker 多阶段构建 | Docker 多阶段构建 | | Jenkins Kubernetes agent | Jenkins Kubernetes agent | | `k8deploy.yaml` 模板替换部署 | `k8deploy.yaml` 模板替换部署,增加健康探针 | Swagger/OpenAPI 使用 `springdoc-openapi-starter-webmvc-ui 2.6.0`,与当前 `Spring Boot 3.3.5` 兼容。 应用启动完成后会在控制台输出 Swagger UI 和 OpenAPI JSON 访问地址。 ## 本地运行 ```bash mvn -B -ntp -s settings.xml test mvn -B -ntp -s settings.xml spring-boot:run ``` 访问: ```bash curl http://localhost:8080/Home/Index curl http://localhost:8080/healthz ``` Swagger/OpenAPI 访问地址: ```text http://localhost:8080/swagger-ui.html http://localhost:8080/v3/api-docs ``` 日志目录: ```text logs/warning/yyyyMMdd.log logs/error/yyyyMMdd.log ``` 接口说明和 Kubernetes 访问地址见 [docs/接口文档.md](docs/接口文档.md)。 ## Docker 构建 ```bash docker build -t java-k8cicd:local . --network=host docker run --rm -p 8080:8080 java-k8cicd:local ``` ## Jenkins 使用前提 - Jenkins 已安装 Kubernetes、Git Parameter、Credentials、Workspace Cleanup 等流水线相关插件。 - 集群中已有 `kubeconfig` Secret,内容键名为 `config`,用于挂载到 `/root/.kube/config`。 - 镜像仓库凭据 ID 默认为 `ali`,Git 凭据 ID 默认为 `git`。 - 默认镜像仓库为 `registry.cn-hangzhou.aliyuncs.com`,镜像拉取 Secret 为 `alisecret`。 - agent 节点需要有 `agent=true` 标签,并允许挂载 `/var/run/docker.sock`。 ## 部署清单说明 `k8deploy.yaml` 使用 Jenkins 中的参数替换以下占位符: | 占位符 | 含义 | | --- | --- | | `IMAGE_PULL_SECRET` | 镜像拉取 Secret | | `NAMESPACE` | Kubernetes 命名空间 | | `REPLICASET` | 副本数 | | `JOB_NAME` | Jenkins 作业名,同时作为 Deployment/Service/Ingress 名称 | | `REPOSITORY_URL` | 镜像仓库地址 | | `BRANCH` | 镜像 Tag,流水线会把分支名转换为 Docker 安全 Tag | | `CONTAINERPORT` | 容器端口,默认 `8080` | | `PORT` | Service 端口,默认 `8080` | ## 安全说明 原 .NET 示例里的企业微信、飞书和钉钉 webhook 是硬编码在 Jenkinsfile 中的。Java 版本没有保留硬编码 webhook,避免把真实机器人地址提交到代码仓库。需要通知时,建议把 webhook 存到 Jenkins Credentials,再在 `post` 阶段读取。