Jenkins配合Docker 一键自动化部署SpringBoot应用详细流程

大家好,我是一安,今天全面的介绍一下Jenkins+docker+Springboot 如何实现一键自动部署,主要分以下几个模块:

  • 简单介绍
  • 软件安装
  • 环境配置
  • 创建任务
  • 部署项目

文章将从docker,gitlab,jenkins基础安装开始,并最终实现SpringBoot项目部署

介绍

Docker

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

优点:

Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

1、快速,一致地交付您的应用程序

Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。

容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:

  • 您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
  • 他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
  • 当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
  • 测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。

2、响应式部署和扩展

Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。

Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。

3、在同一硬件上运行更多工作负载

Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。

Jenkins

Jenkins是一个用Java编写的开源的持续集成(CI)工具,可用于自动化各种任务,如构建、测试和部署软件,旨在缓和和稳固软件的构建过程。

Jenkins是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。

特点:

开源的java语言开发持续集成工具,支持CI,CD;

易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理;

消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告;

分布式构建:支持Jenkins能够让多台计算机一起构建/测试;

文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等;

丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。

Jenkins配合Docker 一键自动化部署SpringBoot应用详细流程

Gitlab

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。GitLab由乌克兰程序员DmitriyZaporozhets和ValerySizov开发,它由Ruby写成。后来,一些部分用Go语言重写,现今并在国内外大中型互联网公司广泛使用。

git、gitlab、GitHub的简单区别:

git 是一种基于命令的版本控制系统,全命令操作,没有可视化界面

gitlab 是一个基于git实现的在线代码仓库软件,提供web可视化管理界面,通常用于企业团队内部协作开发

github 是一个基于git实现的在线代码托管仓库,亦提供可视化管理界面,同时免费账户和提供付费账户,提供开放和私有的仓库,大部分的开源项目都选择github作为代码托管仓库

软件安装

Docker

centos7以上安装docker12
1.安装gcc
 yum install -y gcc-c++
2.卸载旧版本
 yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
3.安装所需软件包
 yum install -y yum-utils device-mapper-persistent-data lvm2
4.设置稳定的存储库
 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5.更新yum索引(建议)
 yum makecache fast
6.安装docker-ce
 yum -y install docker-ce docker-ce-cli containerd.io
7.启动Docker
 systemctl start docker
8.运行hello-world 映像验证是否正确安装了Docker Engine-Community
 docker run hello-world
9.配置镜像加速
 vi /etc/docker/daemon.json
 {"registry-mirrors":["http://hub-mirror.c.163.com"]}
10.刷新配置镜像文件
 systemctl daemon-reload
11.重启Docker
 systemctl restart docker
12.开机自启
 systemctl enable docker

如果出现docker 安装报错:Requires: container-selinux >= 2:2.74

yum install --setopt=obsoletes=0 
   docker-ce-17.03.2.ce-1.el7.centos.x86_64 
   docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch # on a new system with yum repo defined, forcing older version and ignoring obsoletes introduced by 17.06.0

Gitlab

1.创建容器映射目录
 mkdir -p /mydata/gitlab/config && mkdir -p /mydata/gitlab/logs  && mkdir -p /mydata/gitlab/data
2.镜像拉取
    docker pull twang2218/gitlab-ce-zh
3.运行镜像    
 docker run -d  -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart always -v /mydata/gitlab/config:/etc/gitlab -v /mydata/gitlab/logs:/var/log/gitlab -v /mydata/gitlab/data:/var/opt/gitlab twang2218/gitlab-ce-zh
 # -d:后台运行
 # -p:将容器内部端口向外映射
 # --name:命名容器名称
 # -v:将容器内数据文件夹或者日志、配置等文件夹挂载到宿主机指定目录
4.配置(生成项目的URL访问地址是按容器的hostname来生成的,也就是容器的id,需要修改固定的URL访问地址)
 vi /mydata/gitlab/config/gitlab.rb
    # 配置http协议所使用的访问地址,不加端口号默认为80
    external_url 'http://192.168.5.128'
    # 配置ssh协议所使用的访问地址和端口
    gitlab_rails['gitlab_ssh_host'] = '192.168.5.128'
    gitlab_rails['gitlab_shell_ssh_port'] = 222 # 此端口是run时22端口映射的22端口
 :wq #保存配置文件并退出
5.修改密码
 # 进入容器内部
 docker exec -it gitlab /bin/bash
 # 进入控制台
 gitlab-rails console -e production
 # 查询id为1的用户,id为1的用户是超级管理员
 user = User.where(id:1).first
 # 修改密码为root
 user.password='12345678'
 # 保存
 user.save!
 # 退出
 exit
6.重启gitlab容器
7.浏览器登录gitlab

Jenkins

1.创建容器映射目录
 mkdir -p /mydata/jenkins/
2.镜像拉取
 docker pull jenkins/jenkins:lts
