GitHub Actions 实际操作

2025-06-07

GitHub Actions 实际操作

感恩节假期期间,我花了一些时间熟悉 GitHub Actions,并设置了一些工作流程。以下是使用 GitHub Actions 为 Rails 项目运行 rspec 测试所需的步骤以及我的一些观察。

但首先,什么是 GitHub Actions?

GitHub Actions 是一些小型的可组合任务,可以组合起来创建工作流程。这些工作流程允许您将团队或项目的软件开发生命周期 (SDLC) 直接嵌入到代码库中。您可以使用这些工作流程进行构建、测试、打包、发布和部署,还可以自动化流程的其他部分,例如分配审阅者、向 Slack 发送通知、检查文件或检查代码覆盖率。

我的第一次刺伤

我第一次尝试运行 rspec 测试的工作流程是这样的:

  1. 在 GitHub 中的“操作”选项卡中,单击“设置此工作流程”以获取建议的 Ruby 工作流程。
  2. 配置为在对主分支的拉取请求(或对已创建拉取请求的分支的任何推送)上运行
  3. 更新为使用我的特定版本的ubuntu-18.04ruby​​ 2.5.7
  4. 改为bundle exec rakebundle exec rspec spec
  5. 提交并创建此分支的 master 拉取请求
  6. 观看所引发的动作!
  7. 然后失败了。WOMP WOMP。😞

测试运行失败

第一个失败是虚拟机上没有 Ruby 2.5.7。

##[error]Version 2.5.7 not found

经过一番研究,我发现(目前)ubuntu-18.04虚拟机仅支持 Ruby 2.5.5。该项目依赖于最新的安全补丁版本 2.5.7。GitHubactions/setup-ruby建议的标准版本不起作用。于是,我从市场上找到了另一个版本(此人也在那里遇到了同样的问题),并安装了特定且正确的 Ruby 版本。通过此操作,我能够使用正确的 Ruby 版本,并将其缓存起来actions/cache。虽然仍然有点慢,但总算成功了。

下一个障碍是无法找到我的 Gemfile 所需的正确捆绑器版本:

Could not find 'bundler' (1.17.3) required by your Gemfile.lock

哎呀。添加-v 1.17.3到 bundler 安装后就解决了这个问题。

然后尝试安装pggem 时失败了:

An error occurred while installing pg (1.0.0), and Bundler cannot continue.
Make sure that `gem install pg -v '1.0.0' --source 'https://rubygems.org/'`
succeeds before bundling.
Enter fullscreen mode Exit fullscreen mode

为了解决这个问题,我们可以使用块将带有 postgresql 的容器拉入我们的工作流中services,该块可用于在另一个容器中托管其他服务,如数据库或缓存。

在我们的工作流文件中,它看起来像这样:

services:
      postgres:
        image: postgres:10.11
        ports: ["5432:5432"]
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
Enter fullscreen mode Exit fullscreen mode

然后我们必须安装postgresql客户端:

- name: Install PostgreSQL 10 Client
      run: |
        sudo apt-get -yqq install libpq-dev
Enter fullscreen mode Exit fullscreen mode

注意:我最初构建时无法安装pggem 是因为这个libpq-dev包不可用。

并设置数据库:

- name: Setup Database
      env:
        PGHOST: localhost
        PGUSER: postgres
        RAILS_ENV: test
      run: |
        gem install bundler -v 1.17.3
        bundle install --jobs 4 --retry 3
        bin/rails db:setup
Enter fullscreen mode Exit fullscreen mode

根据您在此处的需求,您可能需要bin/rails db:create db:schema:load

添加最后三个块(service、安装 postgresql 客户端和设置数据库),我们的测试现在可以运行了!

提交你的.github/workflows/ruby.yml更改。如果你使用 GitHub Actions 编辑器,你将自动创建一个包含此更改的拉取请求,并触发你的操作。如果你在本地进行这些更改,请将它们推送上去并创建拉取请求,然后你就会看到操作的执行效果。

测试运行成功

最终版本

没耐心继续看下去,或者只想看最终版本?来吧!文件位于:.github/workflows/ruby.yml

name: Run Rspec Tests

on:
  pull_request:
    branches:
    - master

jobs:
  build:

    runs-on: ubuntu-18.04

    services:
      postgres:
        image: postgres:10.11
        ports: ["5432:5432"]
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5

    steps:
    - uses: actions/checkout@v1

    - name: Cache Ruby
      uses: actions/cache@preview
      id: cache
      with:
        path: ~/local/rubies
        key: ruby-2.5.7

    - name: Set up Ruby 2.5.7
      uses: clupprich/ruby-build-action@master
      id: ruby
      with:
        ruby-version: 2.5.7
        cache-available: ${{ steps.cache.outputs.cache-hit == 'true' }}

    - name: Print ruby version
      run: ${{ steps.ruby.outputs.ruby-path }} --version

    - name: Install PostgreSQL 10
      run: |
        sudo apt-get -yqq install libpq-dev

    - name: Setup Database
      env:
        PGHOST: localhost
        PGUSER: postgres
        RAILS_ENV: test
      run: |
        gem install bundler -v 1.17.3
        bundle install --jobs 4 --retry 3
        bin/rails db:create db:schema:load

    - name: Build and test with rspec
      env:
        PGHOST: localhost
        PGUSER: postgres
        RAILS_ENV: test
      run: |
        gem install bundler -v 1.17.3
        bundle install --jobs 4 --retry 3
        bundle exec rspec spec
Enter fullscreen mode Exit fullscreen mode

一些观察

这个编辑器……有点不稳定,很烦人,不过在我完全搞清楚自己想做什么之前,我会坚持用它。它总是在我输入和复制粘贴步骤的时候碍事。另外,所有文档都在侧边栏,完整文档在这里

我喜欢 GitHub Actions,因为我无需跳转到其他工具或服务来运行测试并查看结果。我喜欢工作流程就在那里,并且与我的代码一起进行版本控制。这感觉对我的大脑和实际设置来说都轻松多了,不用再跳转到 Circle CI 之类的工具了。

市场上其他人已经写好的动作。不过,正如你搜索 所见slack,那里有大量的动作可供选择,所以谁知道它们的质量如何呢!进入市场并获得验证有一些要求,但我尝试的前几个要求很难被满足。

是否选择在项目中使用 GitHub Actions 可能还取决于你的工具箱里还有哪些其他工具。如果你已经在 CI 中使用 Heroku Pipelines,那么这种方法可能就不再合适了。

下一步是什么?

如果你对代码库的测试方式足够自信,那么下一步或许可以在拉取请求合并到主分支时,自动部署到你的应用。或者,你也可以在构建开始、成功或失败时发送 Slack 通知!

文章来源:https://dev.to/jennapederson/github-actions-in-action-2c5
PREV
CSS 基本资源指南
NEXT
狐狸之道:Vue Vixens 课程