当前位置:网站首页>jenkins构建镜像自动化部署
jenkins构建镜像自动化部署
2022-07-27 05:11:00 【超多多和刘宝宝的代码世界】
前言
本文是在安装好jenkins以及其他环境的前提下编写的。所以需要保证jenkins服务器上有maven,jdk,关联git等操作。如果需要搜索其他文档
一、Jenkins 是什么?
百度百科:
jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成
二、三种构建方式
1.新建自由风格的软件项目
推荐前端软件应用使用自由风格来进行构建项目。(没有pom.xml文件)
2.maven风格
1)构建并推送jar包
我用来作为后端代码生成,也是我现在用的方法,使用jenkins+sh脚本完成微服务构建。

挂钩git项目,并且在凭证中找到有效用户,这个用户必须加入到这个项目的管理中。否则拉不到项目.

在微服务的父pom文件下,执行clean test packet打包命令,就会将代码打包成一个个的jar文件,位置在target文件夹下。

构建好后的操作可以添加多个,因为我是微服务所以这里写一个具体的步骤出来。
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自动化构建并非一种构建方式,需要深入学习了解,如果你是运维人员那么可以继续了解,开发人员个人觉得知道一种构建方式就足以满足日常工作
边栏推荐
猜你喜欢
随机推荐
刷脸支付永远不会过时只会不断的变革
怎么开立普通商品期货账户
Think about the role of some documents
亚马逊测评自养号,如何进行系统性的学习?
刷脸支付用户主要优势是智能化程度高
How JS determines whether an object belongs to a class
Permission configuration, component value transfer
In the future, face brushing payment can occupy a lot of market share
解决MySQL JDBC数据批量插入慢的问题
什么是Alpha和Beta测试?
MySQL cancels the foreign key Association constraint
Fortex方达发布电子交易生态体系 与客户共享共赢
「PHP基础知识」PHP语句和语句块
1024 | 正式称为码农的第四年,初心犹在,继续前进
「PHP基础知识」定界符的使用
Basic layout of the page
路由的配置和前往登录首页进行发送请求
「PHP基础知识」PHP中的注释
Several ways of element positioning in page layout
洛谷超级玛丽游戏









