如何给 GitHub Actions 添加自己的 Runner 主机

技术
  1. 什么是 GitHub Actions

在前面的文档中,我对 GitLab 提供的 CI 功能进行了实践 。使用 GitLab 的好处是可以私有化部署、无限的私有仓库数量、CI 配置简单、能接入自建的 Runner 。但随着 GitHub 越来越开放,GitLab 的这些优势在逐步丧失。

从 CICD 的角度看,越接近 Git 仓库的功能,越贴近开发者。未来的开发者市场上,GitHub、GitLab、Coding、Gitee 这样的 SaaS 平台将具有很顽强的生命力。

GitHub Actions 是一个类似 GitLab CI 的服务。GitLab 默认使用的是 .gitlab-ci.yml 文件,描述 CICD 流程。而 GitHub 使用的是 .github/workflows 目录下的 yaml 文件。最大的不同在于,GitHub 提供了一个 Actions 市场,开发者可以基于这些原子快速编排流程。

我在文档使用镜像部署 Hexo 静态页面中,使用下面的 yaml 配置进行编译和推送镜像:


        
name: build  
  
on: [push]  
  
jobs:  
  build:  
    runs-on: ubuntu-latest  
    steps:  
      - name: Checkout  
        uses: actions/checkout@v2  
  
      - name: Build image  
        run: make build  
  
      - name: Login Registry  
        uses: docker/login-action@v1  
        with:  
          registry: ghcr.io  
          username: ${{ github.repository\_owner }}  
          password: ${{ secrets.GHCR\_TOKEN }}  
  
      - name: Push image  
        run:  
          docker push ghcr.io/shaowenchen/documents:latest  

    

每次 push 代码之后,Actions 就会自动运行,如下图:

picture.image

这种方式对开发者十分友好,如果网络通畅,GitHub Actions 能够满足很多团队的 CICD 需求。

  1. 什么时候需要接入自己 Runner

2.1 对构建机器有要求

目前,GitLab 只提供了下面几类运行环境:

  • windows
  • ubuntu
  • macos

但并不是每个版本的系统都支持,目前只能使用指定的版本,也无法指定 CPU 架构。

另一方面,在构建过程当中,GitHub 提供的构建机,对物理资源也有所限制。构建虚拟机的配置如下:

  • 2 core CPUs
  • 7 GB of RAM memory
  • 14 GB of SSD disk space

可能在未来,相关的物理资源配置会有所提升,但始终会有限制。当需要构建某些大型项目,特别是 C++ 项目时,这样的物理资源配置是不能够满足要求的。

2.2 私有仓库需要大量构建

下图是目前 GitHub 官方给出的构建报价:

picture.image

非常幸运的是公开仓库免费使用,只有私有仓库的额度有限制。 不同付费级别的用户,具有不同的构建时长。 需要注意的是,这里的时长指的是 Linux 的构建时长。 Windows 使用一分钟,折算为 Linux 的两分钟。 MacOS 使用一分钟,折算为 Linux 的十分钟。

对私有仓库有大量构建需求的项目,使用 GitHub Actions 提供的构建机性价比不高。

  1. 添加主机 Runner

这里的 Runner 指的是 GitHub Actions 的运行环境,也就是 .github/workflows 文件夹下 yaml 中指令的运行环境。这里主要添加主机 Runner,如果是添加容器或者 Kubernetes Runner ,需要将 actions-runner 打包到镜像中,然后运行接入 GitHub Actions,在其他方面没有差别。

首先进入项目,在 Settings 页面中,找到 Actions 。

picture.image

点击上图的 Add runner 进入下图的添加主机页面,同样支持三种操作系统,macOS、Linux、Windows。

picture.image

在页面选择操作系统和架构之后,按照安装提示操作即可。

  • 新建用户 runner:runner

        
groupadd -g 1234 runner  
useradd runner -u 1234 -g 1234  
su runner  
cd ~  

    
  • 下载 Runner

        
mkdir actions-runner && cd actions-runner  
curl -O -L https://github.com/actions/runner/releases/download/v2.274.2/actions-runner-linux-x64-2.274.2.tar.gz  
tar xzf ./actions-runner-linux-x64-2.274.2.tar.gz  

    
  • 配置 Runner

在这一步中,可能需要根据提示。执行命令 su root,切换到 root 用户,执行 ./bin/installdependencies.sh 安装依赖。

执行 config.sh 开始配置:


        
./config.sh --url https://github.com/shaowenchen/pipeline-test --token AKNLJON6JWRTO35GV3PXGVS7ZHPZO  

    

根据命令的提示,进行如下交互:


        
Enter the name of runner: [press Enter for node1] mycentos  
  
This runner will have the following labels: 'self-hosted', 'Linux', 'X64'  
Enter any additional labels (ex. label-1,label-2): [press Enter to skip] centos  
  
√ Runner successfully added  
√ Runner connection is good  
  
# Runner settings  
  
Enter name of work folder: [press Enter for _work] /home/runner/workspaces  
  
√ Settings Saved.  

    
  • 运行 Runner

        
./run.sh  

    
  • 页面查看 Runner

在 GitHub 的 Actions 页面可以看到新增加的 Runner。

picture.image

  1. 使用测试
  • 添加 workflows 文件

在项目 master 分支,增加文件 .github/workflows/blank.yml ,内容如下:


        
name: CI  
on:  
  push:  
    branches: [ master ]  
  
jobs:  
  hello:  
    runs-on: self-hosted  
    steps:  
      - uses: actions/checkout@v2  
  
      - name: Run a multi-line script  
        run: |  
          date  
          uname -a  

    
  • 查看运行结果

提交文件之后,Actions 马上就会开始运行,执行结果如下图:

picture.image

查看节点上的 workspaces


        
tree -L 3 /home/runner/workspaces/  
  
/home/runner/workspaces/  
|-- _actions  
|   `-- actions  
|       `-- checkout  
|-- _PipelineMapping  
|   `-- shaowenchen  
|       `-- pipeline-test  
|-- pipeline-test  
|   `-- pipeline-test  
|       |-- a  
|       |-- choice  
|       |-- deploy  
|       |-- Jenkinsfile  
|       |-- plain-credential  
|       `-- readme.md  
|-- _temp  
`-- _tool  

    

从 workspaces 中的文件可以看到,Actions 将代码 checkout 到主机上,然后在主机上执行了编排命令。

  1. 参考

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
边缘云原生操作系统设计与思考
《火山引擎边缘云原生操作系统设计与思考》 徐广治 | 火山引擎边缘云资深架构师
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论