CI/CD—使用新版云效流水线自动部署Java项目

两大基本前提:

1、有一个自己的云服务器
2、项目代码已经提交到代码仓库,如gitee,github等

为什么需要流水线

1、除了第一次需要新建流水线,配置脚本外,后续所有的部署只需要提交代码后,点击运行流水线就行 。
2、流水线还可以回滚,此功能太过友好了。
3、当然,你也可以选择jenkins,这就仁者见仁,智者见智了。

由于我的服务器已经部署过Java项目,所以相应的部署环境都有了,包括JDK,MySQL,redis等等,所以此博客不再赘述如何安装各种环境,如果没有服务器,也没有部署过项目,可参考我的另一篇博客,详细讲述了如何申请免费服务器,准备项目运行所需环境,以及具体如何部署的细节

从零开始,Java个人项目部署上线,并能在公网访问

一、流水线配置

1、百度搜索“云效流水线”,进入云效

2、选择免费使用,并登陆阿里云账号

3、选择我的流水线—>新建流水线

4、选择流水线模板(可以根据需求选择不同模板)

5、流水线配置

选择代码源:比如码云就是gitee,这里以码云示例
添加服务器连接:码云的授权,非常简单,按提示操作
代码仓库:配置服务器连接后,自动扫描获取到了你的所有项目
选择默认分支:一般是开发分支,而不是master分支,具体看平时提交到哪个分支
开启分支模式(企业中肯定是要开启的,这里只是个人项目,不需要开启)
工作目录:可以自定义,也可以不需要管,我这里不管

6、流水线:Java构建上传编辑

注意一下:
这里分为Java构建构建物上传,Java构建一目了然,一般情况下不需要改就行,构建物上传的话,就需要特别注意打包路径了,我这里需要配置两行,一行是jar包配置,一行是部署脚本配置。部署脚本后面会提供并解释(我一直担心各位看不清图片,试试右键在新标签页打开图片吧)。

推荐本地打包一下,查看打包后的jar包名称是什么,别配置错了。各位此处唯一需要更改的就是jar包名称

7、流水线:主机部署编辑

可以看到,需要注意三点,其他不需要变,直接选择即可:
主机组:新建主机组,可以根据实际情况,如果是购买的阿里云的服务器,选第一个,如果是腾讯云,华为云之类的非阿里云服务器,选第二个。或者没有服务器,选第三个。我这里是选择的第一个作为示例。这方面我没遇到任何阻碍,很简单,自行摸索。

下载路径:这个下载路径可以不需要更改,只需要注意记住就是,后面的部署脚本需要填写这个配置

部署脚本:由于前面阿里云已经构建完成,在下载路径会有对应的package.tar的压缩包,所以部署脚本存在的目的,就是解压这个压缩包到指定路径,并执行我们项目中的脚本文件,我的部署脚本如下:

mkdir -p /home/admin/spring-boot-template-1.0-SNAPSHOT
tar zxvf /home/admin/app/package.tgz -C /home/admin/spring-boot-template-1.0-SNAPSHOT/
sh /home/admin/spring-boot-template-1.0-SNAPSHOT/deploy.sh restart

非常好理解:各位唯一需要对应更改的地方就是将脚本中所有的spring-boot-template-1.0-SNAPSHOT更改为你的jar包名称即可,其他无需更改。

部署策略:随便都行,看你自己选,不影响部署结果。

至此,流水线配置完成了。虽然我写的多,那是我习惯性的保姆意识导致的,其实流程非常短,且简单。

二、项目配置

项目配置需要注意两点:

其一脚本文件deploy.sh,其二pom文件打包命令
注意一下,别混淆了项目中的脚本文件,和流水线中的部署脚本。流水线中的部署脚本用于解压项目构建后的压缩包,以及执行deploy.sh文件。而deploy.sh文件则是具体的部署脚本,包含了最基本的nohup java -jar xxx.jar &这个基本的部署命令。

1、脚本文件deploy

文件位置:项目最外层,与pom文件同一层级
文件内容

