Skip to main content
Мы публикуем частые обновления нашей документации, и перевод этой страницы может все еще выполняться. Актуальные сведения см. в документации на английском языке.

Поддержка этой версии GitHub Enterprise была прекращена 2023-03-15. Исправления выпускаться не будут даже при критических проблемах безопасности. Для повышения производительности, укрепления безопасности и новых функций установите последнюю версию GitHub Enterprise. Чтобы получить справку по обновлению, обратитесь в службу поддержки GitHub Enterprise.

Создание действия контейнера Docker

В этом руководстве показаны минимально необходимые шаги для создания действия контейнера Docker.

Примечание. В GitHub Enterprise Server в настоящее время не поддерживаются средства выполнения тестов, размещенные в GitHub. Дополнительные сведения о планируемой поддержке в будущем см. в GitHub public roadmap.

Введение

В этом руководстве вы узнаете об основных компонентах, необходимых для создания и использования упакованного действия контейнера Docker. Чтобы была возможность сосредоточить это руководство на компонентах, необходимых для упаковки действия, функциональные возможности кода действия минимальны. Действие выводит Hello World в журналах или Hello [who-to-greet] при указании настраиваемого имени.

Завершив этот проект, вы должны понять, как создать собственное действие контейнера Docker и протестировать его в рабочем процессе.

В локальных средствах выполнения должна использоваться операционная система Linux и должен быть установлен Docker для выполнения действий с контейнерами Docker. Дополнительные сведения о требованиях локальных средств выполнения тестов см. в разделе О самостоятельно размещенных средствах выполнения.

Предупреждение. Во время создания рабочих процессов и действий необходимо учитывать, будет ли код использовать непроверенные входные данные от возможных злоумышленников. Некоторые контексты следует считать непроверенными, так как злоумышленники могут вставить собственное вредоносное содержимое. Дополнительные сведения см. в разделе Защита системы безопасности для GitHub Actions.

Предварительные требования

Возможно, полезно иметь базовое представление о переменных среды GitHub Actions и файловой системе контейнера Docker.

Перед началом работы необходимо создать репозиторий GitHub.

  1. Создайте репозиторий в экземпляр GitHub Enterprise Server. Вы можете выбрать любое имя репозитория или использовать hello-world-docker-action, как в этом примере. Дополнительные сведения см. в разделе Создание репозитория.

  2. Клонируйте репозиторий на ваш компьютер. Дополнительные сведения см. в разделе Клонирование репозитория.

  3. В терминале измените каталоги на новый репозиторий.

    Shell
    cd hello-world-docker-action

Создание файла Dockerfile

В новом каталоге hello-world-docker-action создайте файл Dockerfile. Убедитесь, что имя файла имеет прописную букву (используйте прописную букву D, но не прописную букву f), если у вас возникли проблемы. Дополнительные сведения см. в разделе Поддержка Dockerfile для GitHub Actions.

Dockerfile

Dockerfile
# Container image that runs your code
FROM alpine:3.10

# Copies your code file from your action repository to the filesystem path `/` of the container
COPY entrypoint.sh /entrypoint.sh

# Code file to execute when the docker container starts up (`entrypoint.sh`)
ENTRYPOINT ["/entrypoint.sh"]

Создание файла метаданных действия

Создайте новый файл action.yml в каталоге hello-world-docker-action. Дополнительные сведения см. в разделе Синтаксис метаданных для GitHub Actions.

action.yml

YAML
# action.yml
name: 'Hello World'
description: 'Greet someone and record the time'
inputs:
  who-to-greet:  # id of input
    description: 'Who to greet'
    required: true
    default: 'World'
outputs:
  time: # id of output
    description: 'The time we greeted you'
runs:
  using: 'docker'
  image: 'Dockerfile'
  args:
    - ${{ inputs.who-to-greet }}

Эти метаданные определяют один входной параметр who-to-greet и один выходной параметр time. Чтобы передать входные данные в контейнер Docker, необходимо объявить входные данные с помощью inputs и передать их в ключевом слове args. Все, что вы включаете в контейнер, передается в контейнер args, но для лучшего обнаружения для пользователей вашего действия мы рекомендуем использовать входные данные.

GitHub создаст образ из образа Dockerfile и выполнит команды в новом контейнере с помощью этого образа.

Написание кода действия

Вы можете выбрать любой базовый образ Docker и, следовательно, любой язык для своего действия. В указанном ниже примере скрипта оболочки используется входная переменная who-to-greet для печати Hello [who-to-greet] в файле журнала.

