搭建Jenkins+springcloud一键自动部署

用jenkins 实现项目自动部署笔记

1、目的

1、一键实现项目自动构建打包发布(用于生产环境)

2、实现代码提交到代码仓库立刻自动打包部署(用于测试环境)

3、本测试脚本代码在最后

2、操作环境

  • centos

  • jdk

  • maven

  • jenkins

  • gitee

  • git

  • docker

2、实现思路

1、生产环境

  1. 合并代码开发分支到master分支,准备发布最新代码

    扫描二维码关注公众号,回复: 14748635 查看本文章
  2. jenkins一键点击发布

  3. jenkins从代码仓库拉取最新代码

  4. 通过maven进行打包

  5. 把jar包打包成镜像,上传到自己的镜像仓库私服

  6. jenkins通知应用服务器拉取最新镜像

  7. 应用服务器拉取最新镜像,运行新容器

  8. 删除旧的容器和镜像

  9. 若发布失败回滚到上一个版本

2、测试环境、开发环境

  1. 提交代码到代码仓库dev或其他分支

  2. 自动触发jenkins构建项目

  3. jenkins从代码仓库拉取最新代码

  4. 最新代码拷贝到测试服务器

  5. 自动连接测试服务器进行maven打包

  6. 把jar包打包成镜像

  7. 删除旧的容器和镜像

  8. 通过新打包的镜像,运行新容器

3、前期准备

  1. 两台centos服务器可以互相ping通(或者两台虚拟机)

  2. 准备一个springcloud或者springboot项目,用于自动发布测试(我这里准备的是一个多模块项目,目录结构如下)

    图片

  3. jdk 1.8安装包,maven 3.6 啊包装包

  • jdk下载地址:https://wp.boytian.com/#/s/p8Fv 密码 tiantian123

  • maven下载地址:https://wp.boytian.com/#/s/2lc1 密码 tiantian321

4、安装jdk环境和maven环境

两台最好都安装,这里演示一台服务器

1、jdk环境安裝

  1. 创建jdk存放目录 mkdir -p /home/jdk

  2. 上传jdk到该目录下,进入该目录并解压,解压命令: tar -zxvf jdk-8u144-linux-x64.tar.g

    图片

2、maven安装

  1. 创建maven目录和maven仓库目录
  • mkdir -p /home/maven

  • mkdir -p /home/maven/repo

  1. 上传maven到/home/maven/目录下,进入该目录并解压,解压命令:tar -zxvf apache-maven-3.6.3

3、配置jdk和maven的环境变量

  1. 修改/etc/profile文件,命令 vim /etc/profile

  2. 若目录创建和我保持一致则在底部添加如下配置,否则自行修改即可

    #输入i 进入编辑模式
    
    # java配置
    export JAVA_HOME=/home/jdk/jdk1.8.0_144
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/bin
    
    #maven 配置
    export MAVEN_HOME=/home/maven/apache-maven-3.6.3
    export PATH=$MAVEN_HOME/bin:$PATH
    
    
  3. 刷新配置使之生效

  • source /etc/profile
  1. 测试环境是否生效 , 命令 java mvn -v

    图片

  2. 另一台服务器主机同样配置

5、配置免密登录(两台服务器互相免密登录)

  1. 输入ssh-keygen -t rsa连敲三个回车

  2. 输入ssh-copy-id -i ~/.ssh/id_rsa.pub ip地址 回车

  3. 输入第二台服务器密码验证即可实现免密登录

  4. 同样的方式配置第二台服务器免密登录第一台服务器

参考:https://blog.csdn.net/u013415591/article/details/81943189

6、在第一台服务器上安装jenkin服务

1、在第一台服务器安装依次执行以下命令
  • sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

  • sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

  • yum install jenkins

  • ln -s /home/jdk/jdk1.8.0_144/bin/java /usr/bin/java

  • sudo ln -s /home/maven/apache-maven-3.6.3 /usr/local/maven

  • systemctl start jenkins

(1、2、3)是安装jenkins,(4、5)是软连接环境命令到usr目录下(6)启动Jenkins