#!/bin/bash#修改APP_NAME为云效上的应用名
APP_NAME=spring-boot-template-1.0-SNAPSHOTPROG_NAME=$0
ACTION=$1
APP_START_TIMEOUT=20    # 等待应用启动的时间
APP_PORT=8088          # 应用端口
HEALTH_CHECK_URL=http://127.0.0.1:${APP_PORT}/first # 应用健康检查URL
HEALTH_CHECK_FILE_DIR=/home/admin/status   # 脚本会在这个目录下生成nginx-status文件
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 ${HEALTH_CHECK_FILE_DIR}
mkdir -p ${APP_HOME}/logs
usage() {echo "Usage: $PROG_NAME {start|stop|restart}"exit 2
}health_check() {exptime=0echo "checking ${HEALTH_CHECK_URL}"while truedostatus_code=`/usr/bin/curl -L -o /dev/null --connect-timeout 5 -s -w %{http_code}  ${HEALTH_CHECK_URL}`if [ "$?" != "0" ]; thenecho -n -e "\rapplication not started"elseecho "code is $status_code"if [ "$status_code" == "200" ];thenbreakfifisleep 1((exptime++))echo -e "\rWait app to pass health check: $exptime..."if [ $exptime -gt ${APP_START_TIMEOUT} ]; thenecho 'app start failed'exit 1fidoneecho "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 ]];thenecho -e "\rno java process"returnfiecho "stop java process"times=60for e in $(seq 60)dosleep 1COSTTIME=$(($times - $e ))checkjavapid=`ps -ef | grep java | grep ${APP_NAME} | grep -v grep |grep -v 'deploy.sh'| awk '{print$2}'`if [[ $checkjavapid ]];thenkill -9 $checkjavapidecho -e  "\r        -- stopping java lasts `expr $COSTTIME` seconds."elseecho -e "\rjava process has exited"break;fidoneecho ""
}
start() {start_applicationhealth_check
}
stop() {stop_application
}
case "$ACTION" instart)start;;stop)stop;;restart)stopstart;;*)usage;;
esac

内容很长,不管,直接负责粘贴即可,需要更改的地方就三个。
其一是APP_NAME改为你的jar包名称;
其二是APP_PORT改为你的项目端口号;
其三是健康检查接口,改为你自己项目的随便一个接口,最好是个无需登录授权的接口;

2、pom文件

pom打包插件如下配置:

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions><configuration><includeSystemScope>true</includeSystemScope><mainClass>cn.ycl.DemoApplication</mainClass></configuration>
</plugin>

唯一需要改的是mainClass,改为你自己的启动类(写到这里突然发现,我脑子里已经没有ssm了,只有spring boot。话说现在才搞持续部署,应该是新项目吧,新项目不可能是ssm吧)

我这里贴出我的健康检查接口,仅供参考

将以上所有更改提交并push到线上git,然后就可以回到流水线,直接点运行了。

3、特别注意一下:

其一,如果你的前文提到的流水线打包路径配的不正确,有可能会出现构建成功,部署成功,但是其实压根啥都没运行的情况,所以构建日志一点要看,尤其是构建的最后一步,构建物上传,请仔细查看,是否出现No file or directory find 之类的语句,出现了,代表你工作目录配错了。

其二,部署日志也要看,只有出现如下健康检查接口通过了,才是部署成功

如果部署失败了,别急,去看项目日志,根据deploy.sh文件中的配置,应用的启动日志在这里:
JAVA_OUT=${APP_HOME}/logs/start.log

如果start.log中确实有错误提示,那么就是你jar包的问题,流水线是没问题的。要么百度,要么直接修改,解决了重新运行流水线就行。

4、我的项目地址

https://gitee.com/judgebymom/spring-boot-template.git

如果各位使用自己的项目无法进行流水线部署,或者说总是失败,可以使用我这个项目试一下,可以fork到自己仓库,方便gitee授权。如此,任何更改都不需要,直接创建流水线,运行即可。用于参照。祝各位一次成功,无需我的项目。

博主也是自己摸索成功的,走了非常多的弯路,上面所有的“注意一下”,以及"特别提醒",都是我走过的弯路,一些更离谱的错误,如果根据文章按部就班操作,是不会出现的,就不提了。

–我是“道祖且长”,一个在互联网"苟且偷生"的Java程序员
“有任何问题,可评论,我看到就会回复”

