是否可以在 GitHub 操作中的操作之间保留 WORKDIR?

Con*_*ion 10 github github-actions

我今天早上醒来收到 GitHub Actions BETA 邀请(wooo)并开始玩它,目的是迁移我目前在 CircleCI 上运行的一些简单的构建、测试和部署管道。

我仍在尝试了解 Actions,但我想到的流程是,在推送之后,工作流中的第一个 Action 将启动一个 Docker 容器。在该容器内,我将运行一些简单的构建过程,例如最小化资产和删除人工制品。然后,下一个操作将对构建运行一些测试。管道中的下一个操作将部署到多个环境之一,具体取决于我推送到的分支。

我已经按照https://developer.github.com/actions/creating-github-actions/creating-a-docker-container/ 上的文档进行操作,并有一个基本的工作流程,可以启动 Docker 容器并在其中运行一些构建命令WORKDIR. 我也可以从内部运行部署(通过 rsync)WORKDIR

但是,我想将其拆分为单独的步骤/操作,但我无法找到解决此问题的方法。

本质上,这类似于我正在使用的 CircleCI 作业/工作流模型。但是,使用 CircleCI,第一个作业运行构建,然后在整个工作流的其余部分中保留生成的目录结构,如下所示:

# Persist dist directory
  - persist_to_workspace:
      root: ~/project
      paths:
        - .
Run Code Online (Sandbox Code Playgroud)

所以,我有点将 CircleCI 的 Jobs 等同于 GitHub 的 Actions,这可能是错误的做法?本质上,我想知道的是我是否可以WORKDIR在第一个 Action 的 Docker 容器中保留 a并使其WORKDIR可用于后续的 Action。

这是可能的,还是我想像 GitHub Actions 可以做的事情?

谢谢!

Con*_*ion 8

自己回答这个问题,以防其他人遇到这个问题(并且,像我一样,没有完全阅读文档!)。:o)

这里的文档解释了,但本质上,作为操作的一部分启动的任何容器的工作目录都存在/github/workspace. 动作可以修改这个工作目录的内容,当容器在工作流的后续动作中启动时,这些动作/容器的工作目录将包含工作流中之前所做的修改。

所以,答案是肯定的,Docker WORKDIRat 在/github/workspace整个 GitHub Actions 工作流中都以类似于它在 CircleCI 工作流中持久化的方式持久化。

  • 如果您可以在作业之间保留工作空间,同时使用“job.needs”并行运行作业以获得更快的反馈(不必多次运行昂贵的“yarn install”或“yarn build”步骤,那就太好了)。 (5认同)
  • 这是一个可行的解决方案/sf/answers/4051420691/ (2认同)

Tia*_*vêa 5

在我今天的测试中,它无法在作业之间保留文件。CircleCi 可以,您可以在那里存储一些内容以供下一个作业阅读,但在 GitHub Actions 上我不能。

以下是我的测试:

在一个作业上写入文件,尝试在下一个作业上读取

使用的测试文件

1)在我的路径上写入GITHUB_WORKSPACE
:/home/runner/work/github-actions-test/github-actions-test)结果:第一份工作可写和可读,但是第二份工作操作链接
为空

2)在我的路径上写入/github/home
:/github/home
结果:cannot access '/github/home/ 操作链接

3)在我的路径上写入/home
:/home
结果:touch: cannot touch '/home/myFile.txt': Permission denied
操作链接