简介

接上回书 《GitHub Action笔记》 ,官方是有一定免费额度的,如果这个额度不够怎么办?或者是自己想要一个满足自己特定需求的定制化workflow服务器怎么办?

本次我们就主要讲述如何使用自己的服务器跑GitHub Action任务。本文参照的是 官方文档-添加自托管的运行器

服务器配置

首先我们需要一台服务器,这里我使用的是 Oracle新加坡 X86_64架构的服务器,配置为2C1G。

根据文档介绍我们需要到对应的仓库的设置中找到 Actions,然后点击 runner,然后根据提示下载对应的运行器。如下图所示:

接下来就是无脑执行提示的命令就行了[不要照抄我的,不要照抄我的,不要照抄我的] 用你自己页面上实际显示的命令

  • 下载解压

    # 创建文件夹
    mkdir actions-runner && cd actions-runner
    # 下载最新的runner包
    curl -o actions-runner-linux-x64-2.305.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.305.0/actions-runner-linux-x64-2.305.0.tar.gz
    # 校验文件hash值 一般如果网络没啥问题直接顺利下载完成可跳过这一步
    echo "737bdcef6287a11672d6a5a752d70a7c96b4934de512b7eb283be6f51a563f2f actions-runner-linux-x64-2.305.0.tar.gz" | sha256sum -c
    # 解压
    tar xzf ./actions-runner-linux-x64-2.305.0.tar.gz
  • 配置

    # 创建runner并配置  这里注意不能使用root权限的账户运行 XXX是你页面上显示的token
    ./config.sh --url https://github.com/Think-Me/hexo --token XXX

    # 会有下面的交互提醒 没有特殊需求的话直接全回车用默认就行了
    --------------------------------------------------------------------------------
    | ____ _ _ _ _ _ _ _ _ |
    | / ___(_) |_| | | |_ _| |__ / \ ___| |_(_) ___ _ __ ___ |
    | | | _| | __| |_| | | | | '_ \ / _ \ / __| __| |/ _ \| '_ \/ __| |
    | | |_| | | |_| _ | |_| | |_) | / ___ \ (__| |_| | (_) | | | \__ \ |
    | \____|_|\__|_| |_|\__,_|_.__/ /_/ \_\___|\__|_|\___/|_| |_|___/ |
    | |
    | Self-hosted runner registration |
    | |
    --------------------------------------------------------------------------------

    # Authentication


    √ Connected to GitHub

    # Runner Registration

    Enter the name of the runner group to add this runner to: [press Enter for Default]

    Enter the name of runner: [press Enter for debian] debian11

    This runner will have the following labels: 'self-hosted', 'Linux', 'X64'
    Enter any additional labels (ex. label-1,label-2): [press Enter to skip]

    √ Runner successfully added
    √ Runner connection is good

    # Runner settings

    Enter name of work folder: [press Enter for _work]

    √ Settings Saved.

    # 运行runner
    ./run.sh

    # 回显如下即为启动成功
    ? Connected to GitHub

    Current runner version: '2.305.0'
    2023-06-30 07:57:15Z: Listening for Jobs

    刷新GitHub中runners页面也会发现这个节点已经显示出来了。

使用

使用该节点的时候只需要在workflow配置文件中设置 runs-on: [self-hosted, Linux, X64] (根据你自己的节点标签填写)即可。

我这里为了解决ServerStatus每次增加新的监控节点都需要服务端改配置文件然后再手动重启的问题,所以我在GitHub Action中使用了自己的节点,这样就可以将服务端的操作自动化了(只要我idea中提交修改后的配置文件GitHub Action会自动完成配置文件拉取和重启服务端)。

name: 自动拉取ServerStatus配置文件并重启服务端
on:
push:
branches:
- ServerStatus
jobs:
job1:
name: 连接vps进行文件拉取并重启服务端
runs-on: [self-hosted, Linux, X64]
steps:
- name: SSH Command
uses: appleboy/ssh-action@v0.1.10
with:
host: ${{ secrets.VPS_OCIN_HOST }}
port: ${{ secrets.VPS_OCIN_PORT }}
username: ${{ secrets.VPS_OCIN_USERNAME }}
password: ${{ secrets.VPS_OCIN_PASSWORD }}
script: |
cd /opt/ServerStatus/hexo/ && git pull origin ServerStatus
cp -f /opt/ServerStatus/hexo/config.toml /opt/ServerStatus/config.toml
systemctl restart stat_server.service

可能遇到的问题

  1. 我这里刚兴冲冲的尝试第一次构建的时候就失败了,如图所示:

    因为我这里用到了一些依赖docker的steps,所以需要安装docker,这里我就直接安装了docker.io。 apt install docker.io

  2. 我又满怀期待的尝试了一次,结果还是失败了,如图所示:

    这次是提示没有使用docker的权限,这里我又将debian用户加入到了docker用户组中。 gpasswd -a debian docker

  3. ok,我又赶紧提交一下代码测试,最终成功将任务执行完毕!

    GitHub显示如下:

    服务器显示如下:

优化

到这里其实已经能使用了,这里主要讲一下优化措施(根据你的需求任选其一即可)。

例如:

1. 使用screen或其他工具放到后台运行。
2. 使用supervisor、pm2或其他工具接管。
3. 自己封装成service用systemctl接管。

具体可参考 这篇文章 !