百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

利用Jenkins生成maven项目镜像及容器

lipiwang 2024-10-15 18:37 15 浏览 0 评论

1、Jenkins是什么

目前持续集成(CI)已成为当前许多软件开发团队在整个软件开发生命周期内侧重于保证代码质量的常见做法。它是一种实践,旨在缓和和稳固软件的构建过程。并且能够帮助您的开发团队应对如下

挑战

  • 软件构建自动化:配置完成后,CI系统会依照预先制定的时间表,或者针对某一特定事件,对目标软件进行构建。

  • 构建可持续的自动化检查:CI系统能持续地获取新增或修改后签入的源代码,也就是说,当软件开发团队需要周期性的检查新增或修改后的代码时,CI系统会不断确认这些新代码是否破坏了原有软件的成功构建。这减少了开发者们在检查彼此相互依存的代码中变化情况需要花费的时间和精力。

  • 构建可持续的自动化测试:构建检查的扩展部分,构建后执行预先制定的一套测试规则,完成后触发通知(Email,RSS等等)给相关的当事人。

  • 生成后后续过程的自动化:当自动化检查和测试成功完成,软件构建的周期中可能也需要一些额外的任务,诸如生成文档、打包软件、部署构件到一个运行环境或者软件仓库。这样,构件才能更迅速地提供给用户使用。

Jenkins是一个可扩展的持续集成引擎。主要用于:持续、自动地构建/测试软件项目以及监控一些定时执行的任务。其拥有的特性包括:

1 . 易于安装-只要把jenkins.war部署到servlet容器,不需要数据库支持。

2 . 易于配置-所有配置都是通过其提供的web界面实现。

3 . 集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知。

4 . 生成JUnit/TestNG测试报告。

5 . 分布式构建支持Jenkins能够让多台计算机一起构建/测试。

6 . 文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。

7 . 插件支持:支持扩展插件,你可以开发适合自己团队使用的工具。

CI系统基本结构图

该系统的各个组成部分是按如下顺序来发挥作用的:

1 . 开发者检入代码到源代码仓库。

2 . CI系统会为每一个项目创建了一个单独的工作区。当预设或请求一次新的构建时,它将把源代码仓库的源码存放到对应的工作区。

3 . CI系统会在对应的工作区内执行构建过程。

4 . (配置如果存在)构建完成后,CI系统会在一个新的构件中执行定义的一套测试。完成后触发通知(Email,RSS等等)给相关的当事人。

5 . (配置如果存在)如果构建成功,这个构件会被打包并转移到一个部署目标(如应用服务器)或存储为软件仓库中的一个新版本。软件仓库可以是CI系统的一部分,也可以是一个外部的仓库,诸如一个文件服务器或者像Java.net、 SourceForge之类的网站。

6 . CI系统通常会根据请求发起相应的操作,诸如即时构建、生成报告,或者检索一些构建好的构件。

2、Jenkins的安装与部署

1 . 下载yum源

sudo wget -O/etc/yum.repos.d/jenkins.repo \https://pkg.jenkins.io/redhat-stable/jenkins.repo

2 . 导入密钥:sudo rpm --importhttps://pkg.jenkins.io/redhat-stable/jenkins.io.key

3 . 安装Jenkins:yum install jenkins

4 . 启动前检查是否安装jdk:java -version(最好是1.8以上的)

5 .修改配置文件:sudo vim /etc/init.d/jenkins

在candidates="路径后添加java路径/usr/java/jdk1.8.0_144/bin/java.(根据个人Java安装地址)

Java

vi /etc/sysconfig/jenkins

找到JENKINS_PORT=“8080”(8080是Jenkins默认端口,若被占用课修改为其他空闲端口)

Java

6 . 关闭防火墙

7 . 启动应用:sudo service jenkins start

3、Jenkins构建maven项目

1、插件安装

  • 启动Jenkins服务以后便可登录浏览器访问,因为我们需要从git上拉取源码,所以要在Jenkins上安装相应的git插件,同时我们也需要安装maven类的插件来支持构建maven项目。

Java

  • --》点击系统管理

Java

  • --》点击管理插件

Java

  • 在可选插件中找到Git plugin和Maven Integration plugin相关插件并安装插件安装完毕后重启Jenkins

2、新建maven项目

  • 新建一个job

  • 输入名称和项目类型

  • 源码管理

在源码管理项中选择git并输入git地址并在Credentials中Add仓库登录账号密码,在下方分支选择中选择需要构建的项目分支

  • 构建触发器

根据实际要求构建符合要求的触发器,此图中触发器Poll SCM的功能是每个一定时间便检查源码是否有更新,若有则自动构建。(*/60****含义是每隔60分钟检查一次git源码)

  • 构建选项

第一行选项是默认的pom文件在git的root目录下,如果pom文件在其他路径下,则需要输入相应的路径/pom.xml;第二行执行的maven命令

此时maven项目构建基本就完成,进入将maven项目生成docker镜像的步骤。

Java

4、Docker镜像构建

1、docker配置

在Jenkins中安装相应的docker插件(docker-build-step)

在Host服务器上安装docker(1.12.6版本慎用)

配置docker的远程访问:

  • centos下修改docker的配置文件/usr/lib/systemd/system/docker.service

  • 在[Service]的部分添加(此处是暴露的6732端口)

ExecStart=

ExecStart=/usr/bin/dockerd -Htcp://0.0.0.0:6732 -H unix://var/run/docker.sock

  • docker重新读取配置文件并重启docker服务

# systemct ldaemon-reload

