使用GitHub Action 持续集成部署我的第一个SpringMVC项目

1.GitHub Actions(创建一个Action,在github仓库)

在这里插入图片描述

2.基本的工作流认识

经过上一步后仓库会多出一个文件夹,里面就是配置文件了

在这里插入图片描述

先简单认识一下基本的语句

# 这是工作流程的名称,显示
在GitHub Actions的界面上
name: CI

# 指定触发工作流的事件。在这个例子中,每次向任意分支推送时都会触发。
on: [push]

# 定义工作流中的工作。工作是一组在同一个运行环境中执行的步骤。
jobs:
  build: # 这是定义的工作名称

    # 指定工作运行的环境。这里使用的是最新版本的Ubuntu虚拟环境。
    runs-on: ubuntu-latest

    # 工作中的步骤序列。
    steps:
    - uses: actions/checkout@v2 # 使用actions/checkout@v2这个GitHub Action,用于检出你的仓库代码到运行环境中。

    # 定义另一个步骤。
    - name: Run a one-line script # 步骤的名称
      run: echo Hello, world! # 在命令行执行的命令,这里是打印"Hello, world!"

解释 - uses: actions/checkout@v2
  • - uses: 这是GitHub Actions 工作流程的语法,用于指定一个’action’。在GitHub Actions中,'action’是一个可重用的组件,可以是一个小的任务,比如检出代码、安装依赖、运行测试等。
  • actions/checkout@v2 是一个特定的’action’,它是GitHub官方提供的,用于将你的仓库代码检出到工作流运行的虚拟环境中。简单来说,它就是将你项目的代码复制到运行工作流程的服务器上。
    • actions/checkout 是这个’action’的名称。
    • @v2 指定了’action’的版本。在这里,v2 表示第二个主要版本,通常包含改进和新功能。
现在我们来写我们项目的yml配置文件(这里以我的springMVC项目为例)

概括一下就是…(这里的TGT都是我项目的名称,可改)

检测push操作—>设置github虚拟机—>把仓库代码放到虚拟机—>设置语言环境—>用maven打包—>移动war包到根目录—>删除服务器旧war包和文件**(注意这里用到了仓库变量(秘密))**

—>把新war移动到tomcat

# 工作流名称
name: Maven Package and Deploy

# 触发工作流的条件。这里设置为当 main 分支有新的推送时触发
on:
  push:
    branches:
      - main

# 工作流中的工作定义
jobs:
  # 定义一个名为 'build-and-deploy' 的工作
  build-and-deploy:
    # 设置工作运行的虚拟环境,这里使用的是最新版本的 Ubuntu
    runs-on: ubuntu-latest

    # 工作中的步骤
    steps:
      # 第一步:检出代码
      - name: Checkout Code
        uses: actions/checkout@v2  # 使用 GitHub 提供的 actions/checkout@v2 Action

      # 第二步:设置 JDK 1.8 环境
      - name: Set up JDK 1.8
        uses: actions/setup-java@v1  # 使用 actions/setup-java@v1 Action 来设置 JDK 环境
        with:
          java-version: 1.8  # 指定 JDK 版本为 1.8

      # 第三步:使用 Maven 构建项目
      - name: Build with Maven
        run: mvn clean package -DskipTests  # 运行 Maven 命令来清理、打包项目,跳过测试

      # 第四步:重命名并将 WAR 文件移动到根目录
      #(因为在服务器多产生一个traget子目录,使得不能访问)
      - name: Rename and Move WAR file to Root Directory
        run: |
          mv target/*.war ./TGT.war  # 将 Maven 构建的 WAR 文件重命名为 TGT.war 并移动到根目录

      # 第五步:在服务器上移除旧的 TGT.war 文件和 TGT 目录
      - name: Remove old TGT.war and TGT folder from server
        uses: appleboy/ssh-action@master  # 使用 appleboy/ssh-action 来通过 SSH 连接到服务器
        with:
          host: ${{ secrets.HOST }}        # 服务器地址
          username: ${{ secrets.USERNAME }}  # SSH 用户名
          key: ${{ secrets.KEY }}            # SSH 密钥
          port: 22                           # SSH 端口,这里使用默认端口 22
          script: |                          # 要在服务器上执行的脚本
            rm -f /www/server/tomcat/webapps/TGT.war
            rm -rf /www/server/tomcat/webapps/TGT

      # 第六步:将 WAR 文件复制到服务器
      - name: Copy WAR to Server
        uses: appleboy/scp-action@master  # 使用 appleboy/scp-action 来通过 SCP 将文件复制到服务器
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USERNAME }}
          key: ${{ secrets.KEY }}
          port: 22
          source: "TGT.war"  # 指定要复制的文件是根目录下的 TGT.war
          target: "/www/server/tomcat/webapps"  # 目标路径是服务器上的 webapps 目录

3.设置秘密(也就是一些服务器变量)

在这里插入图片描述

进入仓库设置

进行秘密的创建

在这里插入图片描述

需要创建的密码如下(用于连接我们的服务器)配置四个就足够了

在这里插入图片描述

SSH密钥怎么获得?

1.先连上服务器

2.如过从没有生成过(输入后会要求你输入passphrase,一直回车跳过就行)

ssh-keygen -t rsa -C "XXXX@qq.com"     

3.查看SSH keys

cat ~/.ssh/id_rsa.put

4.安装公钥

cd .ssh   #进入文件夹
cat id_rsa.pub>>authorized_keys  #将公钥导入到"authorized_keys"文件

5.确认权限

chmod 600 authorized_keys
chmod 700 ~/.ssh

service sshd restart   #重启ssh服务

6.获取私钥内容

cd .ssh
ll

在这里插入图片描述

vi id_rsa  #查看私钥

然后就是复制了

在这里插入图片描述

后面粘贴到刚刚创建的秘密中就行

后面就可以尝试push到仓库,在仓库的action中可以查看工作流的结果

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weighless1129

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值