如何在同一代码库的Github Actions之间共享代码?

10
假设我想在我的代码库中有两个工作流程 build.ymlrelease.yml。第一个应该构建项目(假设使用的是CMake),而第二个应该构建项目并创建一个包含已构建二进制文件的 GitHub 发布版本。
这两个文件中重复了项目构建代码。有什么方法可以共享它们,而不是复制粘贴并且需要手动更新两个地方吗?
我还没有找到一种实现任何形式的代码共享行为的方法,即使是在单个工作流程内的不同作业之间。
2个回答

5

4

选项1:回答上述问题的答案

目前无法直接在 Github Actions 中完成此操作。您需要完成以下步骤才能使其正常工作:

  1. 构建镜像。
  2. 在构建完成后上传至像 S3 或 Artifactory 等存储服务中。
  3. 在此之前的工作流程完成后,下载该镜像。您可以通过从第一个工作流程唤起第二个工作流程来确保工作流程已完成。
  4. 使用下载下来的 artfifacts。

如 Github Actions 所说:

如果您需要访问先前工作流行程中的 artifacts,则需要将 artifacts 存储在某个地方。例如,您可以在工作流程结束时运行脚本将构建 artifacts 存储在Amazon S3 或 Artifactory 上,然后使用存储服务的 API 在将来的工作流程中检索这些 artifacts。

相关资料

选项2:解决方法,以便我们不必处理外部服务但仍停留在 GitHub

在同一工作流程中运行两个 job。一个 job 用于构建,另一个 job 用于发布。这里的想法是当 job build 成功完成时,您将只运行 job release。此外,我们将需要使用 artfifacts 在这两个 job 中传递数据。

相关资料

  build:
     ...
     steps:
     - name: Build image
       run: make ...blah blah
     - name: Upload artifact
       uses: actions/upload-artifact@v2
       with:
         name: name-of-build
         path: ./path/to/artifact
  release:
    needs: build # this basically says only run if build job is successful
    steps:
    - name: Download artifact
      uses: actions/download-artifact@v2
      with:
        name: name-of-build
    - name: Release image
      ...

资源


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接