docker从零部署jenkins保姆级教程

news2024/11/19 15:17:31

jenkins,基本是最常用的持续集成工具。在实际的工作中,后端研发一般没有jenkins的操作权限,只有一些查看权限,但是我们的代码是经过这个工具构建出来部署到服务器的,所以我觉着有必要了解一下这个工具的搭建过程以及简单的一些使用。尽可能多的了解公司中和你开发相关的所有东西,不要只是干CRUD的工作,只有这样,你才会有成长。
我本地使用的mac充当宿主机,因为最近一直在看docker相关的东西,docker对于搭建测试环境非常方便,所以这次也选择用docker搭建jenkins。有一点,特别提一下,因为我们要访问github、dockerhub,所以需要能科学上网。
这篇文章的主要目标是搭建起我们本地的jenkins,然后用jenkins对我们的本地项目进行自动化的构建,打包,也就是我们常常手动执行的maven的clean、install命令。
好,下面正式开始搭建过程

文章目录

  • 1、下载jenkins镜像
  • 2、创建jenkins容器
  • 3、验证jenkins容器启动成功
  • 4、安装jenkins插件
  • 5、创建一个jenkins用户
  • 6、安装jenkins工具
  • 7、创建第一个jenkins任务
    • 7.1、创建一个任务
    • 7.2、配置git仓库的信息
    • 7.3、执行maven的打包命令
  • 8、测试jenkins打包
  • 9、jenkins构建时间和服务器同步

1、下载jenkins镜像

jenkins需要依赖jdk环境,所以我们直接下载带JDK的jenkins镜像,如下图

docker pull jenkins/jenkins:jdk11

最好不要尝试下载纯jenkins的容器,否则可能会报:
The JAVA_HOME environment variable is not defined correctly

2、创建jenkins容器

下面是创建jenkins容器的docker命令,解释一下创建参数

docker run 
-p 8080:8080 
-p 5030:5000 
--restart=always 
-v /etc/localtime:/etc/localtime 
-v /Users/abc/personal/test/docker/jenkins1/jenkins-data:/var/jenkins_home 
-v /Users/abc/.docker/run/docker.sock:/var/run/docker.sock 
-v /Users/abc/personal/test/docker/maven/apache-maven-3.8.1:/usr/local/maven 
--name jenkins_jdk11 
-d 
jenkins/jenkins:jdk11

1)、-p 8080:8080和 -p 5030:5000,都是将容器端口映射到宿主机的一个端口
2)、–restart=alwasy,是容器启动失败后重启
3)、-v是卷的意思,将宿主机目录映射到容器中的目录,卷在docker中很重要,感兴趣的同学可以再详细了解一下。
可以看到,我们的容器创建命令中有4个卷的指令。
第一个:将宿主机的时间文件映射到容器中,为的是让宿主机的时间和容器的时间保持一致
第二个:创建jenkins的工作目录,映射到宿主机的一个目录中
第三个:将本地的docker监听的文件映射到容器中。
第四个:将本地maven映射到容器的maven中。
4)、–name jenkins_jdk11,容器的名称是jenkins_jdk11
5)、-d 容器后台运行
6)、jenkins/jenkins:jdk11,使用这个镜像创建容器

3、验证jenkins容器启动成功

可以访问127.0.0.1:8080,如果可以看到jenkins的登录页面就算安装成功了
在这里插入图片描述
我们查看一下登录密码,输入,就可以登录到jenkins的主页面

4、安装jenkins插件

初始化jenkins的时候,会提示你安装建议的插件或者自行安装插件,我建议大家听jenkins的建议,毕竟当务之急是让jenkins先跑起来。
在这里插入图片描述
jenkins推荐的插件有一点多,需要等一会。

5、创建一个jenkins用户

随便搞一下,但是要记住,否则后面就登录不了jenkins了
在这里插入图片描述
下面这个配置信息,直接使用默认即可,不需要更改
在这里插入图片描述

6、安装jenkins工具

主要就是让jenkins使用上我们容器中的maven。
选择Manage Jenkins标签下的Tools标签
在这里插入图片描述
拉到最后
在这里插入图片描述
/usr/local/maven,是我们容器的maven目录,实际上是映射的宿主机中的maven(创建容器的时候,我们使用-v指定了本地的maven目录映射到容器的/user/local/maven目录中)

7、创建第一个jenkins任务

7.1、创建一个任务

在这里插入图片描述
填写一个任务名称,然后选择Freestyle project,接着点击ok
在这里插入图片描述

7.2、配置git仓库的信息

