您当前的位置:首页 > 电脑百科 > 程序开发 > 容器

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

时间:2021-03-19 13:43:41  来源:  作者:

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

1、发布流程设计

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

 


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

 

工作流程:

1.开发人员提交代码到Git版本仓库;

2.Jenkins人工/定时触发项目构建;

3.Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;

4.Jenkins在Docker主机创建容器并发布。

环境规划如下:

角色IP

Jenkins/Docker 192.168.0.13

Docker 192.168.0.14

Git/Registry 192.168.0.15

操作系统:centos7.5

systemctl stop firewalld

setenforce 0

yum install -y ntpdate

ntpdate time.windows.com

2、部暑git仓库

1、创建Git用户并设置密码

# yum install -y git

2、创建Git用户并设置密码

# useradd git

# passwd git

3、创建仓库

# su - git

# mkdir solo.git

# cd solo.git

# git --bare init

4、访问这个仓库

# git clone git@192.168.0.15:/home/git/solo.git

3、准备jenkins环境

Jenkins是一个开源软件项目,是基于JAVA开发的一种持续集成工具,用于代码编译、部署、测试等工作。 Jenkins也是一个跨平台的,大多数主流的平台都支持,而且安装很简单,我们这里以部署war包方式安装它。

官网下载地址:
https://jenkins.io/download/

如图点击下载最后一个Generic Java package(war):

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

 

在安装前需要具备Java环境,安装方式如下:

# tar -xzf jdk-8u45-linux-x64.tar.gz

# mv jdk1.8.0_45/ /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

# java -version

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

# wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war

# tar -xzf Apache-tomcat-8.5.31.tar.gz

# mv apache-tomcat-8.5.31 /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:

063de6a478ac44fb8d807a8a46313e38

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

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

第一步:输入上面日志输出的密码:
063de6a478ac44fb8d807a8a46313e38

,或者从本机
/root/.jenkins/secrets/initialAdminPassword文件获取,点击继续

第二步:点击“选择插件来安装”

第三步:保持默认,点击继续

第四步:创建管理员用户,保存并完成

第五步:设置Jenkins访问地址,保持默认,点击保存完成

安装完成,开始使用Jenkins:

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

 

4、安装docker


192.168.0.13/192.168.0.14/192.168.0.15主机安装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

5、部署私有镜像仓库

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

在192.168.0.15部署:

# 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.13,192.168.0.14)添加HTTP可信任:

# vi /etc/docker/daemon.json

{

"registry-mirrors": ["http://bc437cce.m.daocloud.io"],

"insecure-registries": ["192.168.0.15:5000"]

}

 

# systemctl restart docker

6、构建Tomcat基础镜像

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

在192.168.0.13/192.168.0.14安装JDK:

# tar -xzf jdk-8u45-linux-x64.tar.gz

# mv jdk1.8.0_45/ /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

# java -version

Tomcat基础镜像Dockerfile:

# cat Dockerfile

FROM centos:7

MAINTAINER andy

ENV VERSION=8.5.31

ENV JAVA_HOME /usr/local/jdk1.8

COPY apache-tomcat-8.5.31.tar.gz /opt

#RUN yum install wget -y

#RUN wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz &&

RUN cd /opt &&

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"]

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

# docker push 192.168.0.15:5000/tomcat-85

7、Jenkins配置全局工具配置

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

指定JDK、Maven路径,Git保持默认:

安装git:

# yum install git -y

安装maven:

下载地址:
http://maven.apache.org/download.cgi

# tar -xzf apache-maven-3.5.4-bin.tar.gz -C /usr/local/

# cd /usr/local/

# mv apache-maven-3.5.4/ maven

配置环境变量:

# cat /etc/profile

export MAVEN_HOME=/usr/local/maven

export PATH=$MAVEN_HOME/bin:$PATH

# source /etc/profile

# mvn -v

 

8、Jenkins安装必要插件

1. Jenkins安装必要插件

主页面 -> 系统管理 ->管理插件:

 

安装SSH与Git Parameter插件。

插件说明:

•SSH:用于SSH远程Docker主机执行Shell命令

•Git Parameter:动态获取Git仓库Branch、Tag

2. 配置SSH插件

第一步:先创建一个用于连接Docker主机的凭据。

主页面 -> 凭据 -> 系统 -> 右击全局凭据 -> 添加凭据:

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

 

输入连接Docker主机的用户名和密码:

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

 


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

 

第二步:添加SSH远程主机

主页面 -> 系统管理 -> 系统设置 -> SSH remote hosts:

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

 

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

从GitHub拉取开源Java博客系统solo:

# git clone -b v2.9.0 https://github.com/b3log/solo.git

