云效使用流水线自动部分springboot

阿里云效流水线部署springboot项目 本来这三个脚本是放在springboot项目中的,打算和jar包一起作为构建物上传,但是填写多个打包路径后在服务器上解压时路径没解决,只好提前放在服务器上。3.java构建上传,其他都可以默认,打包路径填写jar包路径.(切记不要填写多个打包路径,否则后面会解压到别的目前,暂未解决)deploy.sh、compose.yaml、Dockerfile这三个脚本要提前放到服务器对应的目录。1.新建流水线,选中部署到阿里云ECS。4.主机部署,部署脚本是解压和执行脚本。 阅读详情

云效创建项目应用以及流水线主要有以下三个步骤:

  1. 创建项目

    这个很简单略过了。。

  2. 创建流水线

图片.png

图片.png

如果项目不是云效的可以点击添加流水线源:

图片.png

配置流水线源:

图片.png

构建:

图片.png

图片.png

这里说一下deploy.sh脚本:

官方提供的例子:https://code.aliyun.com/code-template/spring-boot?spm=a2c4g.11186623.0.0.1bb17837NG6aBW

deploy.sh

#!/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
HEALTH_CHECK_FILE_DIR=/home/admin/status   # 脚本会在这个目录下生成nginx-status文件
APP_HOME=/home/admin/${APP_NAME} # 从package.tgz中解压出来的jar包放到这个目录下
JAR_NAME=${APP_HOME}/${APP_NAME}.jar # jar包的名字
JAVA_OUT=${APP_HOME}/logs/start.log  #应用的启动日志

# 创建出相关目录
mkdir -p ${HEALTH_CHECK_FILE_DIR}
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

需要注意脚本在ubuntu服务器下报unexpected operator 报错问题

解决方法一

将ubuntu 默认的 shell 链接的 dash 改成传统的 bash
执行如下命令:

sudo dpkg-reconfigure dash1

在弹出的框中选 no

解决方法二

将 == 改成 = ,因为在 dash 中默认的判断语句是 =

部署:

图片.png

新建主机组,可以是阿里服务器或其他三方服务器

图片.png

图片.png

部署脚本需要注意

图片.png

 附上部署脚本:

# 部署脚本会在部署组的每台机器上执行。一个典型脚本逻辑如下:先将制品包(在下载路径中配置的下载路径)解压缩到指定目录中,再执行启动脚本(通常在代码中维护,如示例中deploy.sh)。关于这个例子的详细解释见 https://help.aliyun.com/document_detail/153848.html \n\n
# tar zxvf /home/admin/app/package.tgz -C /home/admin/app/\n # sh /home/admin/app/deploy.sh restart\n 
# 如果你是php之类的无需制品包的制品方式,可以使用git clone 或者 git pull将源代码更新到服务器,再执行其他命令 \n 
# git clone ***@***.git\n

mkdir -p /home/admin/application
tar zxvf /home/admin/app/package.tgz -C /home/admin/application/
sh /home/admin/application/deploy.sh restart

根据需要还可以配置通知方式

最终效果

图片.png

图片.png

图片.png

附上最终脚本

#!/bin/bash

# 修改APP_NAME为云效上的应用名
APP_NAME=hbydjl.com


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

