jenkins构建镜像自动化部署

文章目录

  • 前言
  • 一、Jenkins 是什么?
  • 二、三种构建方式
    • 1.新建自由风格的软件项目
    • 2.maven风格
      • 1)构建并推送jar包
      • 2 shell脚本完成部署
  • 总结


前言

本文是在安装好jenkins以及其他环境的前提下编写的。所以需要保证jenkins服务器上有maven,jdk,关联git等操作。如果需要搜索其他文档


一、Jenkins 是什么?

百度百科:
jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成

二、三种构建方式

1.新建自由风格的软件项目

推荐前端软件应用使用自由风格来进行构建项目。(没有pom.xml文件)

2.maven风格

1)构建并推送jar包

我用来作为后端代码生成,也是我现在用的方法,使用jenkins+sh脚本完成微服务构建。

jenkins构建镜像自动化部署_第1张图片
挂钩git项目,并且在凭证中找到有效用户,这个用户必须加入到这个项目的管理中。否则拉不到项目.

jenkins构建镜像自动化部署_第2张图片
在微服务的父pom文件下,执行clean test packet打包命令,就会将代码打包成一个个的jar文件,位置在target文件夹下。

jenkins构建镜像自动化部署_第3张图片
构建好后的操作可以添加多个,因为我是微服务所以这里写一个具体的步骤出来。
send build artifacts over ssh模式
将构建好的镜像通过ssh发送server服务器,可以从中选择目标的服务器。
transfers
搬运的意思

source files 工作空间下jar包的路径地址
Remove prefix 移除前缀,相当于不会生成路径下的其他包
Remote directory 远程服务器上的文件夹
Exec command 最终执行的shell命令

在我的配置中拉取的是某个微服务下的jar包到指定服务器下的指定文件,完成我执行命令,这个命令是cd到目标文件夹下执行sh脚本

2 shell脚本完成部署

在exec command执行shell命令,我是通过执行脚本来完成自动化构建

我使用docker进行运行的jar包,所以,在每个jar发送到目标服务器下的各个文件后,通过配合文件夹下的dockerfile来进行bulid镜像。之前dockerfile已经做过讲解了,现在只写sh脚本。

步骤:1.声明变量
	  2.创建文件夹和备份文件夹
	  3.停止需要替换的的容器
	  4.删除需要替换的容器
	  5.删除需要替换的镜像、
	  6.构建新的镜像
	  7.将构建的镜像保存到备份文件夹
	  8.管理备份数量
	  9.运行新的容器

实际代码:

#/bin/bash
dir=/data/images_bak/file-parent
name=file-parent
logs=/data/logs/file-parent
port=9003   
#以上为声明变量
if [ ! -d "$dir" ];then
  mkdir -p $dir
else
  echo "xxxx"
fi
if [ ! -d "$logs" ];then
  mkdir -p $logs
fi
#if判断文件夹是否存在  -d 判断是否为文件夹
date=`date +%Y%m%d%H%M%S`
#声明变量
docker stop `docker ps -a|grep $name|awk '{print $1}'`
docker rm `docker ps -a|grep $name|awk '{print $1}'`
docker rmi `docker images|grep $name|awk '{print $1}'`:`docker images|grep $name|awk '{print $2}'`
#停止容器移除容器和镜像
docker build -t $name:$date .
#构建镜像
docker save > $dir/$name-$date.tar `docker images|grep $name|awk '{print $1}'`:`docker images|grep $name|awk '{print $2}'`
#将镜像作为tar保存到对应目录 名字为 imageName:tag
ls -t $dir/*.tar |awk 'NR>3'|xargs rm -f

docker run   -itd -p $port:$port -v $logs:/logs  --name $name $name:$date  bash
#启动镜像映射端口挂载目录和声明容器名

了解:

linux 下shell中if的“-e,-d,-f”是什么意思
文件表达式
 -e filename 如果 filename存在,则为真
 -d filename 如果 filename为目录,则为真 
 -f filename 如果 filename为常规文件,则为真
 -L filename 如果 filename为符号链接,则为真
 -r filename 如果 filename可读,则为真 
 -w filename 如果 filename可写,则为真 
 -x filename 如果 filename可执行,则为真
 -s filename 如果文件长度不为0,则为真
 -h filename 如果文件是软链接,则为真
 filename1 -nt filename2 如果 filename1比 filename2新,则为真。
 filename1 -ot filename2 如果 filename1比 filename2旧,则为真。

总结

jenkis自动化构建并非一种构建方式,需要深入学习了解,如果你是运维人员那么可以继续了解,开发人员个人觉得知道一种构建方式就足以满足日常工作

你可能感兴趣的:(docker,jenkins,自动化,运维)