3.运行镜像
 docker run -u root -d -p 8080:8080 -p 50000:50000 -v /mydata/jenkins:/var/jenkins_home -v /etc/localtime:/etc/localtime -v /mydata/maven-3.0.4:/usr/local/maven-3.0.4 -v /usr/local/jdk1.8.0_202/:/usr/java/jdk1.8.0_202 -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker --name jenkins jenkins/jenkins:lts 
    # -u root 以root用户运行镜像,不然会出现Permission denied异常
    # -d 后台运行镜像
 # -p 8080:8080 将镜像的8080端口映射到服务器的10240端口。
    # -p 50000:50000 将镜像的50000端口映射到服务器的10241端口
    # -v /mydata/jenkins:/var/jenkins_home /var/jenkins_home目录为容器jenkins工作目录,我们将硬盘上的一个目录挂载到这个位置,方便后续更新镜像后继续使用原来的工作目录
    # -v /etc/localtime:/etc/localtime 让容器使用和服务器同样的时间设置。
    # -v /mydata/maven-3.0.4:/usr/local/maven-3.0.4 linux下的maven和容器内的关联(配置Jenkins时使用)
    # -v /usr/local/jdk1.8.0_202:/usr/java/jdk1.8.0_202 linux下的jdk和容器内的关联(配置jdk时使用)
    # -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker 是为了在容器内可以使用docker命令
    # --name jenkins 给容器起一个别名
4.配置镜像加速(非必须项),如果出现Signature verification failed in update site ‘default’
    vi  mydata/jenkins/hudson.model.UpdateCenter.xml
 将 url 修改为清华大学官方镜像:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
5.查看初始化密码
    more /mydata/jenkins/secrets/initialAdminPassword
6.浏览器登录jenkins,输入初始化密码,选择安装推荐的插件
7.设置登录用户信息 

环境配置

Gitlab

新建群组–>新建项目–>常用的git操作(clone、add、commit、push)

小编这里上传了一个简单springboot项目,用于后面jenkins打包运验证Jenkins配合Docker 一键自动化部署SpringBoot应用详细流程Jenkins配合Docker 一键自动化部署SpringBoot应用详细流程

Jenkins

系统管理–>全局工具配置–>配置maven和jdk路径

Jenkins配合Docker 一键自动化部署SpringBoot应用详细流程
Jenkins配合Docker 一键自动化部署SpringBoot应用详细流程

创建任务

新建任务

点击【新建任务】,输入任务名称,点击构建一个自由风格的软件项目

Jenkins配合Docker 一键自动化部署SpringBoot应用详细流程

源码管理

点击【源码管理】–【Git】,输入仓库地址,添加凭证,选择好凭证,保存即可

Jenkins配合Docker 一键自动化部署SpringBoot应用详细流程

修改Jenkins任务配置

点击【配置】–【构建触发器】–【构建】–【增加构建步骤】–【调用顶层Maven目标】–【填写配置】

Jenkins配合Docker 一键自动化部署SpringBoot应用详细流程
Jenkins配合Docker 一键自动化部署SpringBoot应用详细流程

保存-构建

Jenkins配合Docker 一键自动化部署SpringBoot应用详细流程
Jenkins配合Docker 一键自动化部署SpringBoot应用详细流程

至此一个简单打包验证完毕,下面开始通过jenkins实现部署项目

部署项目

编写Dockerfile

注意:Dockerfile文件在项目根目录下

# 基础镜像使用java
FROM java:8
#创建一个目录存放jar包和配置
RUN mkdir -p /aaa_data/springboot-demo
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为springboot-demo.jar
ADD target/springboot-demo.jar /aaa_data/springboot-demo/springboot-demo.jar
#添加进入docker容器后的目录
WORKDIR /aaa_data/springboot-demo
# 运行jar包
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/aaa_data/springboot-demo/springboot-demo.jar"]

修改Jenkins任务配置

点击【配置】–【构建触发器】–【构建】–【增加构建步骤】–【执行shell】–【填写shell】Jenkins配合Docker 一键自动化部署SpringBoot应用详细流程

#!/bin/bash

docker build -t springboot-demo .

docker stop springboot-demo

docker rm springboot-demo

docker run  -d -p 10001:10001 -v /aaa_data/springboot-demo/config:/aaa_data/springboot-demo/config -v /aaa_data/springboot-demo/commons:/aaa_data/springboot-demo/commons --name springboot-demo springboot-demo

保存-构建

Jenkins配合Docker 一键自动化部署SpringBoot应用详细流程

测试验证

Jenkins配合Docker 一键自动化部署SpringBoot应用详细流程

号外!号外!

如果这篇文章对你有所帮助,或者有所启发的话,帮忙点赞、在看、转发、收藏,你的支持就是我坚持下去的最大动力!

Jenkins配合Docker 一键自动化部署SpringBoot应用详细流程

线程和线程池的区别,线程池有哪些,什么情况下使用

单点登录SSO解决方案之SpringSecurity+JWT实现

复杂业务下,如何实现多任务的异步编排

Jenkins配合Docker 一键自动化部署SpringBoot应用详细流程


原文始发于微信公众号(一安未来):Jenkins配合Docker 一键自动化部署SpringBoot应用详细流程

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/44805.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!