kubernetes下jenkins实战maven项目编译构建

简介: 找个热门的开源项目(maven工程),在k8s环境下用jenkins构建

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码): https://github.com/zq2599/blog_demos

关于kubernetes环境的jenkins集群

  • 在kubernetes环境部署的jenkins集群,执行任务时会新建pod,任务完成后pod被销毁,架构如下:

在这里插入图片描述

编译构建maven项目

  • 本文是《kubernetes下的jenkins如何设置maven》的续篇,前面已做好了maven相关的设置,今天找一个热门的开源maven项目,创建一个pipeline任务去编译这个maven项目,并且将结果输出到宿主机上;
  • 本文选择了spring-cloud-alibaba用来实战,这是个父子结构的maven工程;

环境信息

  • kubernetes:1.15
  • jenkins:2.190.2
  • maven:3.6.3
  • spring-cloud-alibaba:2.1.1.RELEASE

创建pipeline任务

  • 新建任务,点击下图红框:

在这里插入图片描述

  • 如下,输入任务名字,然后选择流水线

在这里插入图片描述

  • 以下是Pipeline脚本:
pipeline {
 agent {
 label 'my-jenkins-jenkins-slave'
 }
 tools {
 maven 'mvn-3.6.3'
 }
 stages {
 stage('Checkout') {
 steps {
 echo '从GitHub下载spring-cloud-alibaba工程的源码(2.1.1.RELEASE归档包)'
 sh 'wget https://github.com/alibaba/spring-cloud-alibaba/archive/v2.1.1.RELEASE.tar.gz'
 echo '下载结束,解压归档包'
 sh 'tar -zxf v2.1.1.RELEASE.tar.gz'
 }
 }
 stage('Build') {
 steps {
 echo '开始编译构建'
 sh 'cd spring-cloud-alibaba-2.1.1.RELEASE && mvn clean package -U -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -s /home/jenkins/settings/settings.xml'

 }
 }
 stage('Save') {
 steps {
 echo '将构建结果保存到宿主机'
 sh 'cd spring-cloud-alibaba-2.1.1.RELEASE/spring-cloud-alibaba-nacos-discovery/target && cp ./*.jar /home/jenkins/jenkins_output/'
 echo '传送完毕'
 }
 }
 stage('Clean') {
 steps {
 echo '清理Maven工程'
 sh 'cd spring-cloud-alibaba-2.1.1.RELEASE && mvn clean'
 echo '清理完毕'
 }
 }
 }
}
  • 上述脚本有以下几点需要注意:

a. lable等于my-jenkins-jenkins-slave,这个要和Pod Templates设置中的标签列表保持一致,如下图红框所示:
在这里插入图片描述
b. 编译构建的命令是mvn clean package -U -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -s /home/jenkins/settings/settings.xml,这里面使用了指定位置的settings.xml文件,该文件来自configmap的挂载,这样就用上了自定义的settings.xml,里面可以配置局域网的nexus信息;

c. 为了缩短编译构建时间,mvn命令中使用了参数-Dmaven.test.skip=true-Dmaven.javadoc.skip=true,分别用来跳过单元测试和文档生成;

d. 构建结果被复制到/home/jenkins/jenkinsoutput/,这个路径已经被映射到宿主机的/usr/local/jenkinsoutput/目录,因为只是演示,所以这里只复制了一个子工程的构建结果;

e. 清理阶段的mvn clean其实没什么意义,因为pod很快就会被销毁,这里只是个参考作用,如果有远程资源或者数据库相关的清理操作可以在此执行;

  • 点击底部的Save保存;

执行pipeline任务

  • 点击下图红框中的Build Now即可开始执行任务:

在这里插入图片描述

  • 如果局域网内部署了Nexus,并且在settings.xml中做了相关设置,只要Nexus中缓存过相关的jar,整个任务能在几分钟内完成,如下图:

