devops学习(五) Jenkins 简单完成持续部署

在上一章结尾我们通过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

如上问题会在后续解决(≧∇≦)ノ

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值