Действия Github [бета] делят рабочее пространство / артефакты между заданиями?
Пытаясь использовать бета-действия Github, у меня есть две работы, одна для создания кода, а другая для развертывания кода. Однако я не могу получить артефакт сборки в задании на развертывание.
Моя последняя попытка состоит в том, чтобы вручную установить изображение контейнера с одинаковыми объемами для каждого задания, в соответствии с документацией это должно быть решением: https://help.github.com/en/articles/workflow-syntax-for-github-actions
Устанавливает массив томов для контейнера. Вы можете использовать тома для обмена данными между службами или другими этапами работы. Вы можете указать именованные тома Docker, анонимные тома Docker или привязать монтирования на хосте.
Workflow
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
флаги.
5 ответов
Вы можете использовать артефакт загрузки и артефакта загрузки Github Actions для обмена данными между заданиями.
В job1:
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
Для тех, кто заинтересован в совместном использовании образа 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
Использовать кеш или загрузку/выгрузку артефактов
Кэширование используется для повторного использования данных/файлов между заданиями или рабочими процессами, а артефакты используются для сохранения файлов после завершения рабочего процесса.
Если вы используете действия GitHub для загрузки / скачивания, остерегайтесь структуры артефакта.
С января 2020 г. см. "Действия GitHub: изменения в загрузке артефактов":
Мы изменили способ загрузки артефактов в GitHub Actions, чтобы он больше не добавлял дополнительный корневой каталог в загружаемый архив.
Раньше, если вы загружали следующие файлы и папки в качестве артефакта с именем
foo
, скачанный архив будет содержать следующую структуру:foo/ |-- file1.txt |-- dir1/ | |-- dir1-file1.txt
Теперь вы получите архив, содержащий только загруженные вами файлы и папки:
file1.txt dir1/ |-- dir1-file1.txt
Каждое задание выполняется на отдельном раннере.
Загрузить реализацию действия артефакта
Действие Github « actions/ » загружает файлы по указанному пути в расположение контейнера хранилища.
В следующем задании, когда вы запускаете действие « actions/ [email protected][email protected] », он загружает артефакт из «местоположения контейнера хранилища», где предыдущее задание загружало артефакты по указанному пути.
Реализация артефакта загрузки и отображение пути загрузки
Для получения дополнительной информации см. ссылки ниже,