docker从零部署jenkins保姆级教程

jenkins,基本是最常用的持续集成工具。在实际的工作中,后端研发一般没有jenkins的操作权限,只有一些查看权限,但是我们的代码是经过这个工具构建出来部署到服务器的,所以我觉着有必要了解一下这个工具的搭建过程以及简单的一些使用。尽可能多的了解公司中和你开发相关的所有东西,不要只是干CRUD的工作,只有这样,你才会有成长。

我本地使用的mac充当宿主机,因为最近一直在看docker相关的东西,docker对于搭建测试环境非常方便,所以这次也选择用docker搭建jenkins。有一点,特别提一下,因为我们要访问github、dockerhub,所以需要能科学上网。

这篇文章的主要目标是搭建起我们本地的jenkins,然后用jenkins对我们的本地项目进行自动化的构建,打包,也就是我们常常手动执行的maven的clean、install命令。

好,下面正式开始搭建过程

文章目录

1、下载jenkins镜像

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

bash 复制代码
docker pull jenkins/jenkins:jdk11

最好不要尝试下载纯jenkins的容器,否则可能会报:

The JAVA_HOME environment variable is not defined correctly

2、创建jenkins容器

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

bash 复制代码
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的工作目录,这个目录很重要。jenkins构建好的项目就会放到这个目录中。这里我们将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

bash 复制代码
System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone','Asia/Shanghai')

如果Result是这个结果,就证明执行成功了

此时,返回到job的构建结果处,再看我们的构建时间,就和宿主机保持一致了

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

相关推荐
春日见9 分钟前
Docker中如何删除镜像
运维·前端·人工智能·驱动开发·算法·docker·容器
Anastasiozzzz37 分钟前
Docker介绍与常见指令
运维·docker·容器
qq_229058011 小时前
Docker常用命令
linux·服务器·docker
春日见1 小时前
Docker如何基于脚本拉取镜像,配置环境,尝试编译
运维·驱动开发·算法·docker·容器
wacpguo1 小时前
Ubuntu 24.04 安装 Docker
linux·ubuntu·docker
yunlong32672 小时前
吊装助理顶部板式吊耳设计模块使用教程
容器·施工·化工·吊装·起重·钢结构·吊耳
你才是臭弟弟2 小时前
Docker 容器使用运行镜像(Windows)
运维·docker·容器
IT运维爱好者2 小时前
【Docker】解决Docker容器时间与宿主机时间不一致的几种方法
docker·容器
鸠摩智首席音效师2 小时前
如何在 Docker 容器下运行 cronjob ?
运维·docker·容器
橙露3 小时前
Kubernetes 集群运维:故障排查、资源调度与高可用配置
运维·容器·kubernetes