关于kubernetes环境的jenkins集群

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



在kubernetes搭建jenkins集群的细节,请参考《Helm部署和体验jenkins》

编译构建maven项目

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

环境信息

  1. kubernetes:1.15
  2. jenkins:2.190.2
  3. maven:3.6.3
  4. 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,分别用来跳过单元测试和jave文档制作;

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

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环境了,希望本文能带给您一些参考;

欢迎关注我的公众号:程序员欣宸

https://github.com/zq2599/blog_demos

kubernetes下jenkins实战maven项目编译构建的更多相关文章

  1. Linux CentOS7下svn+tomcat9.0+maven3.3+jenkins实现web项目自动构建与远程发布

    CentOS7下svn+tomcat9.0+maven3.3+jenkins实现web项目自动构建与远程发布 by:授客 QQ:1033553122 目录 一.    实践环境. 1 二.    安装 ...

  2. MAVEN学习-第一个Maven项目的构建

    MAVEN安装成功之后就可以进行项目的构建和管理了: 为什么要用maven进行项目的构建和管理? 对于初学者来说一个最直接的也是最容易里的优点在于JAR包的管理,相对于以前开发一个项目的时候我们需要用 ...

  3. maven项目编译通过,测试用例卡住,断点也用不了

    maven项目编译通过,测试用例卡住,断点也用不了.如下图 maven的tomcat插件可以运行没报错,但是网页访问一直转圈 原因: 最后发现是typeAliasesPackage这里设置了别名,所以 ...

  4. Jenkins中maven的作用--构建项目(三)

    本文主要根据Jenkins上的日志来继续说明构建项目的过程,上文我们已经讲到构建一个测试环境或单独终端的过程,详情可以了解上篇文章 一.背景介绍 首先看下SVN代码的仓库的结构: 代码仓库里有一个文件 ...

  5. SpringCloud+Docker+Jenkins+GitLab+Maven实现自动化构建与部署实战

    1.前言与初衷 本文章会涉及Docker常见命令基础知识点结合不同场景实操一起使用. 本文章会涉及结合工作过程中部署不同环境服务器的项目案例场景为初心进行实际细讲. 本文章主要讲述Docker.Jen ...

  6. maven项目编译漏掉src/main/java下的xml配置文件

    在整合Spring + Mybatis框架的时候,自动扫描配置都已经配置好了. 配置如下: <?xml version="1.0" encoding="UTF-8& ...

  7. Jenkins创建Maven项目及SSH部署

    前面我们已经安装了Jenkins的环境,以及配置好了jdk和maven.下面我们来看如何通过Jenkins将svn的项目进行打包和部署. 创建MAVEN项目 1.点击新建,输入项目名,选择" ...

  8. 【Jenkins】linux下Jenkins集成ant进行编译并发送结果

    三个文章吧: 1 如何使用ant编译执行jmeter测试用例,并生成html报告 2 如何在Linux下搭建jenkins环境. 3 如何在Linux下搭建的jenkins中执行ant构建运行,并发送 ...

  9. 如何在jenkins的maven项目中,用mvn命令行指定findbugs的黑名单规则文件

    一:问题背景 最近在研究jenkins的过程中,针对maven项目,打算添加findbugs进行静态检查,但我不太想在项目的pom中进行修改,最好可以只修改jenkins的job配置,即配置外部化. ...

随机推荐

  1. 放眼SEM现状及发展历程

    http://www.wocaoseo.com/thread-187-1-1.html 由于近年来移动应用的基本普及,搜索引擎营销随之进入高速发展时代,应用层次的提升已经成为企业营销策略的一个重要组成 ...

  2. 如何通过seo技术提高网站对用户的友好度

    http://www.wocaoseo.com/thread-129-1-1.html    今天的天气又是29度,眼看着满大街的人都穿着短袖和衬衣了,自己也再不能穿个厚厚的外套出去了,要不会被别人笑 ...

  3. Android java程序员必备技能,集合与数组中遍历元素,增强for循环的使用详解及代码

    Android java程序员必备技能,集合与数组中遍历元素, 增强for循环的使用详解及代码 作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 For ...

  4. Android项目智能机器人的实现,带有源代码,图灵智能机器人,详细讲解。。

    大家好,今天给大家推荐一个我利用图灵api制作的android项目,智能机器人,类似智能小冰,等一些会机器人. 下面看效果.女头像是系统自动给你回复的,男头像是你输入的内容.项目源代码是eclipse ...

  5. 如何设置Tomact的标题,运行Tomcat显示为自己程序的命名

    当我们使用Tomcat部署好一个web系统后,在窗口处默认会显示Tomcat名字.但如果我们用多个Tomcat部署时,则需要区分这些窗口,这是需要修改Tomact的配置,来设置一个我们需要显示的标题. ...

  6. Vue-router的用法与使用步骤

    Vue-router的使用步骤: Vue Router的使用步骤还是比较清晰的,按照步骤一步一步就能完成路由操作 A.导入js文件 B.添加路由链接 C.添加路由占位符(最后路由展示的组件就会在占位符 ...

  7. 太刺激了,面试官让我手写跳表,而我用两种实现方式吊打了TA!

    前言 本文收录于专辑:http://dwz.win/HjK,点击解锁更多数据结构与算法的知识. 你好,我是彤哥. 上一节,我们一起学习了关于跳表的理论知识,相信通过上一节的学习,你一定可以给面试官完完 ...

  8. 在CentOs7上yum安装redis

    在开始安装步骤之前,先把我的CentOs和redis版本号列出来: # 系统/软件 版本号 1 CentOS7 CentOS Linux release 7.2.1511 (Core) 2 redis ...

  9. Mybatis-日志

    日志 目录 日志 1. 日志工厂 1. STDOUT_LOGGING标准日志输出 2. LOG4J 1. 先导入Log4J的包 2. log4j.properties 3. 配置log4j为日志的实现 ...

  10. Java接口讲解

    Java中的接口其实就是一套“标准”或者“规范”,比如使用接口实现[电脑对鼠标.键盘使用USB接口的管理],鼠标和键盘他们与接口之间并不存在子类和父类的关系,但是鼠标和键盘又都要通过USB接口插入电脑 ...