# systemctl restartdocker

  • 进入Jenkins,选择系统管理--》系统设置--》Docker Builder

  • 在Docker URL处填写暴露的端口tcp://10.10.184.150:6732然后保存

这样Jenkins便可调用host服务器中的docker功能

2、创建Docker镜像

  • 执行脚本构建容器和镜像:在上一步构建war包之后继续选择POSTSteps,执行我们放在Jenkins宿主机上/home/skyform/目录下的构建脚本

  • 保存后进入操作页面并点击立即构建

Java

  • 此时左下角会出现构建进度条,蓝色表示构建成功,红色表示构建失败,灰色表示构建未完成

Java

  • 构建结束后点击构建编号,进入结果查看界面,点击Console Output查看构建过程

Java

这样就完成了利用Jenkins来够构建一个maven项目并将其制作成Docker镜像的工作。这个构建过程会根据你的触发器设置来不断实施,从而达到监控软件开发流程,快速显示问题与部署的目的。保证开发人员以及相关人员省时省力提高开发效率。

5、案例

目前SkyForm产品在进行微服务化改造,我们采用jenkins+docker支撑了SkyForm产品各个微服务的开发、部署、测试的整个过程

SkyForm产品中间件docker化:

SkyForm产品微服务docker化(19个):

Java

Java

SkyForm5.0微服务通过Jenkins实现持续集成及构建架构:

Java

研发人员将自己的代码提交至git仓库,Jenkins响应设定的触发器,将提交后的代码拉取、编译、打包至Jenkins宿主机上,然后执行脚本,通过Docker命令在开发环境(或测试环境)生成响应镜像并启动容器,研发人员此时即可在开发环境(或测试环境)下进行联调。

相关推荐

Go语言图书管理RESTful API开发实战

Go(Golang)是最近流行起来,且相对较新的编程语言。它小而稳定,使用和学习简单,速度快,经过编译(原生代码),并大量用于云工具和服务(Docker、Kubernetes...)。考虑到它所带来的...

轻松搞定Golang 中的内存管理(golang设置内存大小)

除非您正在对服务进行原型设计,否则您可能会关心应用程序的内存使用情况。内存占用更小,基础设施成本降低,扩展变得更容易/延迟。尽管Go以不消耗大量内存而闻名,但仍有一些方法可以进一步减少消耗。其中一...

golang实现deepseek 聊天功能(golang deepcopy)

在搭建完deepseek环境后在docker内部署deepseekrag环境,我们可以用golang实现聊天功能。在实现这个功能之前,我们先了解下提示词工程(prompt)。大模型虽然知道的东西多...

golang slice的扩容机制(golang设置内存大小)

在Go语言中,切片(slice)是一种动态数组,其长度可以在运行时改变。当向切片中添加元素时,如果切片的容量不足以容纳新元素,就会触发扩容机制。下面详细介绍Go语言切片的扩容机制。扩容触发条件...

Etcd服务注册与发现封装实现--golang

服务注册register.gopackageregisterimport("fmt""time"etcd3"github.com/cor...

嘿,轻松获取区间内所有日期的Golang小技巧!

在Go语言中,获取两个日期之间的所有日期可以手动实现一个函数来完成。以下是一个示例函数,它会返回一个日期切片,包含从开始日期到结束日期(包括这两个日期)的所有日期:packagemainimpo...

仓颉、Java、Golang性能测试——数组扩容

版本信息仓颉版本0.53.18Golang版本1.22.8Java版本corretto-1.8.0_452源码仓颉packagecangjie_testimportstd.collect...

Golang 58个坑 – 中级篇:36-51(golang cef)

36.关闭HTTP的响应体37.关闭HTTP连接38.将JSON中的数字解码为interface类型39.struct、array、slice和map的值比较40.从panic...

一篇文章学会golang语法,golang简明教程快速入门

Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。——Go-wikipedia.org1Go安装最新版本下载地址官方下载https...

运维大神如何使用 Golang 日志监控应用程序

你是如何使用Golang日志监控你的应用程序的呢?Golang没有异常,只有错误。因此你的第一印象可能就是开发Golang日志策略并不是一件简单的事情。不支持异常事实上并不是什么问题,异常在...

Golang操作elasticsearch(golang操作word)

简介开源的Elasticsearch是目前全文搜索引擎的首选,很多日志都是放到elasticsearch里面,然后再根据具体的需求进行分析。目前我们的运维系统是使用golang开发的,需要定时到e...

一文带你看懂Golang最新特性(golang x)

作者:腾讯PCG代码委员会经过十余年的迭代,Go语言逐渐成为云计算时代主流的编程语言。下到云计算基础设施,上到微服务,越来越多的流行产品使用Go语言编写。可见其影响力已经非常强大。一、Go语言发展历史...

Golang 最常用函数(备用查询)(golang函数和方法)

hello.gopackagemainimport"fmt"funcmain(){fmt.Println("Hello,world!")}直...

Golang:将日志以Json格式输出到Kafka

在上一篇文章中我实现了一个支持Debug、Info、Error等多个级别的日志库,并将日志写到了磁盘文件中,代码比较简单,适合练手。有兴趣的可以通过这个链接前往:https://github.com/...

如何从 PHP 过渡到 Golang?(php转go需要多久)

我是PHP开发者,转Go两个月了吧,记录一下使用Golang怎么一步步开发新项目。本着有坑填坑,有错改错的宗旨,从零开始,开始学习。因为我司没有专门的Golang大牛,所以我也只能一步步自己去...

取消回复欢迎 发表评论: