脚本自动化部署docker微服务,取代Jenkins

2023-11-04

    由于Jenkins容器化部署,容器容器之间拷贝文件及其繁琐,如果在Jenkins部署在系统外层也需要配置复杂的流程才能实现微服务的自动化部署,本文主要通过脚本方式取代Jenkins实现自动化部署。脚本方式简单快捷,可以快速实现微服务部署、升级,避免Jenkins占用内存。

一、准备环境

1. 硬件环境

centos7.5

2. 软件环境

docker、jdk、maven(如果是gradle项目则安装gradle)、git

二、安装软件

1.安装docker

下载依赖

yum -y install yum-utils device-mapper-persistent-data lvm2

设置镜像源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker

yum makacache fast
yum -y install docker-ce

启动docker

systemctl start docker

设置开机启动

systemctl enable docker

2.安装jdk

yum install java-1.8.0-openjdk.x86_64

查看是否可用

java -version

3.安装maven

wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
yum -y install apache-maven

检查是否可用

mvn -version

4.安装git

yum install -y git

二、建立工作空间

首先定义/home目录为我们的工作空间,在这个工作空间下我们需要建立Gitspace、DockerBuilder、Shell这三个文件夹

1.Gitspace

代码工厂,用来存储各个项目的代码

2.DockerBuilder

Docker构建工厂,用来放置各个项目的dockerfile文件,生成docker镜像

3.Shell

用来存放启动脚本,意见化启动部署微服务

三、操作步骤

1.克隆代码

进入Gitspace目录,然后克隆我们需要自动化部署的项目

cd /home/Gitspace
git clone git clone http://xxxxx/xxxx/xxxxx.git

2.配置Git免密拉取

进入Gitspace下的项目目录,然后ls -a可以看到有个.git的隐藏文件夹

vim .git/config

然后添加上下边两行

[credential]
    helper = store

3.编写dockerfile

进入/home/DockerBuilder目录新建项目文件夹,然后新建项目的dockerfile文件

FROM openjdk:8
MAINTAINER NETGATE
LABEL app="hb-server" version="0.0.1" by="eric"
COPY ./hb-server-0.0.1-SNAPSHOT.jar hb-server.jar
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
CMD java -jar hb-server.jar

4.编写shell脚本

进入/home/Shell文件夹,新建test.sh脚本

#!/bin/bash
#auth eric
#date 2021-12-13
#*********脚本入参#*********
appname=hb-server
#Git源码位置
gitsrc=/home/GitSpace/$appname
#Docker脚本位置
dockersrc=/home/DockerBuilder/$appname
#*********脚本入参#*********
cd $gitsrc && git pull origin master && mvn install -DskipTests
if [ $? -eq 0 ]; 
then
    echo "maven build success "
else 
    echo -e '\033[31m[ error ] gradle build faild \033[0m' && exit 1