尤其注意最下面那个main,不是master了,我卡在这个地方好久,太大意了。这里稍微偏点题,github为什么要将用了很多年的master修改为main呢?据说是因为master、slave在老美那边代表的是奴隶制的词汇,很多人建议不要使用这种带有歧视性的词汇,所以github就将主分支的名称从master换成了main
在这里插入图片描述
这里要注意,你填写的git仓库代码,根路径下必须有一个pom文件,否则maven打包就会因为找不到pom而报错:
The goal you specified requires a project to execute but there is no POM in this directory

7.3、执行maven的打包命令

这个地方是为了验证我们的jenkins是不是安装成功了
在这里插入图片描述
在这里插入图片描述

8、测试jenkins打包

点击Build Now标签,开始构建项目,首次构建需要将项目依赖的jar包下载到容器中,可能需要一点时间,第二次构建就快多了。这里注意:我们的首次构建,不是要构建本地项目的docker镜像,只是测试一下jenkins的构建功能是否正常。
如下图,就是正在构建
在这里插入图片描述
如果看到构建任务的结束标志是一个✅,就是构建成功了。反之就是构建失败
在这里插入图片描述

如果构建失败,我们可以点击#1
在这里插入图片描述
然后点击Console Output来查看具体的报错信息
在这里插入图片描述

9、jenkins构建时间和服务器同步

不知道大家有没有注意到构建结果那里的时间和我们的宿主机以及docker容器的时间对不上,差了8个小时。
这是因为,本地宿主机是CST时区,东8区
而docker因为是老美的东西,所以默认是UTC时区,标准时间。这2个时区的时间差是8个小时,所以导致了我们jenkins的构建时间和宿主机差了8个小时。
修改的方式很简单,我们只需要在jenkins上执行一条命令即可
点击Manage Jenkins标签,然后选择最下面的Script Console
在这里插入图片描述
然后输入如下的命令,点击run

System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone','Asia/Shanghai')

如果Result是这个结果,就证明执行成功了
在这里插入图片描述
此时,返回到job的构建结果处,再看我们的构建时间,就和宿主机保持一致了
在这里插入图片描述

下一篇,讲一下如何通过jenkins构建一个本地项目的docker镜像并运行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/971703.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式环境下的数据同步

一般而言elasticsearch负责搜索(查询),而sql数据负责记录(增删改),elasticsearch中的数据来自于sql数据库,因此sql数据发生改变时,elasticsearch也必须跟着改变,这个就是…

数据结构与算法-插入希尔归并

一:排序引入 我们通常从哪几个方面来分析一个排序算法? 1.时间效率:决定了算法运行多久,O(1) 2.空间复杂度: 3.比较次数&交换次数:排序肯定会牵涉到两个操作,一个比较是肯定的。…

mac常见问题(五) Mac 无法开机

在mac的使用过程中难免会碰到这样或者那样的问题,本期为您带来Mac 无法开机怎么进行操作。 1、按下 Mac 上的电源按钮。每台 Mac 电脑都有一个电源按钮,通常标有电源符号 。然后检查有没有通电迹象,例如: 发声,例如由风…

springmvc5.x-mvc实现原理及源码实现

上文:spring5.x-声明式事务原理及源码实现 系列文章: spring5.x-声明式事务原理及源码实现 spring5.x-AOP实现原理及源码分析 spring5.x-监听器原理及源码实现 spring5.x-解决循环依赖分析 spring5.x-IOC模块源码学习 spring5.x介绍及搭配spring源码阅读…

Xcode 清空最近打开的项目

打开Xcode任意项目 File -> Open Recent -> Clear Menu

桌面应用小程序,一种创新的跨端开发方案

Qt Group在提及2023年有桌面端应用程序开发热门趋势时,曾经提及三点: 关注用户体验:无论您是为桌面端、移动端,还是为两者一起开发应用程序,有一点是可以确定的:随着市场竞争日益激烈,对产品的期…

怎么批量在图片名后加相同的文字

怎么批量在图片名后加相同的文字?有个小伙伴通过私信想我咨询一个问题,它从事的是摄影类的工作,每天会在电脑上存储非常多的图片,时间一久电脑上保存的图片非常的多,这让图片的管理和查找变得比较麻烦,有时…

从智能手机到智能机器人:小米品牌的高端化之路

原创 | 文 BFT机器人 前言 在前阵子落幕的2023世界机器人大会“合作之夜”上,北京经济技术开发区管委会完成了与世界机器人合作组织、小米机器人等16个重点项目签约,推动机器人创新链和产业链融合,其中小米的投资额达到20亿! 据了…

