阿里云云效 流水线发布spring cloud项目及Vue项目

news2025/1/12 10:42:36

1. 单体spring boot 项目流水线主机部署

1.1 创建流水线

页面地址

我们选择模板,当然也可以自己新建一个

image-20230630101427198

1.2 添加流水线源

这里是根据自己的代码仓库决定的,我用的gitee,需要添加服务连接

image-20230630102937038

添加服务连接

image-20230630103216568

新建服务授权/证书 ==点击新建==自动跳转至gitee认证页面,同意授权即可

image-20230630103431611

授权过后自动返回并选择证书

image-20230630103522461

选择需要部署的代码仓库及分支,之后点击创建即可

  • 工作目录是流水线执行的目录不用管,或者需要自定义也可以

image-20230630104051274

1.3 Java构建并上传

首先我们本地打包后的目录,我们需要打包两个文件

  • gateway/target/gateway-0.0.1-SNAPSHOT.jar -部署包
  • gateway/deploy.sh-部署命令(具体内容在1.4中,先填写)

image-20230630105017681

将路径填写到打包路径上,需要上传几个就填几个,数量太多也可以直接上传目录

如:我只填写gateway/那么gateway目录下的所以文件都会被打包上传

image-20230630105819286

1.4 主机部署

1.4.1 添加新主机

因为我的主机是谷歌云的,我选择的是自有主机,如果是阿里云的主机选择阿里云ECS即可

image-20230630111155513

将命令在需要添加的主机上执行

image-20230630111430026

添加完成后,在此处就可以选择自己的主机了

image-20230630111510199

1.4.2 配置下载路径及执行用户

这里选默认就行

  • 下载路径就是我们在java构建上传后打好的包下载到我们部署主机的什么位置

image-20230630111634832

1.4.3 配置部署脚本

1.4.3.1 官方脚本部署

deploy.sh脚本-这是官方的示例启动脚本,但是我没有使用

  • APP_NAME:配置为我们的服务名称
  • APP_PORT:配置为我们的服务启动端口
  • JAR_NAME:打包后jar包的位置+名字
  • JAR_NAME:启动日志输出位置
  • HEALTH_CHECK_URL:健康检查URL
    • start()方法时需要健康检查(我没有就注释了)

如果需要使用官方示例启动脚本可以参照官方文档

#!/bin/bash

# 修改APP_NAME为云效上的应用名
APP_NAME=application


PROG_NAME=$0
ACTION=$1
APP_START_TIMEOUT=20    # 等待应用启动的时间
APP_PORT=8080          # 应用端口
HEALTH_CHECK_URL=http://127.0.0.1:${APP_PORT}  # 应用健康检查URL
APP_HOME=/home/admin/${APP_NAME} # 从package.tgz中解压出来的jar包放到这个目录下
JAR_NAME=${APP_HOME}/target/${APP_NAME}.jar # jar包的名字
JAVA_OUT=${APP_HOME}/logs/start.log  #应用的启动日志

# 创建出相关目录
mkdir -p ${APP_HOME}
mkdir -p ${APP_HOME}/logs
usage() {
    echo "Usage: $PROG_NAME {start|stop|restart}"
    exit 2
}

health_check() {
    exptime=0
    echo "checking ${HEALTH_CHECK_URL}"
    while true
        do
            status_code=`/usr/bin/curl -L -o /dev/null --connect-timeout 5 -s -w %{http_code}  ${HEALTH_CHECK_URL}`
            if [ "$?" != "0" ]; then
               echo -n -e "\rapplication not started"
            else
                echo "code is $status_code"
                if [ "$status_code" == "200" ];then
                    break
                fi
            fi
            sleep 1
            ((exptime++))

            echo -e "\rWait app to pass health check: $exptime..."

            if [ $exptime -gt ${APP_START_TIMEOUT} ]; then
                echo 'app start failed'
               exit 1
            fi
        done
    echo "check ${HEALTH_CHECK_URL} success"
}
start_application() {
    echo "starting java process"
    nohup java -jar ${JAR_NAME} > ${JAVA_OUT} 2>&1 &
    echo "started java process"
}

