Jenkins+Docker+Git 自动化部署图文教程

https://blog.csdn.net/qq_38252039/article/details/89791247

前言:

通过几天的学习和自己的理解,整理了下Docker+Jenkins的自动部署教程,如有不足,还请多多指点,谢谢!

Docker的优点:

Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。
结构:客户端→Docker_Host(宿主机)→仓库
三个概念 容器→镜像→仓库

为什么使用Jenkins:

传统的部署项目,当项目完成后,需要我们自己从代码仓库中拉取代码到本地,完成打包,然后上传到服务器,然后配置项目的运行环境并启动。这样显然有一点的缺陷,我们在开发中存在的一些bug由于不能即时的发现,导致后期修复bug而存在导致连锁效应的风险。而且我们经常修改代码后,需要重新打包,然后上传到服务器,然后运行,当项目很多的时候,这样的一些重复性机械操作导致我们有些力不从心。
而我们使用Jenkins后真正的帮我们实现了自动化部署,当我们代码更新后,push到代码仓库中,我们只需在Jenkins的可视化界面点击构建项目,Jenkins便会根据我们配置的仓库地址自动拉取代码,自动打包,并运行,完成自动化部署。

一、安装Docker

Docker 要求 CentOS 系统的内核版本在 3.10以上 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker。

1. 通过 uname -r 命令查看你当前的内核版本
uname -r
  • 1
2. 使用 root 权限登录 Centos。确保 yum 包更新到最新。
yum -y update
  • 1
3. 卸载旧版本(如果安装过旧版本的话)
yum remove docker docker-common docker-selinux docker-engine
  • 1
4. 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
  • 1
5. 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  • 1
6. 可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
  • 1
7. 安装docker
sudo yum install -y docker-ce     #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版18.03.1
  • 1
8. 启动并加入开机启动
systemctl start docker     //启动docker
systemctl enable docker //设置为开机启动
  • 1
  • 2
9. 验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
docker version
  • 1

二、Docker 安装Jenkins

1. 搜索仓库中的jenkins镜像
docker search jenkins
  • 1

jenkins    表示你要搜索的镜像名,DESCRIPTION中包含jenkins的也会显示出来

2. 通过拉取jenkins镜像到本地images中

docker pull jenkins/jenkins

  1. 注意这里拉取的是jenkins/jenkins版本,因为先前的jenkins版本只有2.60,导致安装jenkins插件失败
  2. 拉取的时候可以指定版本,例如docker pull java:8 表示拉取的java版本为8; 不指定版本则默认为最新版本 latest
3. 启动jenkins容器
docker run --name myjenkins -d -p 8081:8080 -p 8085:8085 jenkins/jenkins
  • 1

–name myjenkins    指定容器NAME为myjenkins
-d    表示后台运行
-p 8081:8080    表示Docker Host(运行Docker的主机)端口 与Docker容器内运行的端口映射,
                            8081表示DockerHost的端口,8080即容器内的端口; 外部访问8081即可访问到Docker容器的8080端口
jenkins/jenkins    表示启动的镜像为jenkins/jenkins ,查看本地镜像可以通过docker images查看

说明:
    1.容器内的端口外部无法直接访问,因为要配置Docker Host与容器的端口映射,映射可以配置多个;
由于后面需要部署项目,提前把项目的端口号-p 8085:8085配置好,不配置的也可以,后面去修端口映射文件即可。
     2.其实我们也可以省略第二步pull操作,直接启动一个容器,Docker会先去本地images中查看是否有这个镜像,如果没有的话会去DockerHub仓库去下载。

三、登陆Jenkins的初始化操作

1. 访问jenkins界面,例如我虚拟机IP是192.168.199.188 ,输入192.168.199.188:8081,回车显示以下界面


进入安装Jenkins的容器内

docker exec -it myjenkins bash        // 进入指定容器,myjenkins表示我们启动容器时给容器指定的名称

