前言
本文是在安装好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自动化构建并非一种构建方式,需要深入学习了解,如果你是运维人员那么可以继续了解,开发人员个人觉得知道一种构建方式就足以满足日常工作