2、修改jenkins的权限为root权限,方便以后执行命令权限不足问题
# 打开配置文件
vim /etc/sysconfig/jenkins
# 修改$JENKINS_USER
$JENKINS_USER="root"

#修改Jenkins相关文件夹用户权限
chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins

#重启
systemctl restart jenkins

图片

图片

1619053352839

7、访问jenkins服务进行一些基础配置

  1. 浏览器访问:ip:8080

图片

1618994599246

  1. 到服务器获取密码 命令:cat /var/lib/jenkins/secrets/initialAdminPassword

图片

1618995408605

  1. 安装自定义插件

    图片

图片

1618995513826

  1. 创建管理员账号

    图片

  2. 点击完成之后重启一下jenkins服务,命令:systemctl restart jenkins

  3. jenkins配置全局jdk和maven环境

    图片

图片

1618996436490

图片

1618996573737

图片

1618996616938

  1. 安装gitee插件,推送代码到gitee主要由此插件进行触发

    图片

  2. 配置gitee交互凭证

    图片

    图片

    图片

  3. 全局配置gitee

    图片

8、准备部署项目

  1. 创建gitee代码仓库

图片

1619050043509

9、配置jenkins开始配置自动部署

  1. 创建一个自动构建流程 选择自由风格

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tAOlG9N1-1637893426234)(https://mmbiz.qpic.cn/mmbiz_png/0bmE6dS9CgJQUEbkCyje2ajToYicZGj4rVheOTDiahK1yzXSvdpwsAOsNeiaibia91ZwxkAG0QLEpv6hJmdNEGIeksA/640?wx_fmt=png)]

1618997421632

  1. 选择参数化构建

    定义一些变量,这些变量在脚本中使用图片

图片

1619050337908

图片

1619054535420

3、配置git仓库

图片

1619050733823

图片

1619050777451

图片

1619050871896

  1. 构建自动触发器,配置jenkins图片

  2. 构建触发器,配置gitee

图片

1619051250412

  1. 测试构建是否生效

    配置jenkins添加构建步骤图片

图片

1619051394272

点击 应用 保存

  1. 测试手动构建

图片

1619051457074

图片

1619051489297

图片

1619051513195

  1. 测试自动构建

    手动push代码看看是否会出发自动构建

    图片

    图片

    图片

    图片

10、自动化部署脚本

自动构建配置完成,接下来编写一个脚本进行真正的部署项目

脚本内容如下,目前实现了功能但还是不完善,后期完善

  1. 项目部署脚

    
    # 项目模块统一变量设置
    
    # 公共服务
    CLOUD_CONTAINER="cloud"
    CLOUD_IMAGE="cloud_server"
    CLOUD_PORT=8002
    # 微信小程序模块
    FAMILY_CONTAINER="family"
    FAMILY_IMAGE="family_server"
    FAMILY_PORT=8003
    # 鉴权模块
    AUTH_CONTAINER="auth"
    AUTH_IMAGE="auth_server"
    AUTH_PORT=8004
    # 网关
    GATEWAY_CONTAINER="gateway"
    GATEWAY_IMAGE="gateway_server"
    GATEWAY_PORT=9999
    
    
    # 删除应用服务器旧的代码(在第二个服务器创建好/home/project/fym-platform/目录,否则报错)
    ssh -Tq ${host} <<EOF
    rm -rf /home/project/fym-platform/*
    EOF
    
    # 拷贝新代码到应用服务器
    echo "拷贝代码开始..."
    scp -r ./* ${host}:/home/project/fym-platform
    echo "拷贝代码结束..."
    
    # 登录到项目服务器执行命令
    ssh -Tq ${host} <<EOF
      cd /home/project/fym-platform
     echo "项目开始构建打包"
      mvn clean package -Dmaven.test.skip=true -P${environment}
    
     echo "jar文件拷贝"
      mkdir -p /web/project/fym-platform
      cp -r gateway-server/target/gateway-server*.jar  Dockerfile /web/project/fym-platform/
      cp -r fym-service/*/*/target/*server*.jar /web/project/fym-platform/
    
     echo "=============== 开始部署容器 ==============="
      # 停止并删除旧的容器
      docker ps -a|grep $CLOUD_CONTAINER &&  docker stop $CLOUD_CONTAINER && docker rm $CLOUD_CONTAINER || echo "not exist"
      docker ps -a|grep $GATEWAY_CONTAINER &&  docker stop $GATEWAY_CONTAINER && docker rm $GATEWAY_CONTAINER || echo "not exist"
      docker ps -a|grep $FAMILY_CONTAINER &&  docker stop $FAMILY_CONTAINER && docker rm $FAMILY_CONTAINER || echo "not exist"
      docker ps -a|grep $AUTH_CONTAINER &&  docker stop $AUTH_CONTAINER && docker rm $AUTH_CONTAINER || echo "not exist"
    
     # 删除旧的镜像
      docker images |grep  $CLOUD_IMAGE  && docker rmi -f $CLOUD_IMAGE  || echo  "not exist"
      docker images |grep  $GATEWAY_IMAGE && docker rmi -f $GATEWAY_IMAGE || echo  "not exist"
      docker images |grep  $FAMILY_IMAGE && docker rmi -f $FAMILY_IMAGE || echo  "not exist"
      docker images |grep  $AUTH_IMAGE && docker rmi -f $AUTH_IMAGE || echo  "not exist"
    
     # 构建新的镜像
      docker build --build-arg JAR_FILE=cloud-server-1.0.jar -t $CLOUD_IMAGE  /web/project/fym-platform/
      docker build --build-arg JAR_FILE=gateway-server-1.0.jar  -t $GATEWAY_IMAGE /web/project/fym-platform/
      docker build --build-arg JAR_FILE=family-server-1.0.jar  -t $FAMILY_IMAGE /web/project/fym-platform/
      docker build --build-arg JAR_FILE=auth-server-1.0.jar  -t $AUTH_IMAGE /web/project/fym-platform/
    
     # 运行镜像容器
      docker run -it -d --name $CLOUD_CONTAINER -p $CLOUD_PORT:$CLOUD_PORT $CLOUD_IMAGE
      docker run -it -d --name $GATEWAY_CONTAINER -p $GATEWAY_PORT:$GATEWAY_PORT $GATEWAY_IMAGE
      docker run -it -d --name $FAMILY_CONTAINER -p $FAMILY_PORT:$FAMILY_PORT $FAMILY_IMAGE
      docker run -it -d --name $AUTH_CONTAINER -p $AUTH_PORT:$AUTH_PORT $AUTH_IMAGE
    EOF
    
    echo "部署成功"
    
    
    
  2. jar镜像打包脚本

    FROM primetoninc/jdk:1.8
    ARG JAR_FILE
    MAINTAINER   [email protected]
    COPY ${JAR_FILE} app.jar
    ENV JAVA_OPTS="-Xmx512m -Xms512m -Xmn512m -Xss256K -XX:SurvivorRatio=8 -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -XX:+UseConcMarkSweepGC -XX:ConcGCThreads=4 -XX:+CMSClassUnloadingEnabled -Dfile.encoding=UTF-8 -XX:+DisableExplicitGC -XX:+PrintGC -XX:+PrintGCTimeStamps -Xloggc:./gc.log"
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
    
    
    
  3. 修改jenkins刚才shell配置如下

    #!/bin/bash
    chmod u+x run.sh # 一行是赋予脚本执行权限
    ./run.sh #一行是执行脚本
    
    

图片

1619052201097

11、测试自动构建和手动构建

  1. 手动触发构建(提交代码自动触发也一样),查看输出控制台,已经开始下载maven依赖开始打包

图片

1619053964419

图片

1619054134274

图片

1619054194717

  1. 查看第二台服务器docker镜像

图片

1619054218370

图片

1619054239768

  1. 查看nacos服务启动状态

    图片

  2. 测试项目是否部署成功即可

猜你喜欢

转载自blog.csdn.net/weixin_44078653/article/details/121554142