# cd solo

修改Git地址:

# vim .git/config

[core]

repositoryformatversion = 0

filemode = true

bare = false

logallrefupdates = true

[remote "origin"]

url = git@192.168.0.15:/home/git/solo.git

fetch = +refs/heads/*:refs/remotes/origin/*

提交代码到Git仓库

# git add .

# git commit -m 'solo'

创建标签

# git tag 1.0.0

推送到Git服务器

# git push origin 1.0.0

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

主页面 -> 新建任务 -> 输入任务名称,构建一个Maven项目:

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

 


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

 

注意:如果没有显示“构建一个Maven项目”选项,需要在管理插件里安装“Maven Integration plugin”插件。

配置Git参数化构建:

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

 

动态获取Git仓库tag,与用户交互选择Tag发布:

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

 

指定项目Git仓库地址:

jenkins服务器配置:

# ssh-keygen

# ssh-copy-id git@192.168.0.15

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

 

修改*/master为$Tag,Tag是上面动态获取的变量名,表示根据用户选择打代码版本。

设置maven构建命令选项:

clean package -Dmaven.test.skip=true

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

 

利用pom.xml文件构建项目。

在Jenkins本机镜像构建与推送到镜像仓库,并SSH远程连接到Docker主机使用推送的镜像创建容器:

上图中,在Jenkins主机执行的Shell命令如下:

REPOSITORY=192.168.0.15:5000/solo:${Tag}

# 构建镜像

cat > Dockerfile << EOF

FROM 192.168.0.15:5000/tomcat-85:latest

RUN rm -rf /usr/local/tomcat/webapps/ROOT

