IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 基于Docker、Jenkins实现自动化部署 -> 正文阅读

[系统运维]基于Docker、Jenkins实现自动化部署

概述

最近在写一个基于SpringBoot的小项目,由于每次部署到服务器都需要经历几个繁琐的过程,随在自己的服务器上安装了Jenkins和Docker实现自动化部署。至此,将整个过程记录如下。

安装与配置

Jenkins

  1. 安装JDK和Maven

    此处呢内容自行安装,不做描述

  2. 访问官网 下载即可(若下载速度太慢,从华为云镜像站下载即可)

在这里插入图片描述

  1. 个人倾向于使用war包部署,放在Tomcat-webapp目录下启动即可

    注意:将war包放在webapp目录下启动是会提示ClassNotFound等异常,经过一番寻找是项目本地缺少了Jackson依赖包,从Maven中央仓库下载后放置在${path}/tomcat/webapps/jenkins/WEB-INF/lib目录下即可

  2. 启动后从${path}/tomcat/logs/catalina.out获取admin密码,配置JDK和Maven即可

  3. 若代码库在码云平台,在Jekins插件中心安装对应插件即可

在这里插入图片描述

  1. 参照官方文档在Jenkins平台配置即可

在这里插入图片描述

Docker

  1. 安装Docker-CE并设置阿里云加速镜像

至此,自动化部署所需的基础组件已安装完毕。

配置文件编写

此次自动化部署主要依赖两个文件

  • Dockerfile:将我们的项目作为镜像导入Docker中
  • 启动脚本:在重新部署项目时,完成Docker内进程的删除、镜像删除和项目启动

项目结构

在这里插入图片描述

三者应处于同级目录

编写Dockerfile

# 基础镜像
FROM java:8
# 文件路径
WORKDIR /mnt
# 复制文件
COPY target/adminlte-web-0.0.1-SNAPSHOT.jar .
# 启动命令
ENTRYPOINT ["java","-Xmx500m", "-jar", "/mnt/adminlte-web-0.0.1-SNAPSHOT.jar","-Dspring.profiles.active=test", "&"]
# 端口
EXPOSE 8080 8090

配置容器内的工作路径为/mnt,启动命令和端口接口

编写启动脚本

#!/usr/bin/env bash
APP_NAME_PREFIX="adminlte"
TAG_NAME=$(date -d today +"%H%M")
IMAGE_NAME=$APP_NAME_PREFIX:"$TAG_NAME"

# 删除镜像进程
delProcess() {
  DOCKER_PS=$(docker ps -a | grep $APP_NAME_PREFIX | awk '{print $1}')
  for i in $DOCKER_PS; do
    if [ -n "$i" ]; then
      docker stop "$i"
      docker rm "$i"
    fi
  done
}

# 删除镜像
delImages() {
  OLD_IMAG_IDS=$(docker images | grep $APP_NAME_PREFIX | awk '{print $1,$2}' | sed 's/[[:space:]]/:/')
  for i in $OLD_IMAG_IDS; do
    if [ -n "$i" ]; then
      docker rmi "$i"
    fi
  done
}

# 构建新镜像
buildImage() {
  docker build -t "$IMAGE_NAME" .
}

# 启动新镜像(部署两个实例)
dockerRun() {
  for i in {8090..8091}; do
    docker run -d --name "$APP_NAME_PREFIX"_$i  -p $i:8080 "$IMAGE_NAME"
  done
}

run() {
  echo "脚本开始执行"
  delProcess
  delImages
  buildImage
  dockerRun
  sleep 1
  echo "执行结束"
}

run

执行

  1. 新建一个任务

    在这里插入图片描述

  2. 添加自己的代码库(Gitee或GitHub)

    在这里插入图片描述

  3. 配置构建脚本

    在这里插入图片描述

    脚本内容为

    # 获取Jenkins工作目录为变量
    WORKSPACE=${WORKSPACE}
    # 进入工作目录
    cd $WORKSPACE
    # 执行maven instll命令
    mvn clean install -DskipTests -e
    echo "install 成功"
    # 进入主目录
    cd adminlte-web
    # 执行打包命令
    mvn clean package -DskipTests -e
    # 启动部署脚本
    sh run.sh
    
  4. 保存即可

执行流程

  1. 用户提交代码到代码托管平台

  2. Jenkins从代码托管平台拉取最新的代码到服务器(宿主机)

  3. 在服务器(宿主机)执行maven命令,完成打包

  4. 执行run.sh,删除老进程并启动新镜像

  5. 通过docker logs -f ${容器ID}portainer查看启动日志即可

    在这里插入图片描述

参考资料

  1. Dockerfile reference
  2. Best practices for writing Dockerfiles
  3. Build your Java image

阅读原文

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:55:01  更:2021-12-24 18:56:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:24:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码