jenkins与docker的自动化ci/cd实战(代码片段)

author author     2022-12-22     533

关键词:

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

一、发布流程设计

技术分享图片

技术分享图片
工作流程:

  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 [email protected]:/home/git/solo.git

    三、准备Jenkins环境

    Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于代码编译、部署、测试等工作。 Jenkins也是一个跨平台的,大多数主流的平台都支持,而且安装很简单,我们这里以部署war包方式安装它。
    官网下载地址:https://jenkins.io/download/
    如图点击下载最后一个Generic Java package(war):
    技术分享图片
    在安装前需要具备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 
    # export JAVA_HOME PATH # 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:
技术分享图片

四、部署私有镜像仓库

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主机没有git命令,需要安装Git:
# yum install git -y

八、Jenkins安装必要插件

1. Jenkins安装必要插件
主页面 -> 系统管理 ->管理插件:
技术分享图片
安装SSH与Git Parameter插件。

插件说明:

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

2. 配置SSH插件
第一步:先创建一个用于连接Docker主机的凭据。
主页面 -> 凭据 -> 系统 -> 右击全局凭据 -> 添加凭据:
技术分享图片
输入连接Docker主机的用户名和密码:
技术分享图片
第二步:添加SSH远程主机
主页面 -> 系统管理 -> 系统设置 -> SSH remote hosts:
技术分享图片

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

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

# git clone https://github.com/b3log/solo
# cd solo
移除旧的推送地址,添加新的:
# git remote remove origin 
# git remote add origin [email protected]:/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项目:
技术分享图片
注意:如果没有显示“构建一个Maven项目”选项,需要在管理插件里安装“Maven Integration plugin”插件。
配置Git参数化构建:
技术分享图片
动态获取Git仓库tag,与用户交互选择Tag发布:
技术分享图片
指定项目Git仓库地址:
技术分享图片
修改*/master为$Tag,Tag是上面动态获取的变量名,表示根据用户选择打代码版本。

设置maven构建命令选项:
技术分享图片

利用pom.xml文件构建项目。
在Jenkins本机镜像构建与推送到镜像仓库,并SSH远程连接到Docker主机使用推送的镜像创建容器:
技术分享图片
上图中,在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,开始构建:

技术分享图片
技术分享图片
点击左下角构建历史里,右击第一个查看控制台输出:
技术分享图片
技术分享图片

浏览器访问solo项目:http://192.168.0.218:88
技术分享图片
如果输出上述页面说明是正常的,页面没有加载成功样式,需要修改下项目里访问地址。

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

少侠,请留步!

有个消息告诉你,大家知道Docker/Kubernetes是当下非常主流的容器技术,已成为运维工程师、架构师必备技能,但Kubernetes相比Docker学习成本高很多,因为Kubernetes具备丰富的功能,相对比较复杂,并且网上资源写的不成系统,大多数缺章少节的,很难按照教程跑通。因此,我决定写Docker和Kubernetes技术文章专栏,目的是让学习Kubernetes的朋友少走些弯路,在企业落地容器云平台提供一些企业实践性指导,希望自己所学所思的东西能够帮助到大家,能够有所启发。
技术分享图片
专栏传送门:基于Kubernetes企业容器云平台落地与实践

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

记得点进去看看哦。感谢支持!

本文视频版:http://edu.51cto.com/course/14462.html?qd=lzl

jenkins与docker的自动化ci/cd实战(代码片段)

...续部署、交付(CD)。本文基于Jenkins+Docker+Git实现一套CI自动化发布流程。一、发布流程设计工作流程:开发人员提交代码到Git版本仓库;Jenkins人工/定时触发项目构建;Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;Je... 查看详情

jenkins与docker的自动化ci/cd流水线实战(代码片段)

Jenkins与Docker的自动化CI/CD流水线实战标签(空格分隔):docker的部分一:什么是CI/CD二:发布流程设计三:部署Git仓库并上传测试代码一:什么是CI/CD持续集成(ContinuousIntegration,CI):代码合并、构建、部署、测试都在一起,不... 查看详情

docker与jenkins的自动化ci/cd流水线实战(svn)

准备安装完成以下环境:1、svn2、jdk3、maven4、tomcat5、jenkins项目代码测试(php/java):https://github.com/lizhenliang配置svn1、查看结构trunk:主干分支branches:其他分支tags:打标记将代码最终打到tags目录下,打成版本号标记,然后再jenk... 查看详情

ci与cd之docker上安装jenkins(代码片段)

...步的使用,这也是持续集成的目的,CI是属于开发人员的自动化流程。 CD:持续交付(ContinuousDelivery)和持续部署(ContinuousDeployment),这里查阅了一些资料,并简单总结了一下:    1.持续交付意味着所有的变更都可以随时交... 查看详情

ci/cd技术专题「jenkins实战系列」jenkinsfile+dockerfile实现自动部署(代码片段)

...由勤奋得来,而机智与智慧却有懒于天赋。前提概要Jenkins下用DockerFile自动部署Java项目,项目的部署放心推向容器化时代机制。本节需要对jenkinsfile有点了解,对dockerfile有点了解,对shell有点了解,对docker有点... 查看详情

