在上一章结尾我们通过jenkins自动化做编译打包后得到了一个jar包,我们要将他部署到远程服务器上
一、jenkins关联远程服务器
既然我们想要部署到远程服务器,那么首先要和远程的服务端建立链接才行
我们在部署jenkins的时候装过插件Publish Over SSH 就是用来定义远程主机的如果是跟着前面做的应该都创建了,如果没有则点击系统管理--系统配置找到Publish over SSH
1、添加构建完成后操作
说明
ssh server //定义的远程主机,我们在部署jenkins时定义的,不记得的回去翻一翻
name: test //当时定义的主机名称
source files: target/*.jar
//需要将那些文件发送到远程服务器上
//这个路径是以当前jenkins的项目目录为路径去指定的
//相当于我们切换到了/var/jenkins_home/workspace/mytest目录下指定的文件
//我们要将target/目录下的所有jar包发送过去
//远程主机默认接收的目录是在定义主机时指定的/usr/local/test/
//并且在/usr/local/test会拷贝文件的上层目录target/xxx.jar
这样一来我们就将jenkins主机下mytest项目中的jar包发送到了远程服务器的/usr/local/test目录下
2、构建验证
如上,当jenkins构建后jar包就发送到了目标服务器上,使用shell就可用启动
但是存在一个问题,我们上面直接跑个jar包那就和传统形式没区别了
为了实现服务的持续部署高可用性等等,我们使用K8环境部署
二、构建业务镜像并部署
我们上面的程序是一个jar包,那么构建用的基础镜像就必须包含java环境
1、定义Dockerfile
//我们回到idea上创建一个新的目录docker
mkdir docker
vi docker/Dockerfile
FROM daocloud.io/library/java:8u40-jdk
COPY mytest.jar /usr/local/
WORKDIR /usr/local/
CMD java -jar mytest.jar
2、定义部署服务yaml文件
vi docker/mytest-dev.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mytest
namespace: devops
spec:
selector:
matchLabels:
app: mytest-init
template:
metadata:
labels:
app: mytest-init
spec:
containers:
- name: mytest
image: mytest:v1.0.1
ports:
- name: http
containerPort: 9999
---
apiVersion: v1
kind: Service
metadata:
name: mytest-svc
namespace: devops
spec:
ports:
- port: 9999
targetPort: http
nodePort: 30005
selector:
app: mytest-init
type: NodePort
文件定义好之后,记得要推送到gitlab上面
3、配置jenkins"构建后" 操作
source files: target/*.jar docker/*
exec:
cd /usr/local/test/docker
mv ../target/*.jar ./
docker build -t mytest:v1.0.1 .
kubectl apply -f mytest-dev.yaml
docker image prune -f
配置说明
source files: target/*.jar docker/*
//这里在之前配置的后面添加docker/*
//这样我们在发送文件到远程你主机的时候会将docker目录及以下的文件都发过去
//EXEC 要执行的命令
cd /usr/local/test/docker
mv ../target/*.jar ./
docker build -t mytest:v1.0.1 .
kubectl apply -f mytest-dev.yaml
docker image prune -f //清理虚悬镜像
//说明
//第一个路径必须是绝对路径,虽然我们默认登陆的是/usr/local/test
//但如果使用非绝对路径就会找不到
//报ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [1]]
演示
4、构建测试访问
如上,我们已经完成了一次部署可以访问页面了,但是还存在很多问题
1、我这里的单节点还看不出来,如果要部署的节点有很多,我们不能在所有节点上都构建镜像
//需要搭建harbor仓库
2、每次我们修改代码中的输出信息并不会去更新实际部署的应用
//后续应该用滚动重启而不是更新,相同镜像标签情况下apply无法完成更新
3、 关于代码版本管理的问题
//gitlab tag --jenkins
如上问题会在后续解决(≧∇≦)ノ