搭建Jenkins+springcloud一键自动部署

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

1、目的

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

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

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

2、操作环境

  • centos

  • jdk

  • maven

  • jenkins

  • gitee

  • git

  • docker

2、实现思路

1、生产环境
  1. 合并代码开发分支到master分支,准备发布最新代码

  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   d1376537549@qq.com
    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. 测试项目是否部署成功即可

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Jenkins是一个开源的持续集成工具,可实现自动化构建、测试和部署Spring Boot是一个基于Spring框架的轻量级Web应用开发框架,提供了快速构建Web应用的开发环境。Maven是一个基于项目对象模型(POM)的项目管理工具,可用于构建、依赖管理和部署。SVN是一种源代码管理工具,可用于协作开发和版本控制。 将这些工具组合起来,可实现一键打包发布。首先,在Jenkins中创建一个新的构建项目,并选择Maven项目类型。然后,配置SVN源代码管理,在构建触发器中设置定时执行构建任务。接着,在Maven构建中设置pom.xml文件路径和构建命令,确保能够成功构建Spring Boot应用程序。最后,将打包后的应用程序上传到远程服务器,并启动应用程序部署脚本。 通过这个过程,我们可以实现自动化构建、测试和部署,简化部署流程并提高生产效率。同时,通过与JenkinsSpring Boot、Maven和SVN的结合,可以实现更完整的持续集成和持续交付过程。 ### 回答2: JenkinsSpring Boot、Maven 和 SVN 都是非常流行的开发工具和框架。其中,Jenkins 是一个开放源代码的自动部署工具,它可以自动构建、测试和部署软件。Maven 是一个对象中心的开发工具,它可以自动编译、测试和部署软件。Spring Boot 是一个开发框架,它可以轻松地构建和部署 Web 应用程序。而 SVN 则是一个用于版本控制的工具,它可以帮助开发人员协同工作,追踪历史记录等。 对于这种情况,我们可以使用 Jenkins 进行自动部署和打包发布。下面是该过程的步骤: 1. 安装 Jenkins:首先,你需要安装 Jenkins。可以通过下载 Jenkins 的最新版本来安装它。 2. 配置 Maven:在 Jenkins 中,你需要配置 Maven。在 Jenkins 主页的“Manage Jenkins”选项中,可以找到“Global Tool Configuration”菜单。你需要在这里配置 Maven,包括指定 Maven 的路径和版本。 3. 配置构建步骤:在 Jenkins 中,你可以配置构建步骤。在此处你可以通过选择“构建一个 Maven 项目”选项并指定相关的 Maven 工程,然后再指定命令执行变量等。 4. 编写脚本:Jenkins 支持脚本编写,你可以通过写 shell 脚本或者 Windows 批处理来执行构建和部署操作,指定 Maven 打包的相关参数,自动化编译打包、部署到服务器等操作。 5. 配置 SVN:Jenkins 配置 SVN 的方式也非常简单,在 Jenkins 主页中,你可以通过创建装载 SVN 仓库的插件来配置 SVN。 6. 执行自动部署:最后,你需要执行自动部署。你可以在 Jenkins 中添加定时任务或在被检测到有 SVN 代码提交后进行自动化的部署。 总之,使用 Jenkins 自动部署的好处在于,它可以大大提高开发效率,减少手动操作,降低出错率,并且它可以随时进行监控和定位问题,有效的提高项目的质量,降低运维成本。 ### 回答3: Jenkins是一个开源的自动部署工具,可以非常方便地实现一键打包、构建和发布。在使用Jenkins进行springboot maven svn部署时,需要进行如下几个步骤: 1. 安装Jenkins 首先需要在服务器上安装JenkinsJenkins支持多种操作系统,可以根据具体情况进行选择安装方法。 2. 安装必要的插件 需要在Jenkins中安装必要的插件,主要包括Maven Integration plugin、Subversion plugin、Deploy plugin等,这些插件将帮助我们实现源代码的管理、打包构建以及自动部署。 3. 配置JenkinsJenkins中配置SVN、Maven的信息,包括源代码地址、Maven路径等。 4. 编写自动化脚本 根据实际需求,编写自动化脚本来实现构建、测试、打包以及部署,这些脚本可以使用Jenkins提供的Pipeline语法或者其他脚本语言来编写。 5. 执行构建任务 在Jenkins界面上,选择需要构建的项目,点击构建即可,Jenkins将根据自动化脚本执行编译、测试、打包和部署。 6. 验证部署结果 在Jenkins上查看构建结果,如果成功,则可以上线进行测试。如果失败,则需要查看详情并进行修复,以便下次构建成功。 总之,使用Jenkins进行springboot maven svn部署,可以大大提高开发效率,减少手动部署的工作量,不仅在测试、集成和部署等方面提供了更好的支持,还有利于提高应用程序的质量和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值