ci/cd技术专题「jenkins实战系列」jenkins实现自动化部署+自动化合并其他分支(代码片段)

前提概要前面的文章中介绍过了,针对于Jenkins的Window环境的安装以及部署到Linux环境的案例和基本配置,【CI/CD技术专题】「Jenkins实战系列」(1)全流程介绍Jenkins环境搭建+基础部署配置(Windows->Linuxÿ... 查看详情

jenkins+docker自动化微服务发布平台实战(代码片段)

论述近几年一直很流行CI/CD自动化构建发布平台,各大公司也都在搞比较适合自己业务的CI/CD平台,他不仅能够节省时间提升发布效率,同时也能够降低发布风险,因为以前都是会有人工介入为发布增加了很多不确... 查看详情

jenkins+docker自动化微服务发布平台实战(代码片段)

论述近几年一直很流行CI/CD自动化构建发布平台,各大公司也都在搞比较适合自己业务的CI/CD平台,他不仅能够节省时间提升发布效率,同时也能够降低发布风险,因为以前都是会有人工介入为发布增加了很多不确... 查看详情

ci与cd之docker上安装jenkins(代码片段)

一.CI,CD,Jenkins的介绍CI:持续集成(Continuousintegration,简称CI),在传统的软件开发环境中,有集成,但是没有持续集成这种说法,长时间的分支与主干脱离,导致分支与主干可能存在较大偏差,在集成代码的时候可能需要花费数... 查看详情

ci/cd技术专题「jenkins实战系列」如何通过gitlab对接jenkins构建提交自动触发部署构建体系指南(上部)(代码片段)

前因后果最近,发现我们公司的自动化体系做的实在是不咋地,每次提交push完代码之后,还需要登录到服务器进行执行下docker脚本,之后才能拿到镜像,一说到这里我就要吐了,CI/CD做的简直是一团糟࿰... 查看详情

ci/cd——构建企业级docker+jenkins+git+harbor流水线自动化持续集成持续发布平台(代码片段)

构建企业级Docker+Jenkins+Git+Harbor流水线自动化持续集成持续发布平台CI/CD是什么?持续集成(CI)/持续交付(CD)的优势自动化部署流程图GitGithubGitlab的区别前言:一些自己想说的话部署Docker+Jenkins+Git+Harbor流水... 查看详情

ci/cd——构建企业级docker+jenkins+git+harbor流水线自动化持续集成持续发布平台(代码片段)

构建企业级Docker+Jenkins+Git+Harbor流水线自动化持续集成持续发布平台CI/CD是什么?持续集成(CI)/持续交付(CD)的优势自动化部署流程图GitGithubGitlab的区别前言:一些自己想说的话部署Docker+Jenkins+Git+Harbor流水... 查看详情

ci/cd技术专题「jenkins实战系列」jenkins+pipeline构建自动化部署(代码片段)

...ipeline(流水线技术),那为什么要用Pipeline呢?实现自动化构建,其中Pipeline能够将以前project中的配置信息以steps的方式放在一个脚本里,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以... 查看详情

ci/cd技术专题「jenkins实战系列」重塑jenkins服务进行自动合并的方案实现(纠正错误)

前言介绍本篇文章主要针对于之前的Jenkins在构建分支的时候,进行自动合并其他分支的纠正和专题介绍,如果想要了解更多的说明,可以参考一下官方文档:Jenkins的Git合并官方介绍(英文版)、【Jenkins官... 查看详情

docker——jenkins+git+registry构建自动化持续集成环境(ci/cd)(代码片段)

...部署、交付(CD)。本文基于Jenkins+Docker+GitSvn实现一套CI自动化发布流程,同时支持撤回。  一、发布流程设计工作流程:开发人员提交代码到Git或Svn版本仓库;Jenkins人工/定时触发项目构建;Jenkins拉取代码、代码编码、... 查看详情

为了实现ci/cd,先来定制一个docker镜像实战精华篇(代码片段)

...发布,同时,项目中已经采用了云厂商提供的CI/CD自动化发布流水线。因此,为配合CI/CD操作,需要先针对项目构建一些发布的脚本,通过脚本来自动化操作Docker镜像定制、Docker的启动和停止。在阅读和实践本... 查看详情

为了实现ci/cd,先来定制一个docker镜像实战精华篇(代码片段)

...发布,同时,项目中已经采用了云厂商提供的CI/CD自动化发布流水线。因此,为配合CI/CD操作,需要先针对项目构建一些发布的脚本,通过脚本来自动化操作Docker镜像定制、Docker的启动和停止。在阅读和实践本... 查看详情

为了实现ci/cd,先来定制一个docker镜像实战精华篇(代码片段)

...发布,同时,项目中已经采用了云厂商提供的CI/CD自动化发布流水线。因此,为配合CI/CD操作,需要先针对项目构建一些发布的脚本,通过脚本来自动化操作Docker镜像定制、Docker的启动和停止。在阅读和实践本... 查看详情