阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Jenkins与Docker的自动化CI/CD实战

465次阅读
没有评论

共计 5126 个字符,预计需要花费 13 分钟才能阅读完成。

在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署、交付(CD)。本文基于 Jenkins+Docker+Git 实现一套 CI 自动化发布流程。

一、发布流程设计

Jenkins 与 Docker 的自动化 CI/CD 实战

Jenkins 与 Docker 的自动化 CI/CD 实战
工作流程:

  1. 开发人员提交代码到 Git 版本仓库;
  2. Jenkins 人工 / 定时触发项目构建;
  3. Jenkins 拉取代码、代码编码、打包镜像、推送到镜像仓库;
  4. Jenkins 在 Docker 主机创建容器并发布。

环境规划如下:

角色 IP
Jenkins/Docker 192.168.0.217
Docker 192.168.0.218
Git/Registry 192.168.0.219

操作系统:CentOS7.4

二、部署 Git 仓库

# yum install git -y
  1. 创建 Git 用户并设置密码
    # useradd git
    # passwd git
  2. 创建仓库
    # su - git
    # mkdir solo.git
    # cd solo.git
    # git --bare init
  3. 访问创建的这个仓库
    # git clone git@192.168.0.212:/home/git/solo.git

    三、准备 Jenkins 环境

    Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于代码编译、部署、测试等工作。Jenkins 也是一个跨平台的,大多数主流的平台都支持,而且安装很简单,我们这里以部署 war 包方式安装它。
    官网下载地址:https://jenkins.io/download/
    如图点击下载最后一个 Generic Java package(war):
    Jenkins 与 Docker 的自动化 CI/CD 实战
    在安装前需要具备 Java 环境,安装方式如下:

    # tar zxf jdk-8u45-linux-x64.tar.gz 
    # mv jdk-8u45-linux-x64 /usr/local/jdk1.8 
    # vi /etc/profile 
    JAVA_HOME=/usr/local/jdk1.8 
    PATH=$PATH:$JAVA_HOME/bin
    CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
    export JAVA_HOME PATH CLASSPATH
    # source /etc/profile

在 192.168.0.217 主机安装 Jenkins,下载 Tomcat 二进制包将 war 包到 webapps 下即可:**

# wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war 
# wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz 
# tar zxf apache-tomcat-8.5.32.tar.gz 
# mv apache-tomcat-8.5.32 /usr/local/tomcat-jenkins 
# rm /usr/local/tomcat-jenkins/webapps/* -rf 
# unzip jenkins.war -d /usr/local/tomcat-jenkins/webapps/ROOT 
# cd /usr/local/tomcat-jenkins/bin/ 
# ./startup.sh 
# tail ../logs/catalina.out -f 
... 
Jenkins initial setup is required. An admin user has been created and a password generated. 
Please use the following password to proceed to installation: 

a5f1f7c167fd4b8ab62f9497d32d97db 

This may also be found at: /root/.jenkins/secrets/initialAdminPassword ...

部署成功,访问 Jenkins:http://ip:8080

第一步:输入上面日志输出的密码:a5f1f7c167fd4b8ab62f9497d32d97db,或者从本机 /root/.jenkins/secrets/initialAdminPassword 文件获取,点击继续
第二步:点击“选择插件来安装”
第三步:保持默认,点击继续
第四步:创建管理员用户,保存并完成
第五步:设置 Jenkins 访问地址,保持默认,点击保存完成

安装完成,开始使用 Jenkins:
Jenkins 与 Docker 的自动化 CI/CD 实战

四、部署私有镜像仓库

Docker Hub 作为 Docker 默认官方公共镜像;如果想自己搭建私有镜像仓库,官方也提供 registry 镜像,使得搭建私有仓库非常简单。
在 192.168.0.219 部署:

# docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry

接下来测试 registry 可用性。
由于 Docker CLI 默认以 HTTPS 访问,而部署的 registry 并未提供 HTTPS,因此,需要在 pull 镜像的 Docker 主机(192.168.0.217,192.168.0.218)添加 HTTP 可信任:

 # vi /etc/docker/daemon.json 
{"insecure-registries":["192.168.0.219:5000"]}
# service docker restart

五、安装 Docker

在 192.168.0.217/192.168.0.218/192.168.0.219 主机安装 Docker,如下:

  1. 安装依赖包
    # yum install -y yum-utils device-mapper-persistent-data lvm2
  2. 添加 Docker 软件包源:
    # yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
  3. 安装 Docker CE
    # yum install docker-ce -y
  4. 配置加速器
    # curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://bc437cce.m.daocloud.io
  5. 启动并开机启动
    # systemctl start docker
    # systemctl enable docker

    六、构建 Tomcat 基础镜像

    JAVA 程序必须有 JDK 环境才可以运行,为了减少镜像大小及提高性能,这里直接把 JDK 放到宿主机上,容器以挂载形式使用。
    在 192.168.0.217/192.168.0.218 安装 JDK:

# tar zxvf jdk-8u45-linux-x64.tar.gz 
# mv jdk-8u45-linux-x64 /usr/local/jdk1.8

Tomcat 基础镜像 Dockerfile:

# cat Dockerfile
FROM centos:7
MAINTAINER www.aliangedu.com

ENV VERSION=8.5.32
ENV JAVA_HOME /usr/local/jdk

RUN yum install wget -y

RUN wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz && \
    tar zxf apache-tomcat-${VERSION}.tar.gz && \
    mv apache-tomcat-${VERSION} /usr/local/tomcat && \
    rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && \
    mkdir /usr/local/tomcat/webapps/ROOT

