前后端分离项目+jenkins+pipeline实现部署

之前实现了原生部署,进一步肯定就是实现自动化部署,这篇主要实现的是自动构建,不涉及docker,集群,多分支,如果后面有需要再更新。

首先服务器上自己安装好Jenkins,nginx,java环境,网上很多,大多数都可以跟着实现。

后端部署

0.配置jenkins工具环境

  • 配置部署服务器的信息,Dashboard》Manage Jenkins》System,用户名,密码,ip地址

    

这里测试连接成功的话就算完成。

  • Dashboard 》 Manage Jenkins》Tools,在这个页面下配置jdk和maven,选择你工程使用的版本

1.在工程文件的根目录上创建Jenkinsfile,添加如下内容

#!groovy
pipeline {
    agent any
    environment {
        GITURL = 'https://gitee.com/rookie_a/self-blog.git'//你的git地址
        SERVER = 'huaweiyun1'//你的部署服务器在Jenkins上设置的名称。
        REMOTEDIR = '/home/data'//指定的目录
        SOURCE_FILE = '/target/helloworldBackend-1.0-SNAPSHOT.jar'//执行文件,你打包的jar文件名
        PREFIX = 'target'//去除的前缀
        COMPLETE_EXEC_SHELL = '/home/kailiwenwen0220@/springboot-demo.sh restart'//指定的执行脚本
    }
    tools {
        maven "mvn"//配置的maven名称
        jdk 'jdk8'//配置的jdk名称
    }
    stages {
        stage('获取代码') {
            steps {
                // 拉取代码
                git branch: 'master',
                        credentialsId: 'root',
                        url: env.GITURL
            }
        }
        stage('打印环境变量') {
            steps {
                sh 'printenv'
            }
        }
        stage('编译代码') {
            steps {
                sh 'mvn clean package -Dmaven.test.skip=true'
            }
        }
        stage('应用分发') {
            steps {
                sshPublisher(
                        publishers: [
                                sshPublisherDesc(
                                        configName: env.SERVER,
                                        transfers: [
                                                sshTransfer(
                                                        execCommand: env.COMPLETE_EXEC_SHELL,
                                                        execTimeout: 120000,
                                                        flatten: false,
                                                        remoteDirectory: env.REMOTEDIR,
                                                        removePrefix: env.PREFIX,
                                                        sourceFiles: env.SOURCE_FILE
                                                )
                                        ]
                                )
                        ]
                )
            }
        }
    }
}

2.编写shell脚本,上面配置文件里调用了一个shell文件,这里实现,springboot-demo.sh

#!/bin/sh
#替换这里jar包的路径,根据实际修改
APP_NAME=/var/lib/jenkins/workspace/hellobackend-test/helloworldBackend-1.0-SNAPSHOT.jar

#使用说明,用来提示输入参数
usage() {
    echo "Usage: $0 [start|stop|restart|status]"
    exit 1
}
linge(){
    RETVAL=$?
    if [ $RETVAL -eq 0 ];then
        echo "${APP_NAME} is $1"
    else
        echo "${APP_NAME} is $1"
    fi
}
#检查程序是否在运行
is_exist(){
  pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
  #如果不存在返回1,存在返回0
  if [ -z "${pid}" ]; then
   return 1
  else
    return 0
  fi
}

#启动方法
start(){
  is_exist
  if [ $? -eq 0 ]; then
    echo "${APP_NAME} is already running. pid=${pid}"
  else
    nohup java -jar ${APP_NAME} > /dev/null 2>&1 &
    linge start
  fi
}

#停止方法
stop(){
  is_exist
  if [ $? -eq "0" ]; then
    kill -9 $pid
    linge stop
  else
    echo "${APP_NAME} is not running"
  fi
}

#输出运行状态
status(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is running. Pid is ${pid}"
  else
    echo "${APP_NAME} is NOT running."
  fi
}

#重启
restart(){
  stop
  sleep 5
  start
}

#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    usage
    ;;
esac

编写完成上传到服务器,位置在Jenkins的配置文件里已经指定过了。/home/kailiwenwen0220@/springboot-demo.sh

3.创建流水线

这里和推送代码自动更新有关,如果你不希望更新代码后自动更新,这里和下一步就不要设置。将此图里的url记录下来

生成密码,我的这里代码仓库使用的是gitee,用别的也是同样的流程,打开你的代码仓库。

密码,和url就是前两个截图里说明的。

注意,私有仓库要添加凭证的 ,不然会报错。

保存后执行立即构建就可以了。

遇到过的问题

执行构建报127的警告:我遇到的是因为脚本上传的位置和文件中指定的不一样,或者是脚本中指定的jar包位置不对,jar包的生成位置可以在构建的控制台里看到,指定生成位置这个不知道为什么没有成功,有大神可以指点我一下。

执行构建报126的警告:权限不能调用shell脚本,修改脚本的使用权限,chmod -r 777 xxx.sh

jdk指向不明确:在流水线控制台里找到jdk位置,将bin所在层级的所有文件向上平移一级。

前端的构建

整体流程和后端基本没有区别,只有jenkins的配置文件和脚本有区别,不过要先配置好nodejs的部分,插件市场安装插件,配置版本和名称。

Jenkinsfile

#!groovy
pipeline {
    agent any
    environment {
        GITURL = 'https://gitee.com/rookie_a/hello-fronted.git'
        SERVER = 'huaweiyun1'
        REMOTEDIR = '/home/data'
        SOURCE_FILE = '/dist/*'
        PREFIX = 'dist'
        COMPLETE_EXEC_SHELL = '/home/kailiwenwen0220@/hellofronted.sh'
    }
    tools {
        nodejs 'node20'
    }
    stages {
        stage('获取代码') {
            steps {
                // 拉取代码
                git branch: 'master',
                        credentialsId: 'root',
                        url: env.GITURL
            }
        }
        stage('打印环境变量') {
            steps {
                sh 'printenv'
            }
        }
        stage('编译代码') {
            steps {
                sh 'npm install'
                sh 'npm run build'
            }
        }
        stage('应用分发') {
            steps {
                sshPublisher(
                        publishers: [
                                sshPublisherDesc(
                                        configName: env.SERVER,
                                        transfers: [
                                                sshTransfer(
                                                        execCommand: env.COMPLETE_EXEC_SHELL,
                                                        execTimeout: 120000,
                                                        flatten: false,
                                                        remoteDirectory: env.REMOTEDIR,
                                                        removePrefix: env.PREFIX,
                                                        sourceFiles: env.SOURCE_FILE
                                                )
                                        ]
                                )
                        ]
                )
            }
        }
    }
}

shell脚本

rm -rf /home/kailiwenwen0220@/dist/*
cp /var/lib/jenkins/workspace/blog-froted-test/dist   /home/kailiwenwen0220@/dist/
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值