是否可以在 GitHub 个操作中的操作之间保留 WORKDIR?
Is it possible to persist a WORKDIR between Actions in GitHub Actions?
今天早上我收到了 GitHub Actions BETA 邀请 (wooo) 并开始使用它,目的是迁移我目前拥有的一些简单的构建、测试和部署管道 运行在 CircleCI 上。
我仍在努力了解 Actions,但我想到的流程是在推送之后,工作流中的第一个 Action 将启动一个 Docker 容器。在该容器内,我将 运行 一些简单的构建过程,例如最小化资产和移除人工制品。下一个操作将 运行 对构建进行一些测试。管道中的下一个 Action(s) 将部署到多个环境之一,具体取决于我推送到的分支。
我已经按照 https://developer.github.com/actions/creating-github-actions/creating-a-docker-container/ 上的文档进行操作,并且有一个基本的工作流程,可以启动 Docker 容器和 运行 WORKDIR
中的一些构建命令。我也可以从 WORKDIR
内部 运行 部署(通过 rsync)。
但是,我想将它拆分成单独的 steps/Actions,但我想不出办法。
本质上,这类似于我正在使用的 CircleCI jobs/workflow 模型。但是,对于 CircleCI,第一个作业 运行 是一个构建,然后在整个工作流的其余部分中保留生成的目录结构,如下所示:
# Persist dist directory
- persist_to_workspace:
root: ~/project
paths:
- .
所以,我有点把 CircleCI 的工作等同于 GitHub 的操作,这可能是错误的做法?本质上,我想知道的是我是否可以在第一个 Action 的 Docker 容器中保留一个 WORKDIR
并使该 WORKDIR
可用于后续 Actions。
这可能吗,还是我与我的想象相去甚远GitHub行动可以做到?
谢谢!
我自己回答这个问题以防其他人遇到这个问题(和我一样,没有完全阅读文档!)。 :o)
文档 here 进行了解释,但本质上,您作为操作的一部分启动的任何容器的工作目录都以 /github/workspace
的形式存在。动作可以修改这个工作目录的内容,当容器在工作流的后续动作中启动时,这些 actions/containers 的工作目录将包含工作流之前所做的修改。
所以,答案是肯定的,/github/workspace
处的 Docker WORKDIR
在整个 GitHub Actions 工作流中持续存在,其方式与它在CircleCI 工作流程。
在我今天的测试中,它无法在作业之间保留文件。 CircleCi 可以,您可以在那里存储一些内容以供下次作业阅读,但在 GitHub 操作上我不能。
以下是我的测试:
在作业上写入文件,在下一个作业上尝试读取
二手 test file.
1) 写在 GITHUB_WORKSPACE
我的路径:/home/runner/work/github-actions-test/github-actions-test)
结果:第一份工作可写可读,但第二份工作为空
Action link
2) 写在 /github/home
我的路径:/github/home
结果:cannot access '/github/home/
Action link
3) 写在 /home
我的路径:/home
结果:touch: cannot touch '/home/myFile.txt': Permission denied
Action link
今天早上我收到了 GitHub Actions BETA 邀请 (wooo) 并开始使用它,目的是迁移我目前拥有的一些简单的构建、测试和部署管道 运行在 CircleCI 上。
我仍在努力了解 Actions,但我想到的流程是在推送之后,工作流中的第一个 Action 将启动一个 Docker 容器。在该容器内,我将 运行 一些简单的构建过程,例如最小化资产和移除人工制品。下一个操作将 运行 对构建进行一些测试。管道中的下一个 Action(s) 将部署到多个环境之一,具体取决于我推送到的分支。
我已经按照 https://developer.github.com/actions/creating-github-actions/creating-a-docker-container/ 上的文档进行操作,并且有一个基本的工作流程,可以启动 Docker 容器和 运行 WORKDIR
中的一些构建命令。我也可以从 WORKDIR
内部 运行 部署(通过 rsync)。
但是,我想将它拆分成单独的 steps/Actions,但我想不出办法。
本质上,这类似于我正在使用的 CircleCI jobs/workflow 模型。但是,对于 CircleCI,第一个作业 运行 是一个构建,然后在整个工作流的其余部分中保留生成的目录结构,如下所示:
# Persist dist directory
- persist_to_workspace:
root: ~/project
paths:
- .
所以,我有点把 CircleCI 的工作等同于 GitHub 的操作,这可能是错误的做法?本质上,我想知道的是我是否可以在第一个 Action 的 Docker 容器中保留一个 WORKDIR
并使该 WORKDIR
可用于后续 Actions。
这可能吗,还是我与我的想象相去甚远GitHub行动可以做到?
谢谢!
我自己回答这个问题以防其他人遇到这个问题(和我一样,没有完全阅读文档!)。 :o)
文档 here 进行了解释,但本质上,您作为操作的一部分启动的任何容器的工作目录都以 /github/workspace
的形式存在。动作可以修改这个工作目录的内容,当容器在工作流的后续动作中启动时,这些 actions/containers 的工作目录将包含工作流之前所做的修改。
所以,答案是肯定的,/github/workspace
处的 Docker WORKDIR
在整个 GitHub Actions 工作流中持续存在,其方式与它在CircleCI 工作流程。
在我今天的测试中,它无法在作业之间保留文件。 CircleCi 可以,您可以在那里存储一些内容以供下次作业阅读,但在 GitHub 操作上我不能。
以下是我的测试:
在作业上写入文件,在下一个作业上尝试读取
二手 test file.
1) 写在 GITHUB_WORKSPACE
我的路径:/home/runner/work/github-actions-test/github-actions-test)
结果:第一份工作可写可读,但第二份工作为空
Action link
2) 写在 /github/home
我的路径:/github/home
结果:cannot access '/github/home/
Action link
3) 写在 /home
我的路径:/home
结果:touch: cannot touch '/home/myFile.txt': Permission denied
Action link