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

这篇具有很好参考价值的文章主要介绍了CI/CD---使用新版云效流水线自动部署Java项目。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


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

两大基本前提:

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

为什么需要流水线

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


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

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


一、流水线配置


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

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

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

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

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

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

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

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

5、流水线配置

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

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

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

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

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

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


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

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

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

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

部署脚本:由于前面阿里云已经构建完成,在下载路径会有对应的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-SNAPSHOT


PROG_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=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

内容很长,不管,直接负责粘贴即可,需要更改的地方就三个。
其一是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吧)

我这里贴出我的健康检查接口,仅供参考
CI/CD---使用新版云效流水线自动部署Java项目

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

3、特别注意一下:

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


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

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

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

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

4、我的项目地址

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

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

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


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

–我是“道祖且长”,一个在互联网"苟且偷生"的Java程序员
“有任何问题,可评论,我看到就会回复”文章来源地址https://www.toymoban.com/news/detail-455347.html

到了这里,关于CI/CD---使用新版云效流水线自动部署Java项目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 你以为搞个流水线每天跑,团队就在使用CI/CD实践了?

    在实践中,很多团队对于DevOps 流水线没有很透彻的理解,要不就创建一大堆流水线,要不就一个流水线通吃。实际上,流水线的设计和写代码一样,需要基于“业务场景”进行一定的设计编排,特别是很多通过“开源工具”搭建的流水线,更需要如此(商业的一体化平台大部

    2024年02月08日
    浏览(55)
  • CI/CD流水线插件在服务质量看护中的实践

    CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD 的核心概念是持续集成、持续交付和持续部署。 作为一种面向开发和运维团队的解决方案,CI/CD 主要针对在集成新代码时所引发的问题(亦称:“集成地狱”)。 具体而言,CI/CD 可让持续自动化

    2024年01月23日
    浏览(87)
  • devops-5:从0开始构建一条完成的CI CD流水线

    前文中已经讲述了静态、动态增加agent节点,以动态的k8s cloud为例,下面就以Maven构建Java程序为例,开始构建出一条完整的CI CD流水线。 实现功能目标: 1.分别可以根据分支和tag从源码仓库clone代码 2.拿到源码后开始编译 3.构建image,并push到镜像仓库 4.部署到对应k8s集群 5.部署

    2023年04月20日
    浏览(62)
  • [Gitlab CI] 自动取消旧流水线

    当某一分支开启 Merge Request 后只要提交一次 commit 就会自动创建一个新的流水线,此时之前的 Pipeline 不会被取消,经过下面的设置后可以实现自动取消旧流水线的功能。 ❗️通过提交(commit)触发的同一分支流水线可以自动冗余取消,但是通过手动触发的同一分支流水线不会

    2024年03月12日
    浏览(76)
  • 云效-流水线(基本教程)

    阿里云效地址: https://accountid-devops.aliyun.com/ 代码在码云, 服务器在腾讯云, 代码是个聚合代码 1. 选择适合自己的模板 2. 创建码云链接 3. 选择代码仓库, 分支即可下一步 4. 部署,主机部署 5. 保存运行(获取打包路径) 6. 完善部署命令 按自己的需求进行填写, 包括打包成docker镜像

    2024年02月09日
    浏览(55)
  • 【测试】自动化测试平台MeterSphere与CI流水线集成配置步骤

    登录 MeterSphere 控制台。访问个人信息下的 API Keys,点击新建来创建 API Keys API Keys 创建好之后,可以进行查看、复制Access Key。 点击 Secret Key 下的显示并复制 Secret Key 在 Jenkins 上安装 MeterSphere 提供的 Jenkins 插件。Jenkins 插件下载地址:https://github.com/metersphere/jenkins-plugin/release

    2023年04月20日
    浏览(55)
  • 【业务功能115】微服务-springcloud-springboot-Kubernetes-k8s集群-Kubesphere实现DevOps流水线-CI/CD-SonarQube- Jenkins

    dev 怎么开发 ops 怎么运维 参考项目链接:https://github.com/kubesphere/devops-maven-sample 持续集成是指软件个人的部分向软件整体部分交付,频繁进行集成以便更快地发现其中错误。 CI需要具备这些: 全面的自动化测试 这是实践持续集成持续部署的基础,同时,选择合适的自动化测

    2024年02月04日
    浏览(88)
  • CI-持续集成 — 软件工业“流水线”技术实现

    持续集成(Continuous Integration)是一种软件开发实践。在本系列文章的前一章节已经对其背景及理论体系进行了介绍。本小节则承接前面提出的理论构想进行具体的技术实现。 《Google软件测试之道》: \\\"每天,Google都要测试和发布数百万个源文件,亿万行代码。数以亿计的构建

    2024年02月12日
    浏览(68)
  • [小白]Java自动部署之-流水线[超详细]

    个人博客: www.wdcdbd.com   devops文档链接: https://pan.baidu.com/s/12kOXbduI6daJBXQ0FWJaig?pwd=1234      提取码:1234 在我们开发写代码的时候,可以在本地启动,这样似乎挺方便的,但是如果我们想要部署到服务器上就很费劲了,不但要maven构建和将.jar包发布上去,还要重启等一系列麻

    2024年01月23日
    浏览(65)
  • 37 | Kafka & ZMQ:自动化交易流水线

    在进行这节的学习前,我们先来回顾一下,前面三节,我们学了些什么。 第 34 讲,我们介绍了如何通过 RESTful API 在交易所下单;第 35 讲,我们讲解了如何通过 Websocket ,来获取交易所的 orderbook 数据;第 36 讲,我们介绍了如何实现一个策略,以及如何对策略进行历史回测。

    2024年01月16日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包