Jenkins
Jenkins,原名 Hudson,2011 年改为现在的名字。它是一个开源的实现持续集成的软件工具。
官方网站:https://www.jenkins.io/
中文文档:https://www.jenkins.io/zh/
为什么需要Jenkins?
我们以前写完代码,如果要将项目部署到服务器中,那么我们需要经过一系列的更改、打包、上传等繁杂的操作。这些操作很浪费我们的时间,并且基本没什么技术含量。那么jenkins应运而生。jenkins只需要我们将写好的项目上传到我们的代码管理仓库中,例如gitlab,然后jenkins会自动进行拉取,打包,上传一系列操作,这样就让我们的工作量大大减少,我们只需要专注于业务的操作即可
什么是CI/CD?
CI、CD 其实是三个概念,包含了一个 CI 和两个 CD,CI全称 Continuous Integration,表示持续集成,CD包含 Continuous Delivery和 Continuous Deployment,分别是持续交付和持续部署。这三个概念之间是有前后依赖关系的。
CI/CD 并不是一个工具,它是一种软件开发实践,核心是通过引入自动化的手段来提高软件交付效率。CI/CD 最终目的:让工程师更快 & 更高质量 & 更简单的交付软件!
具体大家可以看这篇文章:什么是 CI/CD ?
安装Jenkins
环境需要:Linux虚拟机硬盘20G,内存4G以上
部署脚本
#!/bin/bash
# 定义变量
CONTAINER_NAME="jenkins"
IMAGE_NAME="m.daocloud.io/docker.io/jenkins/jenkins:lts-jdk17"
HTTP_PORT=8080
AGENT_PORT=50000
JENKINS_ADMIN_USER="admin"
JENKINS_ADMIN_PASSWORD="123456"
# 数据和配置的映射路径
HOST_DATA_DIR="/work/docker/jenkins/data" # 宿主机的数据目录
HOST_CONFIG_DIR="/work/docker/jenkins/config" # 宿主机的配置目录
# 创建宿主机目录(如果不存在)
echo "检查并创建宿主机目录..."
mkdir -p "$HOST_DATA_DIR"
mkdir -p "$HOST_CONFIG_DIR"
# 设置目录权限(Jenkins在容器内使用1000用户运行)
chown -R 1000:1000 "$HOST_DATA_DIR"
chown -R 1000:1000 "$HOST_CONFIG_DIR"
# 检查容器是否已经存在
if docker ps -a | grep -q "$CONTAINER_NAME"; then
echo "容器 $CONTAINER_NAME 已存在,尝试删除旧容器..."
docker rm -f "$CONTAINER_NAME"
fi
# 启动 Jenkins 容器
echo "正在启动 Jenkins 容器..."
docker run -d \
--name "$CONTAINER_NAME" \
--restart=always \
--user 1000 \
-p $HTTP_PORT:8080 \
-p $AGENT_PORT:50000 \
-v "$HOST_DATA_DIR:/var/jenkins_home" \
-v "$HOST_CONFIG_DIR:/var/jenkins_config" \
-v /var/run/docker.sock:/var/run/docker.sock \
"$IMAGE_NAME"
# 检查容器是否启动成功
if docker ps | grep -q "$CONTAINER_NAME"; then
echo "=============================================="
echo "Jenkins 容器已成功启动!"
echo "Web 访问地址: http://服务器IP:$HTTP_PORT"
echo "初始管理员用户名: $JENKINS_ADMIN_USER"
echo "初始管理员密码: 请查看以下初始密码或使用您设置的密码"
echo "数据目录: $HOST_DATA_DIR"
echo "配置目录: $HOST_CONFIG_DIR"
echo "=============================================="
echo "首次启动可能需要一些时间初始化,请稍后访问..."
echo "获取初始管理员密码命令: docker exec $CONTAINER_NAME cat /var/jenkins_home/secrets/initialAdminPassword"
else
echo "Jenkins 容器启动失败,请检查日志。"
docker logs $CONTAINER_NAME
fi
命令解析
-d :后台运行容器
-p:端口映射, 左边是本地端口,右边是docker容器端口 ,8080是Jenkins Web 界面的工作端口,50000是JNLP(Java Network Launch Protocol)工作端口。这个端口用于 Jenkins 节点和主控节点之间的通信。
-v :目录挂载,将主机上的 /usr/docker/jenkins_data 目录挂载到容器内的 /var/jenkins_home 目录,用于持久化 Jenkins 的数据。/etc/localtime:/etc/localtime:将本地主机上的时区信息文件挂载到容器内的 /etc/localtime 文件中,确保容器内的时间与主机上的时间一致
-v /usr/bin/docker:/usr/bin/docker: 将主机上的 /usr/bin/docker 文件挂载到容器中的 /usr/bin/docker,这样容器内的 Jenkins 可以直接使用宿主机上的 Docker 命令。在使用 GitLab/Jenkins 等 CI 软件的时候需要使用 Docker 命令来构建镜像,需要在容器中使用 Docker 命令;通过将宿主机的 Docker 共享给容器
-v /var/run/docker.sock:/var/run/docker.sock: 将主机上的 Docker socket 文件挂载到容器中的相同位置,这样容器内的 Jenkins 可以与宿主机上的 Docker 引擎进行通信。
–restart=on-failure:设置容器的重启策略为在容器以非零状态退出(异常退出)时重启。
-u 0:将容器内进程的用户身份设置为 root 用户,等同于-u root。
–name myjenkins:给容器指定一个名称为 myjenkins。
验证Jenkins容器是否启动成功
docker ps
获取管理员密码
查看日志
docker logs myjenkins
开始使用
在浏览器中输入192.168.48.133:8082
这里的ip
地址是和自己的虚拟机ip
地址一样的,端口号是刚才创建容器时指定的端口号
然后稍等一会,就会出现以下样式,然后输入进去我们的密码
然后出现新手入门,选择推荐插件
等一会基本就下载完毕了,随后让我们创建一个账户,正常创建即可,然后就下一步最后我们的jenkins
页面就出来了
使用Jenkins
因为我们要构建的是一个Maven
项目,jenkins
默认插件没有maven
,所以我们需要去下载
在这里搜索安装maven,选择第一个安装即可,这里因为我安装过了,所以无法再次安装
随后回到首页,点击新建item
输入一个名称,选择maven项目,点击确定即可
Git配置
Maven配置

Build配置
这里的Root POM
中填写自己在代码仓库中项目中pom.xml
文件在哪里,就填写哪里,我的就在java-project
下,就直接pom.xml
就可以了
注意
这里Git、Build
配置都在创建的项目item
中的配置中
Maven、JDK
配置在系统管理中的全局工具配置中
结果
都准备好,我们点击构建
可以在控制台看到输出效果
这里可以看到是在/var/jenkins_home/workspace/first/target/
下生成了一个jar
包,但是这里这个目录是jenkins
容器中的,实际上映射到了/usr/docker/jenkins_data/workspace/first/target
进入到jenkins容器中就可以看到日志上打印出来的结果