stop_application() {
   checkjavapid=`ps -ef | grep java | grep ${APP_NAME} | grep -v grep |grep -v 'deploy.sh'| awk '{print$2}'`
   
   if [[ ! $checkjavapid ]];then
      echo -e "\rno java process"
      return
   fi

   echo "stop java process"
   times=60
   for e in $(seq 60)
   do
        sleep 1
        COSTTIME=$(($times - $e ))
        checkjavapid=`ps -ef | grep java | grep ${APP_NAME} | grep -v grep |grep -v 'deploy.sh'| awk '{print$2}'`
        if [[ $checkjavapid ]];then
            kill -9 $checkjavapid
            echo -e  "\r        -- stopping java lasts `expr $COSTTIME` seconds."
        else
            echo -e "\rjava process has exited"
            break;
        fi
   done
   echo ""
}
start() {
    start_application
    #health_check
}
stop() {
    stop_application
}
case "$ACTION" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        stop
        start
    ;;
    *)
        usage
    ;;
esac

1.4.3.2 自定义脚本部署(本次采用)

因为没有健康检查,所以没办法知道程序是否真正构建成功需要到/home/gatewayStartLog查看部署日志

#删除上次部署包
rm -rf /home/admin/application/gateway/
echo "删除上次部署包"

#关闭指定端口的进程-这里是8089
kill -9 `netstat -nlp | grep :8089 | awk '{print $7}' | awk -F"/" '{ print $1 }'`
wait
echo "已停止8089"
#创建一个文件夹用户存放构建包解压后的文件
mkdir -p /home/admin/application
wait
echo "创建目录/home/admin/application"
#解压构建包
tar zxvf /home/admin/app/package.tgz -C /home/admin/application/
wait
echo "解压至/home/admin/application/"
#后台启动并打印启动日志
nohup java -jar /home/admin/application/gateway/target/gateway-0.0.1-SNAPSHOT.jar > /home/gatewayStartLog 2>&1 &
echo "部署成功"
#删除构建包,下次上传的构建包不会覆盖,所以必须删除
rm -rf /home/admin/app/package.tgz
echo "删除本次构建包"

部署日志

image-20230630171757186

2. 多个spring boot 项目流水线主机部署

2.1 多流水线部署

只需要重复章节1的操作重复部署多个服务即可

2.2 单流水线部署多个项目

此处我只示范启动两个项目gateway和admin-service,如果是多个再按照方法加就行

首先我们先复制之前的单流水线

image-20230630172223363

2.2.1 将admin-service的打包进构建包

image-20230630173036122

此时我们的构建包中就会有这两个jar包和deploy.sh

此时构建包中的内容如下

image-20230630173524538

  • gateway
    • target/gateway-0.0.1-SNAPSHOT.jar
    • deploy.sh
  • admin-service
    • target/admin-service-0.0.1-SNAPSHOT.jar
    • deploy.sh

2.2.2 修改自定义部署脚本

脚本新增内容如下

image-20230701101301859

rm -rf /home/admin/application/gateway/
rm -rf /home/admin/application/admin-service/
echo "删除上次部署包"
kill -9 `netstat -nlp | grep :8089 | awk '{print $7}' | awk -F"/" '{ print $1 }'`
kill -9 `netstat -nlp | grep :8090 | awk '{print $7}' | awk -F"/" '{ print $1 }'`
wait
echo "已停止8089"
echo "已停止8090"
mkdir -p /home/admin/application
wait
echo "创建目录/home/admin/application"
tar zxvf /home/admin/app/package.tgz -C /home/admin/application/
wait
echo "解压至/home/admin/application/"
nohup java -jar /home/admin/application/gateway/target/gateway-0.0.1-SNAPSHOT.jar > /home/gatewayStartLog 2>&1 &
echo "部署成功"

nohup java -jar /home/admin/application/admin-service/target/admin-service-0.0.1-SNAPSHOT.jar > /home/adminServiceStartLog 2>&1 &
echo "部署成功"

rm -rf /home/admin/app/package.tgz
echo "删除本次构建包"

执行成功后查看端口是否被占用

image-20230701101015679

3. Vue项目项目流水线部署

3.1 新建Node.js流水线并添加流水线源

image-20230701111013556

