No description
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2025-04-02 16:28:12 +03:00
action.yml wo proxy 2025-04-02 16:28:12 +03:00
LICENSE init 2025-01-31 15:40:12 +03:00
README.md init 2025-01-31 15:40:12 +03:00
skopeo-operations.sh wo proxy 2025-04-02 16:28:12 +03:00

Skopeo Image Operations

Этот GitHub Action (действие) выполняет копирование Docker-образов из указанного источника в целевое назначение Skopeo, а так же удаление и инспектирование образов в источнике. Он поддерживает аутентификацию в реестрах, если это необходимо.

Skopeo — это мощный инструмент для работы с контейнерными образами, который в том числе поддерживает копирование образов между реестрами без необходимости их загрузки на локальную машину.

Для работы этому действию требуется установленный пакет jq.

Выполняемые операции

Задаются входным параметром operation:

  • copy — копирование образа из одного реестра в другой;
  • delete — удаление образа из исходного реестра;
  • inspect — инспектирование образа в исходном реестре.

Если параметр явно не указан, то выполняется копирование copy.

Не все реестры поддерживают удаление. Смотри https://github.com/containers/skopeo/blob/main/docs/skopeo-delete.1.md

Источники и цели для skopeo

Плагин поддерживает все возможные ресурсы и цели для skopeo copy:

  • docker:// (Docker Registry)
  • oci: (OCI-образы)
  • dir: (локальная папка)
  • docker-archive: (Docker-архив)
  • oci-archive: (OCI-архив)
  • containers-storage: (локальное хранилище контейнеров)

Как работает аутентификация?

Аутентификация выполняется только для источников и целей типа docker://. Для других типов источников и целей аутентификация не требуется.

Если учетные данные указаны (source_username, source_password, target_username, target_password), они будут использованы для аутентификации.

Если реестр публичный, то логин и пароль необязательны.

Использование

Копирование из Docker Registry в OCI-архив

...

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      ...

      - name: Copy from Reg to OCI
        uses: https://git.xciii.ru/coral/skopeo-copy-action@main
        with:
          source: docker://docker.io/source/repo:tag
          target: oci-archive:/path/to/archive.tar
          source_username: ${{ secrets.SOURCE_USERNAME }}
          source_password: ${{ secrets.SOURCE_PASSWORD }}

Копирование из локальной папки в Docker Registry

...

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      ...

      - name: Copy from Dir to Reg
        uses: https://git.xciii.ru/coral/skopeo-copy-action@main
        with:
          source: dir:/path/to/source
          target: docker://docker.io/target/repo:tag
          target_username: ${{ secrets.TARGET_USERNAME }}
          target_password: ${{ secrets.TARGET_PASSWORD }}

Копирование из Docker Registry в локальное хранилище контейнеров

...

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      ...

      - name: Copy from Reg to Local Storage
        uses: https://git.xciii.ru/coral/skopeo-copy-action@main
        with:
          source: docker://docker.io/source/repo:tag
          target: containers-storage:my-image:tag
          source_username: ${{ secrets.SOURCE_USERNAME }}
          source_password: ${{ secrets.SOURCE_PASSWORD }}

Удаление образа из Docker Registry

...

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      ...

      - name: Delete from Reg
        uses: https://git.xciii.ru/coral/skopeo-copy-action@main
        with:
          operation: delete
          source: docker://docker.io/image/to-delete:tag
          source_username: ${{ secrets.SOURCE_USERNAME }}
          source_password: ${{ secrets.SOURCE_PASSWORD }}

Инспектирование образа из Docker Registry

...

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      ...

      - name: Inspect from Reg
        id: inspect_step             # Идентификатор шага для использования outputs
        uses: https://git.xciii.ru/coral/skopeo-copy-action@main
        with:
          operation: inspect
          source: docker://docker.io/image/to-inspect:tag
          source_username: ${{ secrets.SOURCE_USERNAME }}
          source_password: ${{ secrets.SOURCE_PASSWORD }}

Входные параметры

Параметр Описание Обязательный По умолчанию
operation Операция: copy (копирование), delete (удаление) или inspect (инспектирование) Да copy
source Источник образа (например, docker://source-registry/image:tag). Да -
target Целевой реестр (например, oci-archive:/path/to/archive.tar). Да, при копировании -
source_username Имя пользователя для аутентификации в исходном реестре (опционально). Нет -
source_password Пароль для аутентификации в исходном реестре (опционально). Нет -
target_username Имя пользователя для аутентификации в целевом реестре (опционально). Нет -
target_password Пароль для аутентификации в целевом реестре (опционально). Нет -

Выходные параметры

Результат работы inspect сохраняется в $GITHUB_OUTPUT и может быть использован в других шагах:

- name: 'Use inspect result'
  run: |
    echo "${{ steps.inspect_step.outputs.inspect_result }}"

Локальное тестирование

Вы можете протестировать Action локально с помощью act:

  1. Установите act:

    brew install act
    
  2. Запустите тестирование:

    act -s GITHUB_TOKEN=<your-token>
    

Автор

coral xciii