在这里插入图片描述

  • 在任务完成之前,执行命令kubectl describe pod xxxxx -n helm-jenkins,以确定pod是在哪个宿主机上执行的,待任务结束后,去查看此机器的/usr/local/jenkins_output目录,可见构建结果已经复制过来了,如下:

在这里插入图片描述

  • 至此,实战完成,我们在kubernetes下的jenkins环境中,用pipeline任务成功的编译构建了开源项目spring-cloud-alibaba的源码,并取得了构建结果,这样的环境和pipeline只需做一些定制调整,就可以打造成符合自己要求的CI环境了,希望本文能带给您一些参考;

欢迎关注阿里云开发者社区博客:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
9月前
|
Java 项目管理 Maven
Maven项目管理与构建自动化完全指南
Maven彻底改变了Java项目管理方式,通过POM模型、依赖管理和标准化构建流程,大幅提升开发效率。本文深入解析其核心概念、多模块管理、私服搭建及与Spring Boot、Docker等现代技术栈的集成实践,助力开发者实现高效、规范的项目构建与团队协作。
1323 156
Maven项目管理与构建自动化完全指南
|
10月前
|
Kubernetes Devops 应用服务中间件
基于 Azure DevOps 与阿里云 ACK 构建企业级 CI/CD 流水线
本文介绍如何结合阿里云 ACK 与 Azure DevOps 搭建自动化部署流程,涵盖集群创建、流水线配置、应用部署与公网暴露,助力企业高效落地云原生 DevOps 实践。
1141 2
|
运维 Kubernetes Docker
利用Docker和Kubernetes构建微服务架构
利用Docker和Kubernetes构建微服务架构
|
11月前
|
Java jenkins 应用服务中间件
结合Jenkins与Tomcat,实施Maven项目的自动构建和部署流程。
任何项目构建和部署的自动化流程,总离不开对各个环节精细把控与密切配合。涉及到源代码管理、构建工具、持续集成服务器以及最终的运行时环境的协调。通过上述简洁实用的步骤,可以实现Maven项目从源代码到运行状态的无缝过渡,进而提升软件开发的效率与质量。
547 0
|
Java 测试技术 项目管理
【JavaEE】从 0 到 1 掌握 Maven 构建 Java 项目核心技巧 解锁 Java 项目高效管理实用实例
本文从Maven基础概念讲起,涵盖安装配置、核心概念(如POM与依赖管理)及优化技巧。结合Java Web项目实例,演示如何用Maven构建和管理项目,解决常见问题,助你高效掌握这一强大工具,提升Java开发与项目管理能力。适合初学者及进阶开发者学习。资源链接:[点此获取](https://pan.quark.cn/s/14fcf913bae6)。
473 6
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
1284 33
|
人工智能 Kubernetes 异构计算
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
889 5
|
Kubernetes 持续交付 数据库
阿里云ACK+GitLab企业级部署实战教程
GitLab 是一个功能强大的基于 Web 的 DevOps 生命周期平台,整合了源代码管理、持续集成/持续部署(CI/CD)、项目管理等多种工具。其一体化设计使得开发团队能够在同一平台上进行代码协作、自动化构建与部署及全面的项目监控,极大提升了开发效率和项目透明度。 GitLab 的优势在于其作为一体化平台减少了工具切换,高度可定制以满足不同项目需求,并拥有活跃的开源社区和企业级功能,如高级权限管理和专业的技术支持。借助这些优势,GitLab 成为许多开发团队首选的 DevOps 工具,实现从代码编写到生产部署的全流程自动化和优化。
|
人工智能 Kubernetes 异构计算
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
本教程演示如何在ACK中多机分布式部署DeepSeek R1满血版。
|
XML Java 测试技术
从零开始学 Maven:简化 Java 项目的构建与管理
Maven 是一个由 Apache 软件基金会开发的项目管理和构建自动化工具。它主要用在 Java 项目中,但也可以用于其他类型的项目。
993 1
从零开始学 Maven:简化 Java 项目的构建与管理