3.2 Node.js构建

3.2.1 构建脚本

image-20230701111915901

3.2.2 打包

部署vue我们只需要把打好包的dist目录放入nginx即可,所以我们只需要将dist目录打包上传

image-20230701111544472

3.3 主机部署

3.3.1 部署包下载路径

如果其他流水线部署在同一个服务器记得修改一下下载路径或者文件名不然有可能被覆盖,或者使用到其他项目的构建包

image-20230701112415246

3.3.2 部署脚本

主要目的就是将我们的构建包解压到nginx的配置路径

我这里修改了nginx的路径在/home/vue-project/,你只需要修改为你的就行了

rm -rf /home/vue-project/
mkdir /home/vue-project
#解压构建的dist压缩包到指定目录
tar zxvf /home/admin/vue/package.tgz -C /home/vue-project/
#删除dist压缩包
rm -rf /home/admin/vue/package.tgz

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/706725.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网安等保 | 主机安全之KylinOS银河麒麟服务器配置优化与安全加固基线文档脚本分享...

欢迎关注「全栈工程师修炼指南」公众号 点击 👇 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习! “ 花开堪折直须折,莫待无花空折枝。 ” 作者主页:[ https://www.weiyigeek.top ] 博客&…

线程不安全举例

1、举例说明集合类线程不安全 &#xff08;1&#xff09;查看源码可证明 看ArrayList源码 没有sync、lock&#xff0c;线程不安全 &#xff08;2&#xff09;创建多个线程写入读取数据 List<String> list new ArrayList<>(); for (int i 1; i <30 ; i) {n…

2023年Web安全学习路线总结!430页Web安全学习笔记(附PDF)

关键词&#xff1a;网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线、web安全攻防笔记、渗透测试路线图 网络安全的范畴很大&#xff0c;相较于二进制安全等方向的高门槛、高要求&#xff0c;Web安全体系比较成熟&#xff0c;在现阶段来看&#xff0c;但凡有自己…

k8s下安装redis

一、使用helm安装redis 执行以下命令添加redis的repo helm repo add bitnami https://charts.bitnami.com/bitnami 创建的master和replica pod的默认size是8Gi&#xff0c;如果k8s的node没有足够的空间&#xff0c;会抛出如下错误&#xff1a;default-scheduler 0/3 nodes …

安全防御 --- SSL VPN

附&#xff1a;无线项目介绍 SSL VPN 有浏览器的设备就可以使用SSL&#xff0c;进而使用SSL VPN。无需担心客户端问题&#xff0c;所以SSL VPN也称为无客户端VPN。SSL VPN在client to lan场景下特别有优势。 实际实现过程&#xff08;基于TCP实现&#xff09; &#xff08;1&…

Nginx SSL使用自制证书

1. 生成证书 keytool -genkey -v -alias <Alias别名> -keyalg RSA -keystore <KeyStore文件> -validity <有效期> keytool -genkey -v -alias nginx -keyalg RSA -keystore nginx.keystore -validity 36500 alias别名为 nginxkeystore文件为 nginx.keystore…

C/C++内存管理(内存分布、动态内存分配、动态内存分配与释放、内存泄漏等)

喵~ 内存之5大区&#xff08;栈区、堆区、静态区、常量区、代码区&#xff09;C/C中各自的内存分配操作符内存泄露?内存泄漏检测方法 内存之5大区&#xff08;栈区、堆区、静态区、常量区、代码区&#xff09; 1、栈区&#xff08;stack&#xff09;&#xff1a;由编译器自动分…

避雷投稿!这3本SCIE期刊处于On Hold状态!有剔除风险!

今年3月份科睿唯安剔除的大量期刊中&#xff0c;有几本期刊之前被WOS数据库标记为“On Hold”状态&#xff0c;后面也出现了一些期刊解除“On Hold”状态的情况。 目前&#xff0c;WOS数据库查询有3本SCIE期刊正处于“On Hold”状态&#xff0c;这是什么信号呢&#xff1f;对于…

org.apache.thrift.transport.TTransportException: GSS initiate failed

hive配置kerberos發現錯誤&#xff0c;就所有的配置都配好了&#xff0c;但是使用datagrip連接hive時報錯如下&#xff1a; org.apache.thrift.transport.TTransportException: GSS initiate failed 後面是沒有認證的原因&#xff0c;使用kinit 認證即可 還有一種情況是 我使…

7.1下周黄金非农数据是否会影响美联储七月暂停加息?

近期有哪些消息面影响黄金走势&#xff1f;下周黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周五(6月30日)&#xff0c;现货黄金价格收盘上涨&#xff0c;盘中一度升破1920美元关口。美国疲软的个人消费支出推动了美国国债收益率的下降&#xff0c;从而导致美…

libevent实践04:监听管道第二季

一 本次实例使用函数简介 事件集合初始化&#xff1a; struct event_base *event_init(void); 示例&#xff1a; struct event_base *base event_init(); 单个事件初始化 void event_set(struct event *ev, evutil_socket_t fd, short events,void (*callback)(evutil_s…

两小时快速入门 TypeScript 基础(二)面向对象

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;也会涉及到服务端&#xff08;Node.js 等&#xff09; &#x1f4c3;个人状态&#xff1a; 2023届本科毕业生&#xff0c;已拿多个前端 offer&#x…

【实战】 二、React 与 Hook 应用:实现项目列表 —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表1.新建文件2.状态提升3.新建utils4.Custom Hook 学习内容来源&#xff1a;React React Hook TS 最佳实践-慕课网 相对原教程&#xff0c;我在学习开始时&#xff08;2023.0…

【每天40分钟,我们一起用50天刷完 (剑指Offer)】第十二天 12/50

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

服务运营|MS 论文解读:MIR 增强的Benders 分解用于具有到达率不确定性的多类服务系统人员调度问题

推文作者&#xff1a;王畅&#xff0c;蔡君洋&#xff0c;Guo 编者按 劳动力调度是服务系统运营的一个重要应用场景&#xff0c;当系统中的服务集和客户集异构且客户到达率不确定时&#xff0c;劳动力调度问题会变得特别复杂。本文因此引入了一个两阶段的随机整数规划模型&…

【静态单元格 Objective-C语言】

一、预习QQ动态 1.我们今天,是三、到四个任务,第一个任务,就是这个,预习QQ动态 OK,看到这个效果了吗 这是咱们第一个任务,第一个任务,是实现这么一个效果, 一看这个,就肯定是个啥,UITableView吧, 是不是肯定是一个TableView啊 又能滚动,又能显示一行一行的数据…

Qt QGraphicsScene、QGraphicsView类实现仪表盘

Qt QGraphicsScene、QGraphicsView类实现仪表盘 【1】UI界面设计【2】效果【3】QGraphicsScene简介【4】QGraphicsEllipseItem简介【5】QGraphicsPolygonItem简介【6】QGraphicsLineItem简介【7】QGraphicsView简介【8】仪表源码头文件源码 【1】UI界面设计 【2】效果 【3】QGr…

OpenStack(T版)——对象存储(Swift)服务介绍与安装

文章目录 OpenStack(T版)——对象存储(Swift)服务介绍与安装安装和配置(controller)准备安装和配置Swift对象存储服务组件创建账户 Ring创建容器 Ring创建对象 RingSwift 存储系统的主配置文件修改文件属主 安装和配置(compute)准备配置Swift对象存储服务组件 验证(1)加载环境变…

《程序员的AI书_从代码开始》第二章 手工实现神经网络

文章目录 2.1 感知器2.1.1 从神经元到感知器2.1.2 实现简单的感知器 2.1 感知器 2.1.1 从神经元到感知器 2.1.2 实现简单的感知器 class Perception(object):def __init__(self,eta0.01,iterations10):self.lr etaself.iterations iterationsself.w 0.0self.bias 0.0sel…

Red Hat宣布限制访问源代码,尚有两种方式可获取

日前Red Hat宣布限制访问Red Hat Enterprise Linux(RHEL)源代码&#xff0c;而此举也将影响AlmaLinux 、Rocky Linux 等下游发行版。 随即Rocky Linux发布了名为《Keeping Open Source Open》的博文。文中是这样说的&#xff1a;    Red Hat的**ERP**服务条款 (TOS) 和最终…