gitea 通过cicd部署maven项目到远程服务器

1、 在项目根目录下创建目录.gitea以及子目录worlflows

image.png

2、 创建yaml文件

name: dms master actions
run-name: ${{ github.actor }} is running on master
on:
  push:
    branches:
      - dev
    paths-ignore:
      - .gitea/workflows/master.yaml
      - Readme.md
      - Changelog.md
jobs:
  # 任务名称
  build:
    runs-on: ubuntu-latest
    # 创建输出,用于发送邮件通知
    outputs:
      status: ${{ steps.result.outputs.status }}
    steps:
      # 缓存Maven3.9安装包
      - name: 缓存Maven3.9安装包
        id: maven-install-cache
        uses: http://192.168.2.19:3000/Actions/cache@v3
        with:
          path: /home/apache-maven-3.9.6
          key: maven-install-cache-3.9.6
      # 如果没有缓存,下载maven安装包
      - name: 下载Maven3.9.6
        # 判断 id = maven-install-cache 的缓存对象是否已经缓存,如果已缓存则不执行
        if: steps.maven-install-cache.outputs.cache-hit != 'true'
        # 已经配置好一个maven,传入gitee,直接拉取就可以使用了
        run: |
          cd /home
          git clone http://192.168.2.19:3000/Actions/apache-maven-3.9.6.git
          echo "下载 maven 完成"
      # 1拉取代码
      - name: Check out repository code
        uses: http://192.168.2.19:3000/Actions/checkout@v4
      # java环境设置
      - name: Set up JDK 17
        uses: http://192.168.2.19:3000/Actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'microsoft'
          cache: 'maven'
      # 验证java
      - name: Check Java version
        run: java -version
      # 打包
      - name: 🖥 开始编译Java项目
        # 设置Maven执行权限,使用maven绝对路径执行打包命令
        run: |
          chmod +x /home/apache-maven-3.9.6/bin/mvn
          /home/apache-maven-3.9.6/bin/mvn clean package -Dmaven.test.skip=true
      # 传输jar包
      - name: copy jar to 19
        uses: appleboy/scp-action@v0.1.7
        with:
          host: ${{ secrets.DEV_HOST }}
          username: ${{ secrets.DEV_USERNAME }}
          port: ${{ secrets.DEV_PORT }}
          password: ${{ secrets.DEV_PASSWORD }}
          # 根据实际情况,输入jar包地址
          source: "***.jar"
          target: "/project/warehouse/dev/"
      # 修改包
      - name: executing remote ssh commands using password
        uses: appleboy/ssh-action@v1.0.3
        with:
          host: ${{ secrets.DEV_HOST }}
          username: ${{ secrets.DEV_USERNAME }}
          password: ${{ secrets.DEV_PASSWORD }}
          port: ${{ secrets.DEV_PORT }}
          script: |
            # 获取当前日期时间戳
            TIMESTAMP=$(date +'%Y%m%d%H%M%S')
            cd /project/warehouse/dev/
            # 备份 JAR 文件并重命名为包含日期时间戳的文件
            if [ -f "warehouse-application-dev.jar" ]; then
              mv warehouse-application-dev.jar backup/warehouse-application-dev-$TIMESTAMP.jar
              echo "Backup JAR file to warehouse-application-dev-$TIMESTAMP.jar"
            else
              echo "JAR file not found."
            fi
            rm -rf warehouse-application-dev.jar
            # 根据各自情况,输入jar地址
            cp ****.jar warehouse-application-dev.jar
            rm -rf workspace
            bash warehouse-quick.sh restart
      - name: 设置项目结果(成功)
        id: result
        run: |
          echo "::set-output name=status::success"
  on-email:
    needs: build
    runs-on: ubuntu-latest
    if: always()
    steps:
      - name: Determine email subject
        id: determine-subject
        run: |
          if [ "${{ needs.build.outputs.status }}" == "success" ]; then
            echo "SUBJECT=开发环境 仓库管理系统 - 构建成功" >> $GITHUB_ENV
          else
            echo "SUBJECT=开发环境 仓库管理系统 - 构建失败" >> $GITHUB_ENV
          fi
      # 发送邮件通知
      - name: Send mail
        id: send-email
        uses: http://192.168.2.19:3000/Actions/action-send-mail@v3.12.0
        with:
          server_address: smtphz.qiye.163.com
          server_port: 465
          secure: true
          username: ${{secrets.MAIL_USERNAME}}
          password: ${{secrets.MAIL_PASSWORD}}
          subject: ${{ env.SUBJECT }}
          # 多个邮件,逗号隔开
          to: ***,***
          from: ***
          body: |
            流水线 ${{ github.repository }} 构建
            ${{ needs.build.outputs.status == 'success' ? '成功' : '失败' }}
          ignore_cert: true




3. 远程sh脚本

重点是start方法中的java路径,写全路径,否则或出现无法启动成功问题

#!/bin/sh
# ./ry.sh start 启动 stop 停止 restart 重启 status 状态
AppName=application-test.jar

# JVM参数
JVM_OPTS="-Dname=$AppName  -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError"
APP_HOME=`pwd`
LOG_PATH=$APP_HOME/logs/$AppName.log

if [ "$1" = "" ];
then
    echo -e "\033[0;31m 未输入操作名 \033[0m  \033[0;34m {start|stop|restart|status} \033[0m"
    exit 1
fi

if [ "$AppName" = "" ];
then
    echo -e "\033[0;31m 未输入应用名 \033[0m"
    exit 1
fi

function start()
{
    PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
    if [ x"$PID" != x"" ]; then
        echo "$AppName is running..."
    else
        nohup /opt/jdk-17/bin/java $JVM_OPTS -jar $AppName --spring.profiles.active=test> ./java.log 2>&1 &
        echo "Start $AppName success..."
    fi
}

function stop()
{
    echo "Stop $AppName"

    PID=""
    query(){
        PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
    }

    query
    if [ x"$PID" != x"" ]; then
        kill -TERM $PID
        echo "$AppName (pid:$PID) exiting..."
        while [ x"$PID" != x"" ]
        do
            sleep 1
            query
        done
        echo "$AppName exited."
    else
        echo "$AppName already stopped."
    fi
}

function restart()
{
    stop
    sleep 2
    start
}

function status()
{
    PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l`
    if [ $PID != 0 ];then
        echo "$AppName is running..."
    else
        echo "$AppName is not running..."
    fi
}

case $1 in
    start)
    start;;
    stop)
    stop;;
    restart)
    restart;;
    status)
    status;;
    *)

esac

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容