E5061B/是德科技keysight E5061B网络分析仪

181/2461/8938产品概述 是德科技E5061B(安捷伦)网络分析仪在从5 Hz到3 GHz的宽频率范围内提供通用的高性能网络分析。E5061B提供ENA系列常见的出色RF性能,还提供全面的LF(低频)网络测量能力;包括内置1 Mohm输入的增益相位测试端口。E5061B从低频到高频的…

通过cpolar内网穿透,在家实现便捷的SSH远程连接公司内网服务器教程

文章目录 1. Linux CentOS安装cpolar2. 创建TCP隧道3. 随机地址公网远程连接4. 固定TCP地址5. 使用固定公网TCP地址SSH远程 本次教程我们来实现如何在外公网环境下,SSH远程连接家里/公司的Linux CentOS服务器,无需公网IP,也不需要设置路由器。…

VLAN间路由:单臂路由与三层交换

文章目录 一、定义二、实现方式单臂路由三层交换 三、单臂路由与三层路由优缺点对比四、常用命令 首先可以看下思维导图,以便更好的理解接下来的内容。 一、定义 VLAN间路由是一种网络配置方法,旨在实现不同虚拟局域网(VLAN)之…

pdf文件过大如何缩小上传?pdf压缩跟我学

在我们日常工作和生活中,经常会遇到PDF文件过大的问题,给文件传输和存储带来了很大的不便。那么,如何缩小PDF文件大小以便上传呢?下面就给大家分享几个压缩方法,一起来了解下PDF文件压缩方法吧~ 方法一:嗨格…

数据结构——七大排序[源码+动图+性能测试]

本章代码gitee仓库:排序 文章目录 🎃0. 思维导图🧨1. 插入排序✨1.1 直接插入排序✨1.2 希尔排序 🎊2. 选择排序🎋2.1 直接选择排序🎋2.2 堆排序 🎏3. 交换排序🎐3.1 冒泡排序&#…

TS编译选项

自动监控编译 tsc xxx.ts -w 在一个文件夹下,创建 tsconfig.json 文件,在用命令 tsc 就可以自动编译当前文件夹下的ts文件 tsconfig.json文件配置如下: {/*tsconfig.json 是ts编译器的配置文件,ts编译器可以根据它的信息来对代…

mysql 的增删改查以及模糊查询、字符集语句的使用

一、mysql启动与登陆(windows下的mysql操作) 1.启动mysql服务 net start mysql81 2.登陆mysql mysql -uroot -p 3.查看所有数据库 show databases; 二、模糊查询(like) 1. _代表查询单个 2.%代表查询多个 3.查找所有含有schema的数据库;…

钡铼技术BL122DN实现DNP3.0转Profinet协议的双向数据传输

引言 随着工业自动化技术的不断发展,各种通信协议和标准层出不穷。BL122DN DNP3.0转Profinet协议网关作为一种高效的解决方案,在工业自动化领域发挥着重要作用。本文将详细介绍BL122DN DNP3.0转Profinet协议网关的特点、功能和优势,以及在实…

使用ppt和texlive生成eps图片(高清、可插入latex论文)

一、说明 写论文经常需要生成高清的图片插入到论文中,本文以ppt画图生成高质量的eps图片的实现来介绍具体操作方法。关于为什么要生成eps图片,一个是期刊要求(也有不要求的),另一个是显示图像的质量高。 转化获得eps…

SpringCloud(36):Nacos服务发现基础应用

1 服务发现数据模型 Nacos在经过阿里内部多年生产经验后提炼出的数据模型,则是一种服务-集群-实例的三层模型,这样基本可以满足服务在所有场景下的数据存储和管理。 命名空间(Namespace) 用于进行租户粒度的配置隔离,命名空间不仅适用于nacos的配置管理,同样适用于服务发…

【Vue】实现当前页面刷新的四种方法

目录 前言方法一:location.reload方法二:$router.go(0)方法三:provide、inject和$nextTick方法四:创建空白页 前言 这两周在写一个后台管理,每次调用接口实现增删改查的过程中,都需要刷新当前页面或者刷新…

web pdf 拖拽签章

web pdf 拖拽签章 主要通过火狐的pdfjs 来实现 1. 下载js 并编译 地址 https://mozilla.github.io/pdf.js/ 按照官网当下下载并编译就得到了js 2.其实也没有什么好讲的,都是用的js中的方法,官网中都有 按照步骤就能生成一个document元素,然…