Skip to main content

Создание составного действия

В этом руководстве приведены инструкции по созданию составного действия.

Platform navigation

Введение

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

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

Warning

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

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

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

Необходимые компоненты

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

  1. Создайте новую общедоступный репозиторий на GitHub. Вы можете выбрать любое имя репозитория или использовать следующий пример: hello-world-composite-action. Эти файлы можно добавить после отправки проекта в GitHub. Дополнительные сведения см. в разделе Создание репозитория.

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

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

    Shell
    cd hello-world-composite-action
    
  4. В репозитории hello-world-composite-action создайте новый файл goodbye.sh с примером кода:

    Shell
    echo "echo Goodbye" > goodbye.sh
    
  5. В окне терминала сделайте goodbye.sh исполняемым файлом.

Shell
git add --chmod=+x -- goodbye.sh
  1. В окне терминала зарегистрируйте файл goodbye.sh.

    Shell
    git add goodbye.sh
    git commit -m "Add goodbye script"
    git push
    
Shell
git add goodbye.sh
git commit -m "Add goodbye script"
git push
Shell
git commit -m "Add goodbye script"
git push

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

  1. В репозитории hello-world-composite-action создайте файл под названием action.yml и добавьте следующий пример кода. Дополнительные сведения об этом синтаксисе см. в разделе "Синтаксис метаданных для GitHub Actions".

    YAML
    name: 'Hello World'
    description: 'Greet someone'
    inputs:
      who-to-greet:  # id of input
        description: 'Who to greet'
        required: true
        default: 'World'
    outputs:
      random-number:
        description: "Random number"
        value: ${{ steps.random-number-generator.outputs.random-number }}
    runs:
      using: "composite"
      steps:
        - name: Set Greeting
          run: echo "Hello $INPUT_WHO_TO_GREET."
          shell: bash
          env:
            INPUT_WHO_TO_GREET: ${{ inputs.who-to-greet }}
    
        - name: Random Number Generator
          id: random-number-generator
          run: echo "random-number=$(echo $RANDOM)" >> $GITHUB_OUTPUT
          shell: bash
    
        - name: Set GitHub Path
          run: echo "$GITHUB_ACTION_PATH" >> $GITHUB_PATH
          shell: bash
          env:
            GITHUB_ACTION_PATH: ${{ github.action_path }}
    
        - name: Run goodbye.sh
          run: goodbye.sh
          shell: bash
    
    

    Этот файл определяет входные данные, сопоставляет who-to-greet случайно созданное число с random-number выходной переменной, добавляет путь действия к системному пути runner (чтобы найти goodbye.sh скрипт во время выполнения) и запускает goodbye.sh скрипт.

    Дополнительные сведения об управлении выходными данными см. в разделе "Синтаксис метаданных для GitHub Actions".

    Дополнительные сведения об использовании github.action_pathсм. в разделе "Доступ к контекстной информации о запусках рабочих процессов".

  2. В окне терминала зарегистрируйте файл action.yml.

    Shell
    git add action.yml
    git commit -m "Add action"
    git push
    
  3. В окне терминала добавьте тег. В этом примере используется тег под названием v1. Дополнительные сведения см. в разделе Сведения о настраиваемых действиях.

    Shell
    git tag -a -m "Description of this release" v1
    git push --follow-tags
    

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

В следующем коде рабочего процесса используется завершенное действие hello world, сделанное в autoTITLE.

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

YAML
on: [push]

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
      - uses: actions/checkout@v4
      - id: foo
        uses: OWNER/hello-world-composite-action@SHA
        with:
          who-to-greet: 'Mona the Octocat'
      - run: echo random-number "$RANDOM_NUMBER"
        shell: bash
        env:
          RANDOM_NUMBER: ${{ steps.foo.outputs.random-number }}

В репозитории перейдите на вкладку Действия и выберите последний запуск рабочего процесса. Выходные данные должны включать: Hello Mona the Octocat, результат сценария Goodbye и случайное число.

Пример составных действий на GitHub

Вы можете найти множество примеров составных действий на GitHub.