fi
\cp -f $gitsrc/target/*.jar $dockersrc
echo '第二步:查看是否有镜像'
cd $dockersrc
imageresult=$(docker images |grep  $appname | wc -l)
echo $imageresult
if [ $imageresult -eq 0 ]; 
then
  echo "不存在镜像,需要重新初始化鏡像";
  docker build -t $appname .
  docker run -d --name $appname -p 8003:8003 --restart always $appname
else
  conid=$(docker ps |grep  $appname |awk '{print $1}')
  docker cp *.jar $conid:/$appname.jar
  docker restart $conid
  if [ $? -eq 0 ]; 
  then
    echo "发布成功!"
  else 
    echo -e '\033[31m[ error ] 发布失败 \033[0m' && exit 1
  fi
fi

5.执行shell脚本

sh test.sh

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

脚本自动化部署docker微服务,取代Jenkins 的相关文章

随机推荐

  • 解决win10下localhost打不开的问题

    转自 https blog csdn net wk6333 article details 50678420 打开控制面板 添加或删除程序 然后但左侧栏的 启用或关闭Windows功能 把 Internet Information Serv
  • vue文件下载

    1 创建下载按钮
  • pidstat命令详解

    一 命令介绍 pidstat是sysstat工具中的一个命令 用于监控进程的cpu 内存 线程 IO及上下文切换等系统资源的占用情况 格式 pidstat options
  • SpringCloud-注册中心简单了解与使用

    前言 什么是SpringCloud 什么是微服务 能干什么 为什么要用SpringCloud 注册中心 什么是SpringCloud 大家都知道SpringCloud是一种微服务架构 模式 SpringCloud简单来说就是微服务架构技术落
  • ArrayList非线程安全记录

    一 问题描述 线上一个查询服务 偶尔会报一次查询出来的结果集合包含null 二 问题排查 在多线程查询过程中 使用了ArrayList 多线程查询出来后执行ArrayList add 然而ArrayList并不是线程安全的集合 会导致nul
  • linux红帽8怎么安yum,RedHat Linux 8本地Yum源配置方法

    1 挂载系统光盘到 mnt cdrom目录 mkdir p mnt cdrom mount dev sr0 mnt cdrom 2 设置系统启动后将光盘自动挂载到 mnt cdrom echo dev sr0 mnt cdrom iso96
  • 电商数据分析实战第一篇——客户消费行为分析

    一 分析背景 为了提高店铺的收益 进行准确的客户运营策略 使用店铺201910至202002的销售数据进行分析 根据客户的消费趋势 消费习惯把握客户的消费现状和心理 挖掘出高价值用户群体 完善销售运营策略 简单说明一下 客户分析包括基本属性
  • Upload LABS Pass-8

    第八关在后端使用了黑名单 并过滤了大小写 点以及空格 但并未过滤数据流 我们使用代理拦截请求 在文件后缀名中添加数据流 绕过黑名单 准备一个 8 php 文件 内容为一句话木马 上传 8 php 文件 并使用代理 此处使用 Burp Sui
  • JSON对象转换成字符串 相互转换 的几种方式

    在最近的工作中 使用到JSON进行数据的传递 特别是从前端传递到后台 前台可以直接采用ajax的data函数 按json格式传递 后台Request即可 但有的时候 需要传递多个参数 后台使用request进行接收 有时传递了几个数值 还好
  • 嵌套和递归使用模板类

    嵌套和递归使用模板类 模板栈 模板数组 栈中嵌套数组 数组中嵌套栈 数组中嵌套数组 模板栈 pragma once include
  • 计算机网络——网络层

    这篇文章是计算机网络系列文章的第三篇 计算机网络 物理层 计算机网络 数据链路层 计算机网络 网络层 计算机网络 传输层 计算机网络 应用层 序言 计算机网络中的网络层在当今的社会起到了什么作用 现在的互联网通信 远程办公和远程教育 电子商
  • 基于Dragonboard 410c进行开发的远程遥控机器人(三)

    前面说过 买的camera的夹层板要直接连到410c开发板上 这样96boards 就没有接口去连接了 无奈 智能自己飞线了 开始还担心 这样连接板子会不会出问题 经过最终的验证 发现是可以的 完全没有影响 接下来看一下最后的验证 图 远程
  • 安卓keytool获取不到签名文件的MD5

    目前通过 keytool list v keystore xxx jks 这种方法获取签名的md5时 只能显示SHA1和SHA256 不显示md5 解决办法 1 先将自己的keystore配置进app下的build gradle中 2 打开
  • 关键字参数和可选参数

    通常Fortran的实参和形参的参数数量以及类型必须是匹配的 但是如果过程接口是显式的 那么就可以改变参数表中调参数的顺序 或为过程的某些iochengde形参特别指定实参 通过将过程放在模块中 并在调用程序中用use关联访问模块 可以显式
  • C#中的BeforeFieldInit

    今天学习设计模式中的单例模式 无意间发现了这个标志BeforeFieldInit 于是简单地搜索了一下 总结出如下内容 The C specification states The static constructor for a clas
  • Doris--基础--11--动态分区

    Doris 基础 11 动态分区 1 介绍 对表级别的分区实现生命周期管理 TTL 减少用户的使用负担 1 1 功能 动态添加分区 动态删除分区 1 2 原理 在某些使用场景下 用户会将表按照天进行分区划分数据 在没有动态分区功能的时候 用
  • 2021第十二届蓝桥杯大赛软件赛省赛C/C++ 大学B组试题B杨辉三角形

    这题目很简单 问题是细节处理处理很重要 在蓝桥杯省赛中你只要搞对一两道题目就有省三了 实施代码 include
  • 做PPT设计半年赚8万,我是怎样做到的?

    下班做PPT 半年赚8万是什么感觉 你好 我是佳佳 一个用PPT兼职赚钱的宝妈 我现在每天抽2个小时 坐在电脑前 把各种素材像拼图一样拼接一下 像这样 然后把成稿投稿到设计平台 就能赚到钱 你是不是觉得 我是个职业设计师 挺厉害的 不是的
  • java 抽象类初始化_java-抽象类初始化

    我有一个抽象类 abstract class Shape public String color public Shape public void setColor String c color c public String getCol
  • 脚本自动化部署docker微服务,取代Jenkins

    由于Jenkins容器化部署 容器容器之间拷贝文件及其繁琐 如果在Jenkins部署在系统外层也需要配置复杂的流程才能实现微服务的自动化部署 本文主要通过脚本方式取代Jenkins实现自动化部署 脚本方式简单快捷 可以快速实现微服务部署 升