COPY target/*.war /usr/local/tomcat/webapps/ROOT.war

ENV PATH /usr/local/tomcat/bin:$PATH

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

EOF

docker build -t $REPOSITORY .

# 上传镜像

docker push $REPOSITORY

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

 


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

 

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

REPOSITORY=192.168.0.15: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/jdk1.8 -p 88:8080 $REPOSITORY

注:容器名称blog-solo,暴露宿主机端口88,即使用宿主机IP:88访问blog-solo项目。

blog-solo项目已配置完成,开始构建:

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

 


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

 


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

 


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

 

选择tag,开始构建:

 

点击左下角构建历史里,右击第一个查看控制台输出:

 

浏览器访问solo项目:http://192.168.0.14:88

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


Tags:Docker   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一、为什么要搭建主从架构呢1.数据安全,可以进行数据的备份。2.读写分离,大部分的业务系统来说都是读数据多,写数据少,当访问压力过大时,可以把读请求给到从服务器。从而缓解数据...【详细内容】
2021-12-15  Tags: Docker  点击:(10)  评论:(0)  加入收藏
在网页中渲染公式一直是泛学术工具绕不开的一个功能,最近更新产品功能,正巧遇到了这个需求,于是使用容器方式简单实现了一个相对靠谱的公式渲染服务。分享出来,希望能够帮到有类...【详细内容】
2021-12-01  Tags: Docker  点击:(10)  评论:(0)  加入收藏
1.1 docker命令直接部署1.1.1 拉取镜像docker pull wurstmeister/zookeeperdocker pull wurstmeister/kafka1.1.2 启动zookeeper容器docker run -d --name myzookeeper -p 2...【详细内容】
2021-11-15  Tags: Docker  点击:(47)  评论:(0)  加入收藏
01 前言 顺着docker的发展,很多测试的同学也已经在测试工作上使用docker作为环境基础去进行一些自动化测试,这篇文章主要讲述我们在docker中使用浏览器进行自动化测试如果可以...【详细内容】
2021-10-29  Tags: Docker  点击:(42)  评论:(0)  加入收藏
因为你懂得的原因,下载docker镜像速度非常喜感,故收集几个国内常用的docker镜像。Docker中国区官方镜像地址:https://registry.docker-cn.com网易163的镜像http://hub-mirror.c...【详细内容】
2021-10-28  Tags: Docker  点击:(48)  评论:(0)  加入收藏
我们在很多场景下都需要做笔记,来对抗遗忘,一份好的笔记不仅能在需要的时候供我们查阅,也能帮助我们归纳整理知识提高做事效率。 目前市面上有很多云笔记软件,体验上各有不同,但...【详细内容】
2021-10-11  Tags: Docker  点击:(61)  评论:(0)  加入收藏
1. Nacos官网Nacos Docker 快速开始2. Clone 项目git clone https://github.com/nacos-group/nacos-docker.git3. cd 到nacos-docker 路径下 直接启动即可cd nacos-dockerdo...【详细内容】
2021-09-16  Tags: Docker  点击:(109)  评论:(0)  加入收藏
今天不做保姆级教程,分享奶爸常用、好用的Docker应用。有了这些Docker,Nas的可玩性会大幅提高,有时候奶爸也在想,刨去官方套件不考虑的话,Nas真的是差不多。如果小伙伴们有需要,后...【详细内容】
2021-09-03  Tags: Docker  点击:(167)  评论:(0)  加入收藏
环境要求 ubuntu系统:20.04 docker版本:20.10.7 redis版本:6.0.6步骤由于我这里已经有相应的redis镜像,这里就不记录了,关于docker一些基础知识可以看我以前的笔记开启3台re...【详细内容】
2021-07-26  Tags: Docker  点击:(117)  评论:(0)  加入收藏
今天在虚拟机里面安装了docker,利用docker起了一个centos。里面配置完成openssh后,利用xsheel连接docker里面的centos,发现特别慢,差不多要的1分钟才能连接上去。这肯定是有问题...【详细内容】
2021-07-21  Tags: Docker  点击:(131)  评论:(0)  加入收藏
▌简易百科推荐
一、为什么要搭建主从架构呢1.数据安全,可以进行数据的备份。2.读写分离,大部分的业务系统来说都是读数据多,写数据少,当访问压力过大时,可以把读请求给到从服务器。从而缓解数据...【详细内容】
2021-12-15  实战Java    Tags:Docker   点击:(10)  评论:(0)  加入收藏
在网页中渲染公式一直是泛学术工具绕不开的一个功能,最近更新产品功能,正巧遇到了这个需求,于是使用容器方式简单实现了一个相对靠谱的公式渲染服务。分享出来,希望能够帮到有类...【详细内容】
2021-12-01  编程菌zfn    Tags:Docker   点击:(10)  评论:(0)  加入收藏
1.1 docker命令直接部署1.1.1 拉取镜像docker pull wurstmeister/zookeeperdocker pull wurstmeister/kafka1.1.2 启动zookeeper容器docker run -d --name myzookeeper -p 2...【详细内容】
2021-11-15  无    Tags:docker   点击:(47)  评论:(0)  加入收藏
01 前言 顺着docker的发展,很多测试的同学也已经在测试工作上使用docker作为环境基础去进行一些自动化测试,这篇文章主要讲述我们在docker中使用浏览器进行自动化测试如果可以...【详细内容】
2021-10-29  小码哥聊软件测试    Tags:Docker   点击:(42)  评论:(0)  加入收藏
因为你懂得的原因,下载docker镜像速度非常喜感,故收集几个国内常用的docker镜像。Docker中国区官方镜像地址:https://registry.docker-cn.com网易163的镜像http://hub-mirror.c...【详细内容】
2021-10-28  抓蛙程序猿    Tags:docker   点击:(48)  评论:(0)  加入收藏
环境:Spring5.3.10通常,应用程序开发人员不需要对ApplicationContext实现类进行子类化。相反,SpringIOC容器可以通过插入特殊集成接口的实现来扩展。使用BeanPostProcessor自定...【详细内容】
2021-10-26  Java网络研发架构师    Tags:Spring   点击:(33)  评论:(0)  加入收藏
我们在很多场景下都需要做笔记,来对抗遗忘,一份好的笔记不仅能在需要的时候供我们查阅,也能帮助我们归纳整理知识提高做事效率。 目前市面上有很多云笔记软件,体验上各有不同,但...【详细内容】
2021-10-11  运维贼船    Tags:docker   点击:(61)  评论:(0)  加入收藏
1. Nacos官网Nacos Docker 快速开始2. Clone 项目git clone https://github.com/nacos-group/nacos-docker.git3. cd 到nacos-docker 路径下 直接启动即可cd nacos-dockerdo...【详细内容】
2021-09-16  程序狗爱化妆    Tags:Nacos   点击:(109)  评论:(0)  加入收藏
今天不做保姆级教程,分享奶爸常用、好用的Docker应用。有了这些Docker,Nas的可玩性会大幅提高,有时候奶爸也在想,刨去官方套件不考虑的话,Nas真的是差不多。如果小伙伴们有需要,后...【详细内容】
2021-09-03  晋升奶爸的垃圾佬    Tags:Docker   点击:(167)  评论:(0)  加入收藏
环境要求 ubuntu系统:20.04 docker版本:20.10.7 redis版本:6.0.6步骤由于我这里已经有相应的redis镜像,这里就不记录了,关于docker一些基础知识可以看我以前的笔记开启3台re...【详细内容】
2021-07-26  石老师小跟班    Tags:Redis主从复制   点击:(117)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条