4

我创建了一个新的 Rust 项目并决定,我将尝试在Github Actions上针对每个拉取请求运行自动构建和测试:

name: Rust
on: [pull_request]

我花了一段时间才注意到,默认情况下,Github Actions 根本不会检查我的代码,并且GITHUB_WORKSPACE只是空的。所以,我尝试手动克隆存储库。做这样的事情:

REPO=/tmp/path/to/repository
git clone https://github.com/myself/mycode.git $REPO

但这只是检查默认分支上的任何内容。所以,我调查了检查$GITHUB_SHA结果是我的存储库不知道的东西。$GITHUB_REF空的也是如此。

在这一点上,我对自己在做什么一无所知。我最初的假设是,实际上配置为运行的作业on: [pull request]应该具有完全相同的代码,但它无法检查并准备它。

我还调查了提供的Checkout Actions

此操作将您的存储库签出到$GITHUB_WORKSPACE,以便您的工作流可以访问存储库的内容。

默认情况下,这等效于运行git fetchand git checkout $GITHUB_SHA,因此您将始终拥有触发工作流的版本的 repo 内容。请参阅此处以了解$GITHUB_SHA不同类型的事件是什么。

但正如我之前所说,$GITHUB_WORKSPACE完全是空的,agit fetch只会告诉你没有 git 存储库。

这是一个这样的示例失败

On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
fatal: reference is not a tree: d76745134ae45905e4a0ab8d27c92f1e2544bdc1
##[error]Process completed with exit code 128.

$GITHUB_SHA如果我的存储库不知道它怎么办?我完全误解了 Github Actions 吗?如何使用 Github Actions 签出最新提交,即在拉取请求中?

是我失败的年表

4

1 回答 1

10

您应该使用处理结帐的官方操作。'github-actions做事方式需要一些时间来适应,因为它是一个项目管理套件,不仅仅满足 CI/CD 需求。

所以,有些事情肯定会有点奇怪或麻烦,主要是因为所有这一切的文档还不是很成熟——但是,嘿,它是一个测试版是有原因的。

这个动作的基本用法是:

  • 找到steps您希望签出当前提交的部分
  • 在编写依赖于代码的步骤之前添加操作,通常在最顶部
  • 决定要使用哪个版本的操作@master,教程通常会有,但命名当前最新版本更安全一些 - 在这种情况下@v1
  • 享受您的工作流程
jobs:
  build:
    runs-on: ubuntu-latest
    steps:

      # may or may not have a name, it's quite self-descriptive
      - uses: actions/checkout@v1

      # run steps that rely on the code in the commit that was pushed
      - name: test code
        steps: ...
      - name: build package
        steps: ...
于 2019-09-20T09:56:25.903 回答