使用Jenkins部署SpringBoot项目

193 阅读4分钟

前置条件:

  1. 需要已经安装好Java的SDK,可以参考Centos安装JDK
  2. 需要已经安装好Maven,可以参考Centos安装Maven
  3. 需要已经安装好Jenkins,可以参考Centos安装Jenkins

一、查看Centos版本

本文使用的机器为Centos8,查看centos版本的命令如下:

cat /etc/redhat-release

二、配置Jenkins

以下步骤有自动安装的注意取消自动安装,我们使用自己安装的方式方便以后使用和配置。

  1. 配置maven:在系统管理-->全局工具配置-->Maven配置中配置本机maven的settings.xml路径: image.png
  2. 配置JDK:在系统管理-->全局工具配置-->JDK中配置本机JDK的JAVA_HOME路径: image.png
  3. 配置GIT:在系统管理-->全局工具配置-->Git中配置本机Git可执行文件的路径(本文的Git是通过yum install -y git命令进行安装的,可执行文件路径可以用whereis -b git命令进行查看): image.png
  4. 配置MAVEN_HOME:在系统管理-->全局工具配置-->Maven中配置本机MAVEN_HOME的路径: image.png
  5. 配置Publish over SSH:在系统管理-->系统配置-->Publish over SSH中配置,如果没有则在系统管理-->插件管理中进行下载: image.png image.png image.png
    • 图中没有的不填写
    • Path to key:写上生成的ssh路径:/root/.ssh/id_rsa
    • Name:填写一个名字
    • Hostname:填写服务器的IP地址
    • Username:填写SSH登录的账号名
    • Remote Directory:填写远程路径用于存放SSH Server存放一些文件
    • Passphrase / Password:填写SSH登录的密码
    • 点击Test Configuration测试是否能够SSH连接成功,出现success表示连接成功,然后保存退出。

三、项目部署

  1. 创建任务:点击新建任务进行创建 image.png
  2. 源码管理:配置构建代码的下载地址,我用的是腾讯的Coding所以选择Git,输入代码路径、选择证书,不存在的话点击添加,选择Username with password,输入Coding的用户名密码进行设置,然后选择设置完的证书。在Branches to build中设置构建的分支路径,其他设置默认即可。 image.png image.png
  3. 构建触发器:这里可以设置触发构建的策略,设置在什么情况下触发构建。由于我们当前构建为手动,所以这里不设置触发选项。 image.png
  4. 构建环境: image.png
    • Delete workspace before build starts:设置构建之前删除当前任务的工作空间,即先删除所有之前的代码再进行构建
    • Use secret text(s) or file(s):设置构建过程中要使用的凭证,选中后需要设置对应的凭证
    • Send files or execute commands over SSH before the build starts:在构建启动之前,通过SSH发送文件或执行命令
    • Send files or execute commands over SSH after the build runs:在构建运行之后,通过SSH发送文件或执行命令
    • Add timestamps to the Console Output:向控制台输出添加时间戳
    • Inspect build log for published Gradle build scans:检查已发布的Gradle构建扫描的构建日志
    • Terminate a build if it's stuck:如果构建阻塞了,就终止它
    • With Ant:为Jenkins准备一个使用Apache Ant运行构建的环境。注释特定于ant的输出,以显示执行的目标。可选地设置Ant和/或JDK安装。
  5. 构建:设置构建的方式和执行的命令,当前设置为使用maven构建,构建的命令参数为clean install。如果maven版本不存在则需要在系统管理-->全局工具配置中设置。 image.png
  6. 构建后操作:代码下载并编译打包完成后执行的操作,用来执行重启项目的操作。当前设置的操作是构建完成后把打好的jar包放到目标路径下并执行远程shell脚本bash /opt/horizon/bin/restart.shimage.png
    • Name:在Jenkins的全局配置中配置的SSH服务器,对应的是要构建项目的服务器。
    • Source files:设置要上传的jenkins服务器任务的根路径下那个文件,例如:
    1. jenkins项目存放路径为/root/.jenkins/workspace/  
    2. 新建的任务名称为horizon,所以新建的任务工作空间路径为/root/.jenkins/workspace/horizon/
    3. 打好包的项目存放在/root/.jenkins/workspace/horizon/target/horizon-1.0.0.jar
    4. 所以Source files指的是/root/.jenkins/workspace/horizon/路径下的文件
    
    • Remove prefix:指的是保存的文件去除掉Source files中的前缀信息,例如保存为horizon-1.0.0.jar,所以需要去除前缀target/
    • Remote directory:上传到Name中选择的服务器中的哪个路径下
    • Exec command:上传完成后需要执行的脚本或者命令,该脚本放于/opt/horizon/bin路径下,/opt/horizon为自己创建的项目路径,脚本命令如下:
    #!/bin/bash
    # 脚本的意思为构建的时候先kill掉老项目,然后再重启新项目
    # 必须要加这一行,因为jenkins与服务器上的环境变量不一致,不刷新环境变量会导致无法启动java进程
    source /etc/profile
    
    echo "stop service..."
    old_pid=`ps -ef | grep "horizon-1.0.0.jar" | grep -v grep | awk '{print $2}'`
    echo "kill old pid: $old_pid"
    kill -9 $old_pid
    old_pid=`ps -ef | grep "horizon-1.0.0.jar" | grep -v grep | awk '{print $2}'`
    if [ -n "$old_pid" ]; then
        echo "stop service fail!"
    else
        echo "stop service success!"
    fi
    
    source_file=/root/.jenkins/workspace/horizon/target/horizon-1.0.0.jar
    target_dir=/opt/horizon/
    echo "cp $source_file $target_dir"
    cp $source_file $target_dir
    
    chmod 774 /opt/horizon/horizon-1.0.0.jar
    
    echo "start service..."
    nohup java -jar /opt/horizon/horizon-1.0.0.jar >/dev/null 2>&1 &
    new_pid=`ps -ef | grep "horizon-1.0.0.jar" | grep -v grep | awk '{print $2}'`
    echo "new pid: ${new_pid}"
    if [ -n "$new_pid" ]; then
        echo "start service success!"
    else
        echo "start service fail!"
    fi
    
  7. 测试:进入主页可以看到刚才新增的任务horizon,点击名称进入任务,再点击立即构建image.png