Затем скрипт получает текущее время и задает его в качестве выходной переменной, которая может использовать действия, выполняемые позже в задании. Чтобы GitHub распознал выходные переменные, необходимо использовать команду рабочего процесса в определенном синтаксисе: echo "::set-output name=<output name>::<value>". Дополнительные сведения см. в разделе Команды рабочего процесса для GitHub Actions.

  1. Создайте файл entrypoint.sh в новом каталоге hello-world-docker-action.

  2. Добавьте в файл entrypoint.sh указанный ниже код.

    entrypoint.sh

    Shell
    #!/bin/sh -l
    
    echo "Hello $1"
    time=$(date)
    echo "::set-output name=time::$time"

    Если entrypoint.sh выполняется без ошибок, состояние действия имеет значение success. Вы также можете явно задать коды выхода в коде действия, чтобы предоставить состояние действия. Дополнительные сведения см. в разделе Настройка кодов выхода для действий.

  3. entrypoint.sh Сделайте файл исполняемым. Git предоставляет способ явного изменения режима разрешений для файла, чтобы он не сбрасывал каждый раз при наличии клона или вилки.

    Shell
    $ git add entrypoint.sh
    $ git update-index --chmod=+x entrypoint.sh
  4. При необходимости, чтобы проверка режим разрешений файла в индексе Git, выполните следующую команду.

    Shell
    $ git ls-files --stage entrypoint.sh

    Результат, подобный 100755 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 entrypoint.sh этому, означает, что файл имеет разрешение на исполняемый файл. В этом примере 755 обозначает разрешение исполняемого файла.

Создание файла README

Чтобы сообщить людям, как применить свое действие, можно создать файл README. Файл README является наиболее полезным, если вы планируете поделиться своим действием публично, но также является отличным способом напомнить вам или вашей команде, как использовать действие.

В каталоге hello-world-docker-action создайте файл README.md, указывающий следующие сведения:

  • подробное описание того, что делает действие;
  • обязательные входные и выходные аргументы;
  • необязательные входные и выходные аргументы;
  • секреты, используемые действием;
  • переменные среды, используемые действием;
  • пример использования действия в рабочем процессе.

README.md

markdown
# Hello world docker action

This action prints "Hello World" or "Hello" + the name of a person to greet to the log.

## Inputs

## `who-to-greet`

**Required** The name of the person to greet. Default `"World"`.

## Outputs

## `time`

The time we greeted you.

## Example usage

uses: actions/hello-world-docker-action@v1
with:
  who-to-greet: 'Mona the Octocat'

Фиксация действия, добавление тегов к нему и его отправка в GitHub Enterprise Server

В терминале зафиксируйте файлы action.yml, entrypoint.sh, Dockerfile и README.md.

Рекомендуется также добавить тег версии для выпусков действия. Дополнительные сведения о настройке версий действия см. в разделе Сведения о настраиваемых действиях.

Shell
git add action.yml entrypoint.sh Dockerfile README.md
git commit -m "My first action is ready"
git tag -a -m "My first action release" v1
git push --follow-tags

Тестирование действия в рабочем процессе

Теперь вы готовы протестировать действие в рабочем процессе.

— если действие находится в частном репозитории, действие может использоваться только в рабочих процессах в том же репозитории. — если действие находится во внутреннем репозитории, действие можно использовать только в рабочих процессах в том же репозитории.

  • Общедоступные действия могут использоваться рабочими процессами в любом репозитории.

Примечание. GitHub Actions в экземпляр GitHub Enterprise Server может иметь ограниченный доступ к действиям в GitHub.com или GitHub Marketplace. Дополнительные сведения см. в разделе Управление доступом к действиям с сайта GitHub.com и обратитесь к администратору сайта GitHub Enterprise.

Пример использования общедоступного действия

В указанном ниже коде рабочего процесса используется готовое действие hello world в общедоступном репозитории actions/hello-world-docker-action. Скопируйте указанный ниже пример кода рабочего процесса в файл .github/workflows/main.yml, но замените actions/hello-world-docker-action именем репозитория и действия. Вы также можете заменить именем входные данные who-to-greet.

.github/workflows/main.yml

YAML
on: [push]

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
      - name: Hello world action step
        id: hello
        uses: actions/hello-world-docker-action@v1
        with:
          who-to-greet: 'Mona the Octocat'
      # Use the output from the `hello` step
      - name: Get the output time
        run: echo "The time was ${{ steps.hello.outputs.time }}"

Пример применения частного действия

Скопируйте указанный ниже пример кода рабочего процесса в файл .github/workflows/main.yml в репозитории действия. Вы также можете заменить именем входные данные who-to-greet.

.github/workflows/main.yml

YAML
on: [push]

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
      # To use this repository's private action,
      # you must check out the repository
      - name: Checkout
        uses: actions/checkout@v2
      - name: Hello world action step
        uses: ./ # Uses an action in the root directory
        id: hello
        with:
          who-to-greet: 'Mona the Octocat'
      # Use the output from the `hello` step
      - name: Get the output time
        run: echo "The time was ${{ steps.hello.outputs.time }}"

В репозитории перейдите на вкладку Действия и выберите последний запуск рабочего процесса. В разделе Задания или в графе визуализации щелкните Задание для отображения приветствия.

Щелкните Шаг действия Hello world, и вы увидите "Hello Mona the Octocat" или имя, которое вы использовали для who-to-greet входных данных, напечатанных в журнале. Щелкните Получить выходное время , чтобы просмотреть метку времени.