Linux 从0到1部署Jenkins + Docker 实现CICD自动化实战详解

目录

一、前言

[二、Jenkins 介绍](#二、Jenkins 介绍)

[2.1 Jenkins 是什么](#2.1 Jenkins 是什么)

[2.2 什么是 Jenkins 的 CI/CD](#2.2 什么是 Jenkins 的 CI/CD)

[2.3 一条典型的流水线长什么样](#2.3 一条典型的流水线长什么样)

[2.4 Jenkins 突出优势](#2.4 Jenkins 突出优势)

[三、Linux 系统部署Docker](#三、Linux 系统部署Docker)

[3.1 卸载旧版本(如有)](#3.1 卸载旧版本(如有))

[3.2 安装必要的依赖](#3.2 安装必要的依赖)

[3.3 添加 Docker 仓库(使用国内镜像源)](#3.3 添加 Docker 仓库(使用国内镜像源))

[3.4 安装docker](#3.4 安装docker)

[3.5 配置镜像加速](#3.5 配置镜像加速)

[3.6 设置 Docker 开机自启(非必须)](#3.6 设置 Docker 开机自启(非必须))

[3.7 基于docker 安装mysql](#3.7 基于docker 安装mysql)

[3.7.1 创建本地目录](#3.7.1 创建本地目录)

[3.7.2 创建mysql配置文件](#3.7.2 创建mysql配置文件)

[3.7.3 启动mysql容器](#3.7.3 启动mysql容器)

[四、Docker搭建 Jenkins与配置Jenkins](#四、Docker搭建 Jenkins与配置Jenkins)

[4.1 Docker 搭建Jenkins](#4.1 Docker 搭建Jenkins)

[4.2 初始化Jenkins与配置](#4.2 初始化Jenkins与配置)

[4.2.1 获取密码并登录](#4.2.1 获取密码并登录)

[4.2.2 Jenkins 基本插件安装](#4.2.2 Jenkins 基本插件安装)

[4.2.3 创建管理员密码](#4.2.3 创建管理员密码)

[4.2.4 安装Maven 插件](#4.2.4 安装Maven 插件)

[4.3 Jenkins 基本环境配置](#4.3 Jenkins 基本环境配置)

[4.3.1 Git 配置](#4.3.1 Git 配置)

[4.3.2 目标服务器配置](#4.3.2 目标服务器配置)

[五、配置Jenkins 任务](#五、配置Jenkins 任务)

[5.1 添加配置任务](#5.1 添加配置任务)

[5.2 配置获取Git代码](#5.2 配置获取Git代码)

[5.3 配置打jar包的JDK环境](#5.3 配置打jar包的JDK环境)

[5.4 指定maven打包信息](#5.4 指定maven打包信息)

[5.5 包传输与服务启动配置](#5.5 包传输与服务启动配置)

六、写在文末


一、前言

在日常项目开发中,涉及到各种中间件的安装配置和运维,尤其是当docker 技术的成熟后,在现代化的项目开发模式中,可以说docker技术已经成了互联网公司的标配,基于docker 不仅可以快速构建出各种复杂的环境,还可以快速搭建自动化流水线的工作,本篇将详细介绍如何在Linux 环境下部署Docker环境,并基于Docker 环境搭建Jenkins流水线。

二、Jenkins 介绍

2.1 Jenkins 是什么

Jenkins 就像一个不知疲倦的"自动化管家",它能把你从代码提交到上线部署过程中那些重复、繁琐的手动操作,全部用自动化流水线串联起来,让"提交代码"到"服务上线"变得顺滑高效,你可以把它理解成一个高度可定制的"软件生产工厂"。

2.2 什么是 Jenkins 的 CI/CD

Jenkins 实现 CI/CD 的核心,就是定义并执行一套流水线(Pipeline),这套流水线涵盖了两大环节:

  • 持续集成(CI):开发人员频繁地将代码合并到主干。每次合并,Jenkins 都会自动拉取代码、编译构建、并运行各类自动化测试(如单元测试、集成测试)。它的目标是 "快速反馈" ,尽早发现集成错误,防止问题累积。

  • 持续交付/部署(CD):在 CI 验证通过后,Jenkins 会自动将构建产物(如一个 .jar 包或一个 Docker 镜像)部署到测试、预发布甚至生产环境。如果做到完全自动化部署到生产,就是持续部署;如果部署到生产前还需要一次手动"点一下确认",则称为持续交付。

2.3 一条典型的流水线长什么样

一条完整的 CI/CD 流水线通常包含以下几个标准阶段:

  1. 代码检出:一旦开发者将代码推送到 Git 仓库(通过 Webhook 自动触发),Jenkins 立即将最新的代码拉取到构建环境中。

  2. 编译与测试:在指定的环境(如 Maven、Node.js)中执行编译和打包,并运行单元测试,生成测试报告。

  3. 构建与推送镜像:将打包好的应用构建成 Docker 镜像,并推送到镜像仓库(如 Harbor 或 Docker Hub),方便后续部署时拉取。

  4. 部署上线:Jenkins 通过 SSH 连接到目标服务器,拉取新镜像并重启容器;或者调用 Kubernetes API,自动更新集群中的应用。

2.4 Jenkins 突出优势

Jenkins 具有下面的突出优势:

  • 开源与跨平台:基于 Java 开发,可以在 Windows、Linux、macOS 等主流系统上运行。

  • 强大的插件生态:拥有超过 2000 种插件,几乎能与市面上所有开发、测试、部署工具集成。

  • 分布式构建:采用主从(Master-Agent)架构,可以将构建任务分发到多个节点上并行执行,显著提升构建效率。

可以说,任何需要将重复、易错的手动操作进行自动化的场景,都是Jenkins的用武之地。无论是小型团队的快速迭代,还是大型互联网公司复杂的微服务系统,Jenkins都能通过其强大的插件生态和灵活的流水线能力,成为支撑业务高效运转的可靠基石

三、Linux 系统部署Docker

在实际工作中,可能是一台全新的虚拟机,或者是一个干净的云服务器环境,需要你自己手动安装和部署docker,本次使用 YUM 官方仓库安装,这种方式最简单,也方便与系统适配。

在正式开始部署操作之前,需要提前准备好相应的环境,如下:

  • linux 系统的云服务器,或者虚拟机,基本配置,4核8G(推荐)

  • 确保服务器网络畅通

下面看具体的操作过程。

3.1 卸载旧版本(如有)

执行下面的命令对当前系统中旧的docker版本进行卸载

bash 复制代码
sudo yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

看到下面的效果,说明执行成功

3.2 安装必要的依赖

在手动安装docker 的时候,会检查一些前置依赖项是否存在,否则会安装失败,执行下面的命令将必要的依赖安装一下

bash 复制代码
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

3.3 添加 Docker 仓库(使用国内镜像源)

如果不添加的话,拉取镜像的时候从官方拉取会非常慢,经常会超时而失败,建议配置一下

bash 复制代码
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.4 安装docker

上面的准备工作做完后,执行下面的命令开始安装docker

bash 复制代码
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3.5 配置镜像加速

配置之后,后续拉取镜像的时候可以提升下载镜像的速度,在linux 操作窗口依次执行下面2条命令

bash 复制代码
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://hub-mirror.c.163.com",
    "https://mirror.ccs.tencentyun.com"
  ]
}
EOF

重启 Docker 使配置生效:

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl restart docker

3.6 设置 Docker 开机自启(非必须)

设置之后,可以避免某些服务器宕机后重启而docker服务忘了重启的问题

bash 复制代码
sudo systemctl enable docker
sudo systemctl start docker

3.7 基于docker 安装mysql

Docker 安装成功后,为了验证是否可以正常使用,下面以平时使用较多的mysql服务为例,演示下使用docker安装mysql的过程。

3.7.1 创建本地目录

下面的目录也是mysql容器数据卷的本地映射目录

bash 复制代码
# 数据目录(必建)
sudo mkdir -p /data/docker/mysql/data

# 配置文件目录(可选)
sudo mkdir -p /data/docker/mysql/conf

# 日志目录(可选)
sudo mkdir -p /data/docker/mysql/logs

# 设置权限(MySQL 容器内用户通常是 uid 999)
sudo chown -R 999:999 /data/docker/mysql

3.7.2 创建mysql配置文件

在上面的/data/docker/mysql/conf目录下创建一个 my.cnf 的文件,将下面的配置信息粘贴进去

  • 更多更完善的配置信息可以参与相关的资料,根据自己的需要添加
bash 复制代码
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default-time-zone=+08:00
max_connections=500

3.7.3 启动mysql容器

使用下面的命令启动mysql 8 的容器,第一次会去拉取mysql8的镜像

bash 复制代码
docker run -d \
--name mysql_82 \
-p 13306:3306 \
-v /data/docker/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /data/docker/mysql/data:/var/lib/mysql \
-v /data/docker/mysql/logs:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=设置你的root密码 \
-e TZ=Asia/Shanghai \
mysql:8.0

使用 docker ps命令查看下是否启动成功

四、Docker搭建 Jenkins与配置Jenkins

Jenkins 在很多项目团队中可以说是非常重要的存在,是一个项目标准化交付的重要工具,也是实现项目可持续交付的重要连接,基于上面安装成功的Docker 环境,接下来介绍如何基于Docker完成Jenkins服务的部署。

4.1 Docker 搭建Jenkins

执行下面的docker命令,开启一个jenkins服务

  • 网上很多资料里面,使用那个通用的jenkins镜像在安装之后,在后续安装插件的时候会拉取失败,这个需要做好甄别
bash 复制代码
docker run -d \
  --name jenkins \
  -p 19097:8080 \
  -p 50000:50000 \
  -v /usr/local/soft/jenkins:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  --user root \
  -e TZ=Asia/Shanghai \
  -e JAVA_OPTS="-Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai" \
  m.daocloud.io/docker.io/jenkins/jenkins:latest 

最后看到下面的效果,说明安装完成

4.2 初始化Jenkins与配置

4.2.1 获取密码并登录

容器启动后,访问 http://<你的服务器IP>:19097,会看到一个解锁页面,需要输入初始管理员密码

获取密码有两种方式:

1)从容器日志里找(推荐):

日志里会有一串密码,复制出来就行

bash 复制代码
docker logs jenkins 2>&1 | grep "administrator password"

2)直接去文件里看:

bash 复制代码
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

将上面的密码拷贝进去,点击继续

4.2.2 Jenkins 基本插件安装

后续配置jenkins任务的时候,需要依赖某些必要的插件,需要提前安装一下,紧接着上一步,点击继续来到下面的页面

两个任何一个都可以选择,这里我选择第二个,进入之后,可以勾选必要的插件进行安装,也可以在搜索框搜索必要的插件

等待下面的安装进度走完即可

4.2.3 创建管理员密码

管理员账号我为了以后登录之后给团队其他人员创建账号和管理账号使用,在这里输入你的管理员账号和密码:

4.2.4 安装Maven 插件

以Java项目为例,构建任务的时候需要对springboot 项目进行打包,需要提前安装一下maven插件,在设置那里从全局工具配置进入

4.3 Jenkins 基本环境配置

在正式开始配置jenkins任务之前,需要做一些认证配置,比如git拉取代码的配置,服务器秘钥等配置,下面分别说明。

4.3.1 Git 配置

在日常开发中,很多项目都是托管在Git上面,后续构建的时候需要从Git上拉取代码,从右上角的设置按钮,点击之后,进入里面的凭据管理

点击添加凭据

选择第一个即可

如果有服务器的话,比如需要配置跨服务器文件传输,一般可以通过下面的ssh方式配置

4.3.2 目标服务器配置

后续会涉及到jenkins任务所在机器与目标部署服务的机器文件传输,一般需要配置ssh,这个安全性比较高,当然也可以通过账号密码方式

从下面的系统配置进去

找到下面的位置后,填写必要的目标机器信息

五、配置Jenkins 任务

上面的所有准备工作都是为了后面在Jenkins 上配置流水线任务做准备的,接下来以一个springboot项目为例进行说明,演示下如何在Jenkins 上配置一个流水线任务。

5.1 添加配置任务

登录进入Jenkins 主页,然后点击添加item

在弹出框输入任务名称,选择自由风格的即可

点击确定后,从上到下,依次在各个模块配置下面的信息,看后面的配置流程。

5.2 配置获取Git代码

第一步就是先从Git仓库获取源码,拉到了源码才能进行后面的流程,参考下面截图中的信息在这个Git 这个输入框中填写完整

5.3 配置打jar包的JDK环境

这一步设置后续基于拉取下来的springboot 项目代码指定JDK的打包环境、版本,一般与你的项目中使用的JAVA版本保持一致即可

5.4 指定maven打包信息

执行maven 打包命令,这里选择的maven版本即为前面配置的工具里的maven工具,注意在前面选择maven工具版本的时候要与项目中的maven打包插件版本不要相差太大了

5.5 包传输与服务启动配置

这个是最后一步,将jenkins上打好的包,传输到远程目标部署的机器上的指定目录下

补充说明:

  • 在真实的项目构建配置中,中间可能还涉及到很多复杂的配置步骤,比如拉取完成代码后,还需要对代码进行安全扫描

  • 有的还需要在构建完成后给指定人员指定邮箱发送邮件等

六、写在文末

本文通过实际操作演示了如何基于一个全新的linux 环境部署docker 到完成jenkins任务搭建、部署、配置和任务配置的完整过程,有兴趣的同学还可以继续深入研究,本篇到此结束,感谢观看。

相关推荐
m0_632482508 个月前
Jenkins + Pytest +allure接口自动化测试配置与操作
jenkins·集成测试·pytest·jenkins配置