Действия 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] », он загружает артефакт из «местоположения контейнера хранилища», где предыдущее задание загружало артефакты по указанному пути.

Реализация артефакта загрузки и отображение пути загрузки

Для получения дополнительной информации см. ссылки ниже,

Действие Github для загрузки артефактов

Действие Github для загрузки артефактов

Другие вопросы по тегам