# 创建出相关目录
mkdir -p ${HEALTH_CHECK_FILE_DIR}
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"
                # 解决 unexpected operator 报错问题 方式1.将ubuntu 默认的 shell 链接的 dash 改成传统的 bash(sudo dpkg-reconfigure dash) 或方式2:将 == 改成 = ,因为在 dash 中默认的判断语句是 =
                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() {
    # 需要动态加载项目配置文件
    rm -rf ${JAR_NAME}
    cp /home/admin/application/target/xxxx.jar ${JAR_NAME}
    cd ${APP_HOME}/
    echo "starting java process"
    nohup java -jar ${APP_NAME}.jar > ${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

【云效】使用流水线进行应用部署 流水线」,又名「Flow」,是阿里云「云效」产品矩阵中的一款企业级自动化研发交付工具。它提供了灵活易用的持续集成、持续验证和持续发布功能,旨在帮助企业高质量、高效率地交付业务。流水线充当了持续交付的工具,通过构建自动化、集成自动化、验证自动化和部署自动化的过程,实现了从开发到上线的持续交付。 阅读详情

相关推荐

云效Pipeline as Code实践:CI/CD流水线代码化与效率提升

CI/CD是现代软件开发的核心实践,而Pipeline as Code(流水线即代码)正在成为技术新范式。通过将传统可视化编排转换为YAML等代码化配置,开发者可以实现基础设施即代码(IaC)的延伸。其技术原理是通过声明式语法定义构建、测试、部署的全流程,使配置具备版本控制、团队协作和环境一致性等特性。在微服务和混合云场景下,这种模式能显著提升多环境部署标准化和资源调度效率。以阿里云效Flow为例,通过模版化复用和参数化设计,企业可实现构建时间缩短70%以上,同时确保安全合规。对于需要实现DevOps转型的

weixin_30861797的博客 432

CI/CD---使用新版云效流水线自动部署Java微服务项目

使用云效流水线部署个人项目,太妙了,不需要安装或者购买任何软件,直接在线一键部署。只需要第一次部署成功,后续都只要提交代码后,点击运行流水线就可以

yuanchangliang的博客 3121

ACK 部署 SpringBoot 应用 3 大常见故障排查:镜像拉取失败、服务不可访问、流水线报错

本文详细解析了在阿里云容器服务ACK上部署SpringBoot应用时常见的三大故障:镜像拉取失败、服务不可访问和流水线报错。通过系统化的排查路径、实用命令和解决方案,帮助开发者快速定位和解决问题,提升部署效率和稳定性。特别针对ACK环境提供了专业的网络配置和权限管理建议。

weixin_33883104的博客 334

阿里云云效部署springboot+vue服务脚本

阿里云云效部署springboot+vue服务脚本

xiaogg3678的专栏 472

spring-boot+阿里云云效

        这俩天应公司需求,查看了下云效这款工具,可以说真的很方便。简单配置后,能够自动部署项目到关联的服务器上。并且,在说创建的一个应用内,能够进行任务、需求、缺陷、迭代等等方面的任务分配。这些功能在此不作详细介绍,因为这些具备功能的网址很多,且操作类似简单。在这提到,是说明云效集成了这一系列的功能,可以简便的推动一个项目敏捷开发的进度。接下来,我们一起来看下他的“流水线”功能,能够自动帮...

in_christ的博客 1571

高效使用Java构建工具|Maven篇|云效工程师指北

高效使用Java构建工具|Maven篇。众所周知,当前最主流的Java构建工具为Maven/Gradle/Bazel,针对每一个工具,我将分别从日常工作中常见的场景问题切入,例如依赖管理、构建加速、灵活开发、高效迁移等,针对性地介绍如何高效灵活地用好这3个工具。

BYvonne的博客 4742

云效流水线Flow部署SpringBoot项目到阿里云ECS

用Jenkins部署项目的时候,需要安装JDK、Jenkins、配置Jenkins等等许多步骤。流水线Flow相比之下就方便了许多,提供了简洁好看的界面,方便操作之外也省去了很多配置的时间。下面是我替换Jenkins改为流水线Flow部署的过程,第一次操作,记录一下。

weixin_52519560的博客 3080

阿里云效流水线进阶玩法:用k8s ConfigMap动态管理Java应用配置(2024最新版)

本文详细介绍了如何利用阿里云效流水线结合Kubernetes ConfigMap实现Java应用配置的动态管理。通过外挂式配置管理,开发者可以轻松实现配置与代码的分离,提升部署效率和配置变更的灵活性。文章包含全自动部署流程设计、多环境配置管理策略以及配置热更新等进阶技巧,帮助团队优化微服务架构下的配置管理。

weixin_30952535的博客 383

如何通过云效进行K8s部署

其中,在构建完之后,生成Docker镜像,并自动上传至应用镜像仓库,在部署阶段(测试环境的部署和生产环境的部署)时,获取当前流水线实例构建出来的镜像版本,通过K8s进行容器编排部署。相较于传统的部署方式,Kubernetes可以更快的更新新版本,打包应用,所有应用都是容器,可以轻松做到跨开发、测试和生产的环境一致性;标签填入“${DATETIME}”,表示以流水线触发时的时间戳作为镜像的标签,很多企业习惯将分支名或者tag作为镜像的标签,云效也是支持的,如下图所示,详情参考链接。...

m0_58620140的博客 1219

Power BI财销一体分析——KPI分析应用实践

第九步:插入三个散点图,行拖入分销商表分销商字段,将度量值中的销量拖入X轴,将利润拖入Y轴,大小拖入度量值总销售额,将分销商表业务类型字段作为筛选条件添加给散点图,分别选择专业自行车店、增值经销商、仓库,使视觉对象固定显示不同业务类型的散点分布。这个公式其实是不需要我们自己写的,依赖于快度量值功能星级评分,基值选择度量值总销售额,星数选择5,最低星值评分选择0,最高星级评分值选择100,点击添加,星级评分度量值就建立好了,接下来我们理解一下公式。好的,今天的讲解就到这里。

BI瓶子的博客 1552

GAN管CGH40010F设计宽带Doherty功放:如何用ADS搞定输入匹配、合路网络与功分器?

本文详细介绍了基于CGH40010F GaN晶体管的宽带Doherty功放设计流程,重点讲解在ADS平台中实现输入匹配网络、合路网络与功分器的关键技术。通过寄生参数补偿、渐变微带线设计和复合补偿结构等方法,解决了宽带化设计中的核心挑战,最终实现1.7-2.6GHz频段内72%的峰值效率和52%的回退效率。

weixin_42614269的博客 473

阿里云-云效自动部署spring boot项目

pom.xml中 设置jar的名称。

draymond7107的博客 842

ALTERA MAX10 FPGA 串口远程升级实战:从原理到烧录的避坑指南

本文详细解析了ALTERA MAX10 FPGA如何通过串口实现远程升级。文章从工程师实战经验出发,深入剖析了MAX10片内Flash的双镜像备份原理、CONFIG_SEL引脚启动机制,并重点介绍了使用On-Chip Flash IP核进行擦写操作的核心流程。同时,提供了从Quartus工程配置、RPD文件生成、串口协议设计到驱动代码编写的完整避坑指南,旨在帮助开发者稳定、高效地完成远程升级功能部署。

weixin_29197699的博客 273

【阿里云系列】-基于云效构建部署Springboot项目到ACK

为了提高项目迭代的速度加速交付产品给客户,我们通常会选择CICD工具来减少人力投入产生的成本,开源的工具比如有成熟的Jenkins,但是本文讲的是阿里云提高的解决方案云效平台,通过配置流水线的形式实现项目的快速部署到服务器或容器平台中。

JackieJia的博客 1671

拆开它的“身体”,看懂割草机器人的五层系统架构

这篇文章深入解析了智能割草机器人的五层系统架构。机械层采用铝合金一体式车架和独立悬挂刀盘系统;电子层配备双处理器和多种传感器;固件层实现毫秒级安全响应;算法层融合多种定位技术实现厘米级精度;云服务层提供远程管理和AI优化。这套系统通过精密协同实现了智能割草的全流程闭环,展现了从机械结构到云端智能的完整技术栈,为户外智能设备设立了新的技术标杆。

智能硬件研发,欢迎交流 196

【Go语言实战】(9) gRPC 实现一个简单微服务

文章目录写在前面1. 安装1.1 grpc1.2 proto1.3 protobuf2. 编写代码2.1 初始化项目2.2 编写proto2.3 编写服务端2.4 实现客户端3. 演示 写在前面 这一次我们用gRPC实现获取用户的信息 1. 安装 1.1 grpc grpc的安装直接go get即可 go get google.golang.org/grpc 1.2 proto 下载proto,我是下载这个的。 然后解压出来把bin目录放在直接放在系统变量当中 1.3 protobuf 我们在

面向生活编程 3272

阿里云持续集成平台(云效),部署节点成功运行,经验记录一下

今天终于在ECS机器上完成了一个SpringBoot引用的自动化部署,总结过程中遇到的问题。 1)在部署脚本中nohup java 运行会报错,nohup: failed to run command 'java': No such file or directory 解决方案,把java的绝对路径写上,比如:nohup/usr/java/jdk1.8.0_191/bin/java ...

lld2002的专栏 3649

用群辉NAS打造影视墙(Jellyfin篇)

之前的文章提到过,用群辉NAS组建影视播放系统可以采用官方提供的Video Station套件,不过影视信息配比较差,响应速度也欠佳,今天我们就聊聊别的套件。在影音媒体方面,常见的还有Emby、Plex、Jellyfin。本文主讲Jellfin的原因是它胜在免费,而且功能比较齐全,完全够用。详细信息可以参考Jellyfin的官网:https://jellyfin.org/

dgnankai的专栏 7321

2022-06-01 阿里云云效流水线主机部署解压问题

阿里云云效

bb 835

Coze智能体开发:如何搭建一个生成长文本的工作流

扣子工作流提供了流程定制化的能力,我们可以把长文生成的流程拆分为多个步骤,例如先通过大模型节点生成大纲、再使用循环节点依次扩写各个段落,最后将各个段落组合起来,从而实现长文生成流程。此工作流可适用于学术写作、商业报告、小说创作等多种场景。

王国平的博客 1789

9、眼底图像智能分析:糖尿病视网膜病变的自动化识别与分级系统

本博客介绍了一种基于深度学习的糖尿病视网膜病变(DR)自动化识别与分级系统。该系统通过视网膜图像的预处理、数据增强、集成模型的构建与优化,实现了对DR的高效识别与分级。识别系统采用二分类任务,准确率达到97.67%,而分级系统通过四分类策略取得了95.2%的准确率。系统在基层社区和医院中具有广泛的应用前景,为DR的早期筛查和精准诊断提供了有效工具。

pea55的博客 144

再见了,我的散装研发管理平台;再见了,4台ECS!(1)

最后,盘点下这次从自己做的散装方案到使用云效全家桶之后,我认为比较大的几个收益点:成本降低了:节约了4台ECS。对于我们这种个人开发或小团队来说,云效基本就是免费的,白嫖能不爽么?运维容易了:跟阿里云的高度整合,对于资源的维护以及关联操作更加方便!自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。

Y1567409的博客 959

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

关于云效一台服务器挂不同端口RDC脚本部署java项目的坑,执行不到aplication.properties文件

要点: 流水线环节执行start脚本是在linux的根目录执行,如果根目录没有aplication.properties,就会根本加载不到aplication.properties文件,所以无论你如何修改外部的aplication.properties来配置项目的部署情况,也是加载jar包内的aplication.properties。 解决办法: 在你启动的shell脚本中,先执行命令进入...

z7的博客 749

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

qq_31745863的博客 5438

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

阿里云云效平台配置持续集成--java篇

一直想为我的pi项目配置一下持续集成,因为没有足够的服务器,自己搭建持续集成服务肯定是不可能了。所以就找了一下在线托管的平台,一开始是看到了GO CD,因为是国外的平台,没有中文文档,遂放弃了。无意间又看到了阿里云的云效平台(免费的哦),也可以进行持续集成,所以就花了点时间搞了一下。 1.开通云效 首先需要登录阿里云控制台,在左侧菜单栏搜索“云效”,进行开通 2.配置企业 进入云效...

ayoungyeah的博客 1676
上一篇: 云效流水线自动部署前端Vue项目
下一篇: Elasticsearch与mysql对应
springdk2009
博客等级 码龄17年 1835粉丝 257原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值