自动化构建平台(七)使用Jenkins+Gitblit/Gitlab构建Java项目并生成镜像推送到Harbor/Nexus

本文介绍了如何结合Jenkins、Gitblit/Gitlab构建Java Springboot项目,生成Docker镜像,并推送到Harbor/Nexus私有库。详细阐述了从创建项目、配置Jenkins到构建与推送的每一步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

前面给大家介绍了Gitblit/Gitlab/Harbor/Nexus/Jenkins的安装和简单的界面使用,今天给大家介绍如何将这些工具整合起来实现自动化构建平台。

在自动化构建平台的过程中,Jenkins是最核心的工具。接下来的文章中都将陆续给大家介绍如何通过Jenkins来构建我们的项目。

如果大家对Jenkins的配置还不清楚,请先查看文章【自动化构建平台(五)之Jenkins初始化配置以及插件安装操作


一、准备项目

首先我们在Gitblit或者Gitlab上创建一个项目仓库,这里我使用Gitblit效果都是一样的。
在这里插入图片描述

然后我们将仓库clone下来,这里我们使用git的桌面管理工具Sourcetree来拉取代码。大家也可以采用其他自己顺手的工具。
在这里插入图片描述

然后我们创建一个spring

<think>好的,我现在需要帮助用户将Jenkins和Kubernetes集成到CI/CD流程中。用户之前的问题是关于通过TraceID连接ELK和SkyWalking,现在转向了CI/CD,这可能需要我调整思路。 首先,用户提到参考了三个引用,其中涉及JenkinsGitLab、K8s、Harbor等工具。我需要结合这些信息,但用户强调之前的引用仅供参考,真正需求是集成Jenkins和K8s。因此,我应该重点考虑用户上一次的问题,即如何连接不同系统,但这次是CI/CD的整合。 用户可能希望一个详细的步骤指南,类似于之前关于SkyWalking和ELK的集成方案。需要结构清晰,分阶段说明,可能包括环境准备、安装配置、流水线设计等。 接下来,我需要考虑用户可能的背景。他们可能已经有一定的Kubernetes基础,但需要指导如何将Jenkins部署到K8s中,配置动态agent,以及如何与GitLabHarbor等工具集成。此外,用户可能关注自动化构建、测试、部署的全流程。 需要确认的关键点: 1. 在K8s中部署Jenkins的方式,比如使用Helm或直接部署。引用3提到Helm,可能推荐这种方式。 2. Jenkins如何动态创建Slave Pods,引用2提到Kubernetes插件,需要详细说明配置。 3. 镜像构建推送Harbor的步骤,需要Dockerfile和凭证配置。 4. 部署到K8s的步骤,可能使用kubectl或Helm,以及如何集成到Jenkins流水线中。 5. 如何触发流水线,比如GitLab webhook,引用1和2提到GitLab集成,可能需要说明配置方法。 6. 权限管理和存储配置,比如PV和ServiceAccount的设置,确保Pod有足够权限操作集群。 可能的用户痛点包括动态agent的配置、凭证的安全管理、流水线脚本的编写、部署到不同环境(测试/生产)的策略。需要提供具体的配置示例和代码片段,如Jenkinsfile、Helm values文件、Kubernetes插件配置等。 还需要考虑验证步骤,确保各环节正常工作,比如构建是否触发,镜像是否推送成功,部署是否生效。此外,高级优化如回滚机制、多环境支持、安全加固可能也是用户需要的,但可能属于后续步骤。 需要避免过于笼统,尽可能给出具体命令和配置,比如Helm安装命令、Jenkins Kubernetes插件的Pod模板,以及如何处理敏感信息如Docker registry的凭证。 最后,确保回答结构清晰,分阶段说明,包含常见问题解决,帮助用户排查可能遇到的问题,如Slave Pod无法启动、权限不足等。</think>### Jenkins 与 Kubernetes 集成实现 CI/CD 的完整方案 --- #### 一、架构设计要点 **核心逻辑**:通过 `Jenkins Kubernetes 插件` 实现动态构建节点管理,利用 Kubernetes 弹性资源完成代码编译、镜像构建、部署等操作[^2]。 **技术栈**: - **Jenkins**(Master 节点):任务调度与流水线控制中心 - **Kubernetes**:提供动态 Jenkins Slave Pod - **Harbor**:私有镜像仓库(版本:v2.5+) - **GitLab**:代码仓库与 Webhook 触发器 ```mermaid graph LR A[GitLab] -->|Webhook触发| B(Jenkins Master) B -->|创建Slave Pod| C(Kubernetes集群) C --> D[构建镜像] D -->|推送镜像| E(Harbor) E -->|拉取镜像| F[部署到K8S] ``` --- #### 二、环境准备阶段 ##### 1. Kubernetes 基础配置 - **StorageClass 配置**(NFS 示例): ```yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nfs-storage provisioner: k8s-sigs.io/nfs-subdir-external-provisioner parameters: archiveOnDelete: "false" ``` - **ServiceAccount 权限**(Jenkins Slave 所需): ```bash kubectl create clusterrolebinding jenkins-slave-role \ --clusterrole=edit \ --serviceaccount=default:jenkins-slave \ --namespace=default ``` ##### 2. Jenkins 部署(Helm 方式) ```bash helm repo add jenkins https://charts.jenkins.io helm upgrade --install jenkins jenkins/jenkins \ --set controller.serviceType=NodePort \ --set controller.servicePort=8080 \ --set controller.adminPassword=admin123 \ --set controller.installPlugins="kubernetes:4010.v47c3173a_ceb_5 workflow-aggregator:596.v8c21c963d92d" ``` --- #### 三、关键集成步骤 ##### 1. Jenkins Kubernetes 插件配置 **管理界面路径**:`Jenkins 控制台 > 系统管理 > 节点管理 > 配置云` ```conf # Pod 模板配置(示例) podTemplate( containers: [ containerTemplate( name: 'jnlp', image: 'harbor.example.com/library/jenkins-jnlp-slave:4.7-1', args: '${computer.jnlpmac} ${computer.name}' ), containerTemplate( name: 'docker', image: 'docker:20.10-dind', privileged: true ) ], volumes: [ hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock') ] ) ``` **参数说明**: - `docker-dind` 容器用于镜像构建[^2] - 必须挂载宿主机的 Docker Socket - JNLP Slave 镜像需提前推送Harbor[^2] ##### 2. 凭证配置 **敏感信息存储路径**:`Jenkins 控制台 > 凭证 > 系统 > 全局凭证` | 凭证类型 | 用途 | ID | |----------------|--------------------------|-----------------| | SSH Username | GitLab 代码克隆 | gitlab-ssh-key | | Secret Text | Harbor 镜像推送权限 | harbor-push | | Kubeconfig文件 | Kubernetes 部署权限 | k8s-deploy-conf | --- #### 四、流水线设计(Jenkinsfile 示例) ```groovy pipeline { agent { kubernetes { label 'jenkins-slave' yaml """ spec: containers: - name: kaniko image: gcr.io/kaniko-project/executor:v1.9.0 command: ['/busybox/cat'] tty: true volumeMounts: - name: docker-config mountPath: /kaniko/.docker volumes: - name: docker-config configMap: name: docker-config """ } } stages { stage('代码检出') { steps { git branch: 'main', credentialsId: 'gitlab-ssh-key', url: 'git@gitlab.example.com:myproject/backend.git' } } stage('单元测试') { steps { sh 'mvn test' } } stage('构建镜像') { steps { container('kaniko') { sh """ /kaniko/executor \ --context=`pwd` \ --dockerfile=Dockerfile \ --destination=harbor.example.com/library/myapp:${env.BUILD_NUMBER} \ --cache=true """ } } } stage('部署到K8S') { steps { withCredentials([file(credentialsId: 'k8s-deploy-conf', variable: 'KUBECONFIG')]) { sh 'kubectl apply -f k8s/deployment.yaml' } } } } } ``` **技术亮点**: - 使用 `Kaniko` 实现无特权模式镜像构建[^3] - 通过 ConfigMap 传递 Docker 认证配置 - 动态加载 Kubeconfig 实现多集群部署 --- #### 五、高级配置 ##### 1. GitLab Webhook 自动触发 **Jenkins 配置**: 1. 安装 `GitLab Plugin` 2. 在流水线设置中启用 `Build when a change is pushed to GitLab` **GitLab 配置**: ```bash # 项目设置 > Webhooks URL: http://jenkins.example.com/project/my-pipeline Secret Token: JENKINS_GITLAB_SECRET ``` ##### 2. 多环境部署策略 ```groovy stage('生产环境发布') { when { branch 'main' } steps { input message: '确认发布到生产环境?', ok: '批准' sh 'kubectl apply -f k8s/prod-deployment.yaml' } } ``` --- #### 六、验证与调试 ##### 1. 流水线执行验证 ```bash # 查看 Kubernetes Pod 状态 kubectl get pods -l jenkins=slave # 检查 Harbor 镜像版本 curl -u admin:Harbor12345 https://harbor.example.com/v2/library/myapp/tags/list ``` ##### 2. 常见问题排查 | 现象 | 排查方向 | 解决方案 | |-----------------------|----------------------------|--------------------------------------------------------------------------| | Slave Pod 无法启动 | 检查资源配额/镜像拉取权限 | `kubectl describe pod <pod-name>` 查看事件日志 | | 镜像推送失败 | Harbor 凭证配置错误 | 确认 `/kaniko/.docker/config.json` 包含正确认证信息 | | 部署权限不足 | RBAC 配置错误 | 检查 ServiceAccount 是否绑定 clusterrole edit 权限 | | Webhook 无法触发构建 | 网络策略/Token 不匹配 | 在 Jenkins 系统日志中查看 `GitLab Webhook` 请求记录 | --- #### 、优化建议 1. **构建缓存加速**:为 Maven/Gradle 配置 Nexus 私服仓库 2. **安全加固**:使用 Vault 管理敏感凭证 3. **监控集成**:通过 Prometheus 收集 Jenkins 与 K8S 的监控指标 4. **灾备方案**:定期备份 Jenkins 的 `JENKINS_HOME` 目录至 S3 存储桶
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流年五十前

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值