cat /var/jenkins_home/secrets/initialAdminPassword`       //查看密码,复制密码粘贴到文本框内
  • 1
  • 2
  • 3

操作图示:

或者

    1. docker ps -a
      查看docker容器ID
    2. docker exec -u 0 -it 21ee4816aac1 /bin/bash
      -u 0 是使用root权限,如果不需要修改文件可以不使用此参数
      21ee4816aac1是上面看到的id
    3. cat /var/jenkins_home/secrets/initialAdminPassword
2. 安装插件,这里就安装jenkins推荐的插件

点击安装推荐插件:

3. 自动安装中,需要稍等片刻,安装完成点击继续:

4. 创建管理员用户,也可以直接使用admin账户继续:

5. 实例配置 直接保存完成:

6. 开始使用Jenkins:

7. 进入Jenkins主页:

四、全局工具配置(配置环境)

点击系统管理–全局工具配置
1. 配置JDK: 取消自动安装(一般容器内都安装好了JDK环境), 进入docker容器,使用echo $JAVA_HOME 获取jdk安装路径,将路径复制到JAVA_HOME文本框

2. 配置Maven: 指定name,自动安装,点击Save即可

五、安装Maven插件

点击系统管理–插件管理

六、新建任务,完成自动化部署

1. 回到首页,点New 任务,构建一个Maven项目

2. 点击确定,回到首页我们发现多了一个名为SpringBoot_AutoTest1的任务(上面的任务是以前的,不用理会)

3. 点击项目名SpringBoot_AutoTest1 --> 点击配置
3.1 源码管理(配置git仓库地址,Jenkins会从远程仓库拉取代码):

3.2 构建配置(Jenkin拉取代码后会自动执行打包命令):

3.3 配置shell脚本(Jenkins打包完成后,自动执行shell脚本启动项目,实现自动化部署),最后保存即可:


附shell脚本:

#!/bin/bash
# #!/bin/bash是指此脚本使用/bin/bash来解释执行。其中,#!是一个特殊的表示符,其后,跟着解释此脚本的shell路径。bash只是shell的一种,还有很多其它shell,如:sh,csh,ksh,tcsh,...
# #!/bin/bash只能放在第一行,如果后面还有#!,那么只能看成是注释。 #服务名称 SERVER_NAME=SpringBoot_AutotTest #源jar路径,mm打包完成之后,target目录下的jar包名称,也可选择成为war包,war包 可移动到Tomcat的。
JAR_NAME=jekins-0.0.1-SNAPSHOT #target打包生成jar包的目录 JAR_PATH=/var/jenkins_home/workspace/SpringBoot_AutotTest/target # 以具体的打包位置为准,可以先构建一次项目,通过日志查看打包的目录 #打包完成之后,把iar包移动到运行jar包的目录
JAR_WORK_PATH=/var/jenkins_home/workspace/SpringBoot_AutotTest/target echo "查询进程id-->$SERVER_NAME"
PID=`ps -ef | grep "$SERVER_NAME" | awk '{print $2}'`
echo"得到进程ID: $PID"
echo"结束进程"
for id in $PID
do
kill -9 $id
echo "killed $id"
done
echo"结束进程完成" #复制jar包到执行目录_ echo" 复制jar包到执行目录:cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH"
cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH
echo"复 制jar包完成"
cd $JAR_WORK_PATH
#修改文件权限
chmod 755 $JAR_NAME.jar #前台启动
#java -jar $JAR_NAME.jar #后台启动
BUILD_ID=dontKillMe nohup java -jar $JAR_NAME.jar &

Jenkins+Docker+Git 自动化部署的更多相关文章

  1. jenkins + nodejs + git 自动化部署前端

    1.  创建自定义风格任务 2.填写项目描述 3.配置源码管理 4. 系统管理->插件管理 ->安装插件 5.配置系统管理->全局工具配置-> 6.配置全局 ssh 7. 继续 ...

  2. 基于Jenkins,docker实现自动化部署(持续交互)

      前言 随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致.基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化.因此 ...

  3. 基于Jenkins,docker实现自动化部署(持续交互)【转】

      前言 随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致.基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化.因此 ...

  4. 从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布

    一.前言 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件.Jenkins 支持各种运行方式,可通过系统包.Docker 或者通过一个独立的 Java ...

  5. jenkins+Docker持续化部署(笔记)

    参考资料:https://www.cnblogs.com/leolztang/p/6934694.html (Jenkins(Docker容器内)使用宿主机的docker命令) https://con ...

  6. Jenkins+Docker+Git+Registry

    从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布   笔者:@拿着保温瓶的年轻人 目录: 一.前言 二.发布流程 三.环境准备 四.部署思路梳理 五.三台机器上操作 ...

  7. Linux-GitLab+Jenkins持续集成+自动化部署

    GitLab+Jenkins持续集成+自动化部署 什么是持续集成? (1)Continuous integration (CI) 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个 ...

  8. 基于 Jenkins+Docker+Git 的CI流程初探

    在如今的互联网时代,随着软件开发复杂度的不断提高,软件开发和发布管理也越来越重要.目前已经形成一套标准的流程,最重要的组成部分就是持续集成(Continuous Integration,CI)及持续部 ...

  9. Jenkins+Gitlab+Ansible自动化部署(五)

    Freestyle Job实现静态网站部署交付(接Jenkins+Gitlab+Ansible自动化部署(四)https://www.cnblogs.com/zd520pyx1314/p/102445 ...

随机推荐

  1. Grafana v8.3.3 & jmeter-influxdb2-backend

    1. 说明 接上篇文章,今天继续聊Grafana & influxdb2-backend. 2. Grafana v8.3.3安装 下载rpm包 wget https://dl.grafana ...

  2. 自动同步bing壁纸

    在百度搜东西,经常出来一大坨广告:要么就是复制粘贴文章.完全没有创新,搜索越来越困难.偶尔用一下bing还挺好用. bing的壁纸是真心好看,每天不重样.决定写个脚本同步一下它的壁纸. 一.以我的Wi ...

  3. Jenkins+allure集成报告构建

    1.点击新建item,新建一个job 对这个job进行配置 General模块,点击高级 勾选自定义的工作空间,填写项目目录 构建触发器和构建环境先不填写 构建模块,填写python main.py, ...

  4. 报表工具和BI商业智能的区别,你真的弄清楚了吗?

    许多人在投身大数据行业的时候,肯定会听到的两个词就是"报表工具"和"BI商业智能".但是大部分人并不太清楚这两者之间的概念和区别,认为报表就是BI,BI就是报表 ...

  5. Ecma335、CLR、CLI、CTS、 IL、.net 以及他们之间的关系

    以上是个人对他们直接关系的理解:图片是原创 CLI 通用语言基础架构(Common Language Infrastructure), CLI是一个开放型的技术规范,它定义了一个语言无关的跨体系结构的 ...

  6. 由浅入深--第一个MyBatis程序

    话不多说,马上开始我们的第一个Mybatis程序: 第一个程序,当然要参考MyBatis的官网文档来搞,地址如下:https://mybatis.org/mybatis-3/zh/getting-st ...

  7. Activity的创建及生命周期

  8. Leaflet:控件Control相关

    Leaflet官方文档中只给出了4种控件:Zoom.Attribution.Layers.Scale:它们都是继承自Control类,具体可以参考Control. Control Zoom.Scale ...

  9. Navicat15激活(仅供学习使用,严禁任何商业用途)

    Navicat15利用注册机破解的方法 需求 Navicat15下载及安装 也可以联系作者获取Navicat15及工具,仅供学习使用,严禁各种用于商业活动 1.打开搜索引擎,查找Navicat15,然 ...

  10. linux多进/线程编程(5)——进程间通信之mmap

    参考资料: 1.博客1:https://www.jianshu.com/p/755338d11865 mmap:一种内存映射文件的方法 memory map 父子进程和无亲缘关系的进程,都可以将自身用 ...