当前位置: 首页 > 知识库问答 >
问题:

是否可以在GitHub操作中的操作之间持久化一个WORKDIR?

寿鸣
2023-03-14

今天早上,我发现了我的GitHub Actions BETA版邀请,并开始玩它,目的是迁移一些我目前在CircleCi上运行的简单构建、测试和部署管道。

我仍然在试图理解操作,但我心目中的流程是,在推动之后,工作流中的第一个操作将启动一个Docker容器。在这个容器中,我将运行一些简单的构建过程,比如最小化资产和移除人工制品。接下来的操作将在构建上运行一些测试。管道中的下一个操作将部署到许多环境中的一个,这取决于我推到的分支。

我跟踪了https://developer.github.com/actions/creating-github-actions/creating-a-docker-container/中的文档,并有了一个基本的工作流,它启动一个Docker容器,并在workdir中运行一些构建命令。我还能够从这个Workdir内部运行部署(通过rsync)。

然而,我想把它分成单独的步骤/行动,但我想不出一个方法来实现这一点。

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

# Persist dist directory
  - persist_to_workspace:
      root: ~/project
      paths:
        - .

所以,我把Circoreci的工作等同于GitHub的行动,这可能是错误的做法?本质上,我试图了解的是,是否可以在第一个操作的Docker容器中持久保存Workdir并使该Workdir可用于后续操作。

这是可能的吗?还是我与我想象的GitHub操作可以做的事情相去甚远?

谢了!

共有1个答案

左丘边浩
2023-03-14

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

这里的文档进行了解释,但实际上,作为操作的一部分启动的任何容器的工作目录都以/github/workspace的形式存在。操作可以修改此工作目录的内容,当容器在工作流期间的后续操作中启动时,这些操作/容器的工作目录将包含工作流中先前进行的修改。

因此,答案是肯定的,位于/GitHub/workspace的Dockerworkdir在整个GitHub操作工作流中的持久化方式类似于它在circoleci工作流中的持久化方式。

 类似资料:
  • 概念 之前的消息应答部分已经看到了如何处理消息不丢失的情况,但是如何保障当 RabbitMQ服务停掉之后消息生产者发送过来的消息不丢失呢? 默认情况下,RabbitMQ退出或者由于某种原因崩溃的时候,它会忽视队列和消息,除非告知它不要这样做。 确保消息不会丢失需要做两件事:将队列和消息都标记为持久化。 队列实现持久化 之前创建的队列都是非持久化的,RabbitMQ如果重启,该队列就会被删掉,如果要

  • 我正在阅读JPA 2.1规范,有这个片段: 通过调用新实体实例上的persist方法或级联persist操作,新实体实例将同时成为托管实例和持久实例。应用于实体X的持久化操作的语义如下:。。。 是否可以在不显式调用persist()方法的情况下调用persist操作,或者persist操作始终必须是通过调用persist()的触发器? 假设我有两个实体A和B,其中A与B有一个域(cascade=P

  • 设置容器要使用的卷数组。可以使用卷在服务或作业中的其他步骤之间共享数据。可以在主机上指定命名Docker卷、匿名Docker卷或绑定挂载。 工作流程 第一个作业(build)有一个build目录,但当第二个作业(deploy)运行时,它没有,只包含源代码。 这个项目是一个mono repo,我试图部署的代码位于路径,因此所有标志。

  • 问题内容: 我正在Jenkins中启动JBoss服务器作为构建动作。下一步操作将运行一组测试。我需要在两个动作之间添加睡眠时间。有谁知道如何轻松地做到这一点? 问题答案: 您可以在测试执行之前在测试构建操作中添加命令(在Unix上)。

  • 我正在编写一个带有事务回滚的简单json数据库。我需要向一个文件追加一行文本,然后根据追加是否成功,将成功或失败记录到另一个文件。如果需要,第二个文件用于回滚。因此,在继续之前,我需要确定写操作是否成功。 我使用stream.write追加我的文本行,其中包括一个回调,应该验证写操作的成功或失败。 然后我在下面的URL上的NodeJS文档中读到了这个不幸的消息https://nodejs.org/

  • 几天来,我一直在探索Apache Flink,我对任务槽的概念有些怀疑。虽然有人问了几个问题,但有一点我不明白。 我正在使用一个toy应用程序进行测试,运行一个本地集群。我已禁用操作员链接 我从文档中知道插槽允许内存隔离而不是CPU隔离。阅读文档,任务槽似乎是一个Java线程。 1)当我以并行度=1部署我的应用程序时,所有运算符的子任务都部署在同一个插槽中。但是,如果我从的方法打印当前线程ID,我