尝试使用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
标志。
答案 0 :(得分:12)
您可以使用Github Actions上传工件和下载工件来在作业之间共享数据。
在工作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
https://github.com/actions/upload-artifact
https://github.com/actions/download-artifact
答案 1 :(得分:9)
如果您使用的是上传/下载GitHub Action,请当心构件的结构。
从2020年1月开始,请参阅“ GitHub Actions: Changes to artifact download experience”:
我们已经更改了GitHub Actions中的工件下载体验,因此它不再向下载的存档中添加额外的根目录。
以前,如果您将以下文件和文件夹作为名为
foo
的工件上传,则下载的归档文件将包含以下结构:foo/ |-- file1.txt |-- dir1/ | |-- dir1-file1.txt
现在,您将获得一个存档,其中仅包含您上载的文件和文件夹:
file1.txt dir1/ |-- dir1-file1.txt
答案 2 :(得分:3)
对于那些有兴趣在两个作业之间共享 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
的启发谢谢@unfor19