使用Github Action 进行CI-CD

x1uc / 2025-02-10 / 原文

原文地址:https://www.x1uc.top/blog/github-action-use

使用Github Action 进行CI-CD

我的博客建立起来还没有多久,所以时不时的会加一些功能。但是每一次加完功能之后,部署的步骤总是非常非常的麻烦。
后端步骤:maven打包->jar包放到服务器上->停止java容器-> 删除java镜像-> 重新build镜像-> 启动容器
前端步骤 -> 打包 -> 放到服务器上 -> 删除旧包 -> 包改名 ->重启服务器
每一次想要加功能的时候想到这繁琐的步骤,直接劝退了。

我现在在实习的公司,开发环境更新的时候也可以说极度的麻烦。但是最近leader搭了一个Jenkins来简化更新。不得不说,是真的好用。所以我决定给我的博客开发也加上CI/CD

因为我博客的代码本来就是放在Gihub上进行托管,之前虽然没有使用过Github Action但是也听说过有这么个东西,服务器本身的内存也不大,也没必要折腾Jenkins

Github Action 是什么

Github Action 可以理解为 Github 免费提供的一个云服务器。

当你的仓库有变化的时候(例如:有新的提交),会触发服务器执行对应的脚本。

Github Action 如何使用

既然是一台云服务器,能干的事情当然就很多了。但是我认为最重要的就是:连接我们自己的服务器。

workflow大概是这样:commit代码 -> 触发github action -> github服务器 connect 我的服务器 -> 执行脚本(拉取最新代码-> 打包 -> 部署)

我们如何操作Github的这台服务器呢?靠的是.github/workflows/main.yml配置文件。
如何创建这个脚本呢?如图所示(当然也可以手动创建)

下面我们会分为两步讲:

  1. 如何使用Github提供的服务器连接自己的服务器
  2. 如何使用main.yml配置文件执行脚本

Github Action 如何连接 我的服务器

连接服务器使用的自然是ssh连接。分为四步

  1. 生成密钥(公钥&私钥)
  2. 将私钥内容粘贴,放到图片所示位置
  3. 将公钥放到 ~/.ssh/authorized_keys 文件中,这个文件可以放置多个公钥
  4. 配置main.yml 文件。

配置main.yml文件

我贴一下自己的main.yml文件

如果你也是和我一样,只是想使用github的服务器连接上自己的服务器执行脚本。那你完全可以只需要关注 Deploy to server 的 run 部分的代码。
前端部分:

name: Deploy to Server

on:
  push:
    branches:
      - main  # 触发的分支

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      
      - name: Set up SSH key
        uses: webfactory/ssh-agent@v0.9.0
        with:
          ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}

            

      - name: Deploy to server
        run: |
          ssh -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'EOF'
            # 导航到项目目录
            cd /home/ecs-user/repo/YueZi_Blog

            # 拉取最新代码
            git pull origin main

            # 安装依赖
            npm install  # 或者适用于您的项目的命令

            # 构建项目
            npm run build  # 或者适用于您的项目的命令

            cd /home/ecs-user/repo
            ./update.sh
          EOF

后端部分:

name: Deploy to Server

on:
  push:
    branches:
      - main  # 触发的分支

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      
      - name: Set up SSH key
        uses: webfactory/ssh-agent@v0.9.0
        with:
          ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}

            

      - name: Deploy to server
        run: |
          ssh -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'EOF'
            # 导航到项目目录
            cd /home/ecs-user/repo/YueZi_Blog_BackEnd
      
            # 配置 SDKMAN
            export SDKMAN_DIR="$HOME/.sdkman"
            [[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"
      
            # 拉取最新代码
            git pull origin main
      
            # 构建项目
            mvn clean install -DskipTests
            rm -rf ~/Blog_BackEnd/YueZi_Blog-0.0.1-SNAPSHOT.jar
            mv target/YueZi_Blog-0.0.1-SNAPSHOT.jar ~/Blog_BackEnd/
            cd ~/Blog_BackEnd
            ./update.sh
          EOF