Github 操作在作业之间共享工作空间/工件?

试图使用 Github 的 beta 操作,我有两个工作,一个是构建代码,另一个是部署代码。然而,我似乎无法在部署作业中获得构建构件。

我最近的尝试是手动设置一个容器映像与相同的卷为每个作业,根据文档这应该是解决方案: https://help.github.com/en/articles/workflow-syntax-for-github-actions#jobsjob_idcontainervolumes

设置容器要使用的卷数组。您可以使用卷在作业中的服务或其他步骤之间共享数据。您可以指定命名 Docker 卷、匿名 Docker 卷或主机上的绑定挂载。

工作流程

name: CI
on:
push:
branches:
- master
paths:
- .github/workflows/server.yml
- server/*
jobs:
build:
runs-on: ubuntu-latest
container:
image: docker://node:10
volumes:
- /workspace:/github/workspace
steps:
- uses: actions/checkout@master
- run: yarn install
working-directory: server
- run: yarn build
working-directory: server
- run: yarn test
working-directory: server
- run: ls
working-directory: server
deploy:
needs: build
runs-on: ubuntu-latest
container:
image: docker://google/cloud-sdk:latest
volumes:
- /workspace:/github/workspace
steps:
- uses: actions/checkout@master
- run: ls
working-directory: server
- run: gcloud --version

第一个作业(构建)有一个构建目录,但是当第二个作业(部署)运行时,它不包含源代码,而且只包含源代码。

这个项目是一个单一回购的代码,我试图部署在路径 server下,因此所有的 working-directory标志。

54197 次浏览

您可以使用 GithubActions 上传工件和下载工件在作业之间共享数据。

职业1:

steps:
- uses: actions/checkout@v1


- run: mkdir -p path/to/artifact


- run: echo hello > path/to/artifact/world.txt


- uses: actions/upload-artifact@master
with:
name: my-artifact
path: path/to/artifact

还有工作2:

steps:
- uses: actions/checkout@master


- uses: actions/download-artifact@master
with:
name: my-artifact
path: path/to/artifact
    

- run: cat path/to/artifact/world.txt

Https://github.com/actions/upload-artifact
Https://github.com/actions/download-artifact

如果您正在使用上传/下载 GitHub Actions,请注意工件的结构。

从2020年1月开始,请参阅“ GitHub Actions: 工件下载体验的更改”:

我们已经将 GitHub Actions 中的工件下载体验改为 它不再向下载的归档文件添加额外的根目录

以前,如果您将下列文件和文件夹作为一个名为 foo的工件上传,那么下载的归档文件将包含以下结构:

foo/
|-- file1.txt
|-- dir1/
|    |-- dir1-file1.txt

现在,您将得到一个只包含您上传的文件和文件夹的存档:

file1.txt
dir1/
|-- dir1-file1.txt

对于那些有兴趣在两份工作之间分享 Docker 形象的人,以下是我的做法:

jobs:
docker-build:
name: Docker build
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2


- name: Build Docker image
run: |
docker build -t foo/bar:$GITHUB_SHA
mkdir -p path/to/artifacts
docker save foo/bar:$GITHUB_SHA > path/to/artifacts/docker-image.tar
          

- name: Temporarily save Docker image
uses: actions/upload-artifact@v2
with:
name: docker-artifact
path: path/to/artifacts
retention-days: 1


docker-deploy:
name: Deploy to Docker Hub
runs-on: ubuntu-latest
needs: docker-build
steps:
- name: Checkout
uses: actions/checkout@v2


- name: Retrieve saved Docker image
uses: actions/download-artifact@v2
with:
name: docker-artifact
path: path/to/artifacts


- name: Docker load
run: |
cd path/to/artifacts
docker load < docker-image.tar
# docker_build_push.sh

非常受 https://github.com/unfor19/install-aws-cli-action/actions/runs/400601222/workflow的启发

谢谢

使用 缓存或工件上传/下载

缓存 用于在作业或工作流之间重用数据/文件,而 艺术品用于在工作流结束后保存文件。

每个作业在单独的运行器上运行。

上传工件动作实现

GithubAction“ Action/upload- 艺术品@v3”将文件从提供的路径上传到存储容器位置。

在下一个作业中,当您运行动作“ Actions/download-晃动/下载-藏品@v3”时,它从“存储容器位置”下载工件,前一个作业将工件上传到提供的路径。

下载工件和显示下载路径的实现

有关详细信息,请参阅以下链接,

上传工件的 Github 操作

下载工件的 Github 操作