EXPOSE 8080
CMD ["catalina.sh", "run"]

构建镜像并上传到 registry:

# docker build -t 192.168.0.219:5000/tomcat-85 -f Dockerfile .
# docker push 192.168.0.219:5000/tomcat-85

七、Jenkins 配置全局工具配置

主页面 -> 系统管理 -> 全局工具配置

指定 JDK、Maven 路径,Git 保持默认:
Jenkins 与 Docker 的自动化 CI/CD 实战
如果 Jenkins 主机没有 git 命令,需要安装 Git:
# yum install git -y

八、Jenkins 安装必要插件

1. Jenkins 安装必要插件
主页面 -> 系统管理 -> 管理插件:
Jenkins 与 Docker 的自动化 CI/CD 实战
安装 SSH 与 Git Parameter 插件。

插件说明:

  • SSH:用于 SSH 远程 Docker 主机执行 Shell 命令
  • Git Parameter:动态获取 Git 仓库 Branch、Tag

2. 配置 SSH 插件
第一步:先创建一个用于连接 Docker 主机的凭据。
主页面 -> 凭据 -> 系统 -> 右击全局凭据 -> 添加凭据:
Jenkins 与 Docker 的自动化 CI/CD 实战
输入连接 Docker 主机的用户名和密码:
Jenkins 与 Docker 的自动化 CI/CD 实战
第二步:添加 SSH 远程主机
主页面 -> 系统管理 -> 系统设置 -> SSH remote hosts:
Jenkins 与 Docker 的自动化 CI/CD 实战

九、上传 JAVA 项目代码到 Git 仓库

从 Github 拉取开源 JAVA 博客系统 solo:

# git clone https://github.com/b3log/solo
# cd solo
移除旧的推送地址,添加新的:# git remote remove origin 
# git remote add origin git@192.168.0.219:/home/git/solo.git
提交代码到 Git 仓库并创建 tag:# touch src/main/webapp/a.html
# git add .
# git commit -m“a”创建标签:# git tag 1.0.0
推送到 Git 服务器:# git push origin 1.0.0 

十、Jenkins 创建项目并发布测试

主页面 -> 新建任务 -> 输入任务名称,构建一个 Maven 项目:
Jenkins 与 Docker 的自动化 CI/CD 实战
注意:如果没有显示“构建一个 Maven 项目”选项,需要在管理插件里安装“Maven Integration plugin”插件。
配置 Git 参数化构建:
Jenkins 与 Docker 的自动化 CI/CD 实战
动态获取 Git 仓库 tag,与用户交互选择 Tag 发布:
Jenkins 与 Docker 的自动化 CI/CD 实战
指定项目 Git 仓库地址:
Jenkins 与 Docker 的自动化 CI/CD 实战
修改 */master 为 $Tag,Tag 是上面动态获取的变量名,表示根据用户选择打代码版本。

设置 maven 构建命令选项:
Jenkins 与 Docker 的自动化 CI/CD 实战

利用 pom.xml 文件构建项目。
在 Jenkins 本机镜像构建与推送到镜像仓库,并 SSH 远程连接到 Docker 主机使用推送的镜像创建容器:
Jenkins 与 Docker 的自动化 CI/CD 实战
上图中,在 Jenkins 主机执行的 Shell 命令如下:

REPOSITORY=192.168.0.219:5000/solo:${Tag}
# 构建镜像
cat > Dockerfile << EOF
FROM 192.168.0.219:5000/tomcat-85:latest
RUN rm -rf /usr/local/tomcat/webapps/ROOT
COPY target/*.war /usr/local/tomcat/webapps/ROOT.war
CMD ["catalina.sh", "run"]
EOF
docker build -t $REPOSITORY .
# 上传镜像
docker push $REPOSITORY

上图中,SSH 远程 Docker 主机执行的 Shell 命令如下:

REPOSITORY=192.168.0.219:5000/solo:${Tag}
# 部署
docker rm -f blog-solo |true
docker image rm $REPOSITORY |true
docker container run -d --name blog-solo -v /usr/local/jdk1.8:/usr/local/jdk -p 88:8080 $REPOSITORY

注:容器名称 blog-solo,暴露宿主机端口 88,即使用宿主机 IP:88 访问 blog-solo 项目。
blog-solo 项目已配置完成,开始构建:

选择 tag,开始构建:

Jenkins 与 Docker 的自动化 CI/CD 实战
Jenkins 与 Docker 的自动化 CI/CD 实战
点击左下角构建历史里,右击第一个查看控制台输出:
Jenkins 与 Docker 的自动化 CI/CD 实战
Jenkins 与 Docker 的自动化 CI/CD 实战

浏览器访问 solo 项目:http://192.168.0.218:88
Jenkins 与 Docker 的自动化 CI/CD 实战
如果输出上述页面说明是正常的,页面没有加载成功样式,需要修改下项目里访问地址。

至此,自动化 CI 环境搭建完成,你可以模拟提交代码并打 tag 测试自动化发布流程。

若你在容器运维中,遇到容器方面的问题,可以给我微信↓。同样,若发现有任何纰漏,还请随时指正,相互学习,共同进步!

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计5126字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7997444
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
在Windows系统中通过VMware安装苹果macOS15

在Windows系统中通过VMware安装苹果macOS15

在 Windows 系统中通过 VMware 安装苹果 macOS15 许多开发者和爱好者希望在 Window...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...