CI/CD---使用新版云效流水线自动部署Java项目相关推荐

  1. 云服务器开启ftp_阿里云搭建wordpress 及部署java项目

    很久之前,小编就买了一年的阿里云服务器,也购买了域名,一直都没有时间,加上自己对linux的知识不足,最后小编终于把wordpress和tomcat同时部署在一个服务器上, 先简单说说阿里云的购买流程 ...

  2. 自动部署java项目,热部署方式

    大部分内容转自:https://www.cnblogs.com/hdwang/p/6081994.html 怎么创建项目不赘述了,不会的也不用往下看了,热部署不需要重启tomcat 说下安装插件 上述 ...

  3. 宝塔面板如何部署Java项目教程【新版】

    在新版的宝塔面板里,对JAVA支持已经越来越友好了,操作更加方便简单. 首先,将你你宝塔面板升级到7.8版本以上,点击右上角的"更新"即可自动更新到最新版本.如图 关于新版的宝塔面 ...

  4. 实现高效安全管理云效流水线的7招 |云效

    概述 传统流水线 Pipeline 工具,包括 Jenkins.Teamcity.Travis CI 等产品,作为企业 DevOps 中持续集成/持续交付的核心工具,从核心功能上来说通常可以概括为以下 ...

  5. 云原生时代,企业如何选取研发模式,并通过云效流水线落地

    云原生是近几年IT圈最火热的词汇之一,几乎每一个云计算产品都会或多或少跟云原生发生关联.那到底什么是云原生?它对企业的项目研发又有什么样的影响跟要求?云原生这个大的时代背景下,企业又应如何落地相应研发 ...

  6. docker docker compose 云效流水线

    docker 安装 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 安装之后直接执行docker ps 有下边的报 ...

  7. CICD使用阿里云 云效实现自动发布代码

    我们平时项目自动发布,我接触过的 1:jenkins+tomcat (windows server.jenkins直接打包,通过tomcat主账号发布) 2:jenkins+rancher+docke ...

  8. 华为云软件开发平台(DevCloud)流水线式部署Vue项目,并且通过域名访问

    一.准备环境 1.1.华为弹性云服务器(ECS)或者云耀云服务器(HECS) 1.2.软件开发平台(DevCloud) 1.3.容器镜像服务(SWR) 1.4.云解析服务(SWR) 二.软件开发平台( ...

  9. git php自动发布,使用 Git Hooks 实现自动部署PHP项目

    最近正在寻找一种简便的自动部署代码到服务器的方式,然后就发现了git hooks这个方法,查了一些资料再自己尝试过后,觉得还不错,记录下. 什么是git hooks 在git上是这么介绍的: 和其它版 ...

  10. Jenkins流水线部署java项目

    Jenkins发布java项目 java程序发布步骤 手动部署 自动部署 java程序发布步骤 拉取代码并打包 备份源程序 拷贝新程序到服务器的webapps目录中,停一会修改配置 重启tomcat ...

最新文章

  1. 在ToolStrip中加入具有更好体验性的DateTimePicker
  2. 由数字、26个英文字母、下划线或汉字的正则表达式
  3. 长春南关区净月大街附近都有哪些课后班?
  4. 如何使用 SSH 控制连接 Windows 服务器
  5. 音视频开发(23)---音视频直播技术--10分钟搭建好直播平台
  6. 【MySQL】MySQL每秒统计一次showglobal status
  7. 企业数字化劳动力-Srise RPA产品
  8. C# 编译后执行bat等脚本文件 运行脚本文件 执行Copy 执行XCopy
  9. 数字序列中某一位的数字
  10. TraceView issue
  11. HTTP 压力测试工具 wrk和ab
  12. Linux制作U盘Windows启动盘,windows下制作linux U盘启动盘或者安装优盘(转)
  13. 技术总监面试有什么技巧
  14. 一个80年代大学生的悲壮职业人生
  15. 不同计算机通过家庭组无法共享的是,windows7开家庭组与其他版本系统共享文件失败的解决方法...
  16. 几种将将虚幻引擎内容流送到多个平台的推流方案比较
  17. GitLab-Runner 从安装到配置到入门
  18. C语言实用小技巧合集(持续更新)
  19. ~3 ccf 2022-03-2 出行计划
  20. 零钱兑换问题——python动态规划解法

热门文章

  1. ios隐私政策_新的iOS 14已经揭露了严重的隐私问题
  2. 2017年sfdc工作总结_Schema Builder
  3. uni-app 背景图片处理
  4. html编写红头文件
  5. 高电平和低电平 到底是啥?
  6. endnote设置文献第二行悬挂缩进办法
  7. SWAN之ikev2协议crl-revoked配置测试
  8. 【洛谷1489】猫狗大战【BZOJ1899】【ZJOI2004】Lunch午餐
  9. Java实验1:个人银行账户管理系统总结
  10. 【NOIP 费用流】JZOJ_3029 观光公交