概述

本文主要介绍内容如下:

1.使用Docker搭建Jenkins

2.迁移原Jenkins数据到新搭建的Jenkins中

3.在Jenkins容器内部配置Maven的私服配置

4.在Jenkins容器内部配置Nodejs

使用Docker搭建Jenkins

Jenkins的最新版本已经全面支持jdk11,由于项目原因我们还是jdk8的钉子户,所以本次安装的Jenkins版本我们选择支持jdk8的最新版本。

拉取镜像与运行容器的命令如下:

docker pull jenkins/jenkins:lts-centos7-jdk8

docker run -d --name jenkins -u root -p 8081:8080 -p 50000:50000 --restart=always -v /home/jenkins_home/:/var/jenkins_home -v /usr/bin/docker:/usr/bin/docker  -v /var/run/docker.sock:/var/run/docker.sock -v /etc/localtime:/etc/localtime:ro jenkins/jenkins:lts-centos7-jdk8

目录映射中/home/jenkins_home/目录中的内容会在容器第一次启动时自动生成,它映射的是Jenkins的工作目录。

/usr/bin/docker与/var/run/docker.sock的映射可以让容器使用宿主机的docker命令,用来协助构建操作。

运行后,在浏览器中通过ip:8081即可访问Jenkins工作台,首次进入工作台需要输入管理员的初始密码,

Jenkins搭建与数据迁移实践

 

初始密码我们可以在宿主机的/home/jenkins_home/secrets/initialAdminPassword文件中获得。

输入密码后,如果顺利的话,会进入插件安装页面,我们选择安装推荐的插件等待安装完成即可。

Jenkins搭建与数据迁移实践

 但是你有可能遇到下面的情况:

Jenkins搭建与数据迁移实践

如何解决呢?

首先确认一下你的服务器本身是肯定有网的,而且服务器的防火墙是开启的状态。

防火墙是否开启可以用以下命令观察:

firewall-cmd --state

如果以上条件成立,我们可以执行一下下边的命令

#开启 NAT 转发
firewall-cmd --permanent --zone=public --add-masquerade
#检查是否允许 NAT 转发
firewall-cmd --query-masquerade
firewall-cmd --reload

之后再重新启动你的Jenkins容器,再次观察是否已经解决了问题。

如果还没有解决问题,就需要你自己来寻找原因了。

那为什么执行这样的命令后,就可以让容器可以连接网络了呢?这就要说到docker的网络模式了。

我们运行jenkins容器时没有指定容器的网络,所以容器会以默认的bridge模式启动,bridge模式我们可以把它类比成Vmvare虚拟的nat网络模式,到这里你应该就明白了,firewall防火墙在开启的时候,如果不开启nat转发,容器内部当然就无法借助nat的手段连接网络了。

当然,如果你的服务器不需要防火墙,完全可以关闭防火墙来解决问题,不过关闭防火墙之后,需要重新启动docker服务后,docker才可以正常运行,命令如下:

systemctl stop firewalld.service #停止firewall
systemctl restart docker #重启docker

或者还有一种解决方式,就是在docker run命令的后边加上--net=host参数,来指定docker的网络模式为host模式,使用host网络模式后,不再需要端口映射,且无法实现端口映射,所以容器出现端口冲突的情况。

至此,我们的Jenkins就搭建完成了。

迁移原Jenkins数据到新搭建的Jenkins中

现在我们假设你原理就已经拥有了一个Jenkins,并且已经运行了很久,想要把运行的数据备份和恢复到我们新部署的Jenkins中,如何操作呢?

Jenkins本身其实是提供了备份插件的,我们在Jenkins中安装ThinBackup插件即可实现。

安装成功后,可以在系统管理中找到插件的入口:

Jenkins搭建与数据迁移实践

进入后页面如下:

Jenkins搭建与数据迁移实践

 

首先进入settings修改配置中的备份目录为/var/jenkins_home/bak

Jenkins搭建与数据迁移实践

我们可以在宿主机的/home/jenkins_home目录下创建bak目录,用来存放备份文件。

其他配置建议如下,可自行调整:

Jenkins搭建与数据迁移实践

配置保存后,回到插件页面,点击backup now,即可在宿主机的/home/jenkins_home/bak目录中发现备份文件,

我们将此备份文件拷贝到另一个jenkins的备份目录下,即可通过点击restore进行恢复的操作。

恢复完成后,需要重新启动jenkins容器。

在Jenkins容器内部配置Maven的私服配置

如果我们的项目中使用了maven私服,需要修改maven的setting.xml文件。

maven的安装方式有以下两种:

1.使用yum install maven一键安装

2.去官网下载maven手动安装,具体过程本文不介绍

无论选择了哪种安装方式,我们都可以通过mvn -v命令查找到maven的安装目录,在其中可以找到setting.xml文件,在其中配置私服即可。

在Jenkins容器内部配置Nodejs

nodejs的安装其实在容器内部和外部是没有区别的

到官网https://nodejs.org/en/download/releases/下载指定的版本即可,这里由于项目原因,我们选择了Node.js 14.21.2版本

下载node-v14.21.2-linux-x64.tar.gz,复制到宿主机的/home/jenkins_home/node/中。

进入容器内部,解压后,执行如下命令,创建软连接

ln -s /var/jenkins_home/node/node-v14.21.2-linux-x64/bin/node /usr/bin
ln -s /var/jenkins_home/node/node-v14.21.2-linux-x64/bin/npm /usr/bin
ln -s /var/jenkins_home/node/node-v14.21.2-linux-x64/bin/npx /usr/bin
ln -s /var/jenkins_home/node/node-v14.21.2-linux-x64/bin/corepack /usr/bin

即可完成node的安装,

如果需要使用yarn命令和pnpm命令,可以执行corepack enable命令来开启。

至此,nodejs安装完成。