Note
GitHubразмещенные в данный момент средства выполнения не поддерживаются в GitHub Enterprise Server. Дополнительные сведения о планируемой поддержке в будущем см. в GitHub public roadmap.
Введение
В этом руководстве вы узнаете об основных компонентах, необходимых для создания и использования упакованного составного действия. Чтобы сосредоточиться в этом руководстве на компонентах, необходимых для упаковки действия, функциональные возможности кода действия будут минимальны. Действие выведет текст Hello World, а затем — Goodbye, или, если вы укажете пользовательское имя, оно выведет Hello [who-to-greet], а затем — Goodbye. Действие также сопоставляет случайное число с выходной переменной random-number и запускает сценарий с именем goodbye.sh.
Завершив этот проект, вы узнаете, как создать собственное составное действие и протестировать его в рабочем процессе.
Warning
При создании рабочих процессов и действий следует всегда учитывать, может ли код выполнять ненадежные входные данные от возможных злоумышленников. Некоторые контексты следует считать непроверенными, так как злоумышленники могут вставить собственное вредоносное содержимое. Дополнительные сведения см. в разделе Защита системы безопасности для GitHub Actions.
Составные действия и многократно используемые рабочие процессы
Составные действия позволяют собирать ряд шагов задания рабочего процесса в одно действие, которое затем можно запустить как один шаг задания в нескольких рабочих процессах. Повторно используемые рабочие процессы позволяют избежать дублирования, позволяя выполнять полный рабочий процесс из других рабочих процессов. Дополнительные сведения см. в разделе Предотвращение дублирования.
Необходимые компоненты
Перед началом работы вы создадите репозиторий на GitHub.
- 
Создайте новую общедоступный репозиторий на GitHub. Вы можете выбрать любое имя репозитория или использовать следующий пример:
hello-world-composite-action. Эти файлы можно добавить после отправки проекта в GitHub. Дополнительные сведения см. в разделе Создание репозитория. - 
Клонируйте репозиторий на ваш компьютер. Дополнительные сведения см. в разделе Клонирование репозитория.
 - 
В окне терминала перейдите в новый репозиторий.
Shell cd hello-world-composite-action
cd hello-world-composite-action - 
В репозитории
hello-world-composite-actionсоздайте новый файлgoodbye.shс примером кода:Shell echo "echo Goodbye" > goodbye.sh
echo "echo Goodbye" > goodbye.sh - 
В окне терминала сделайте
goodbye.shисполняемым файлом. 
git add --chmod=+x -- goodbye.sh
git add --chmod=+x -- goodbye.sh
- 
В окне терминала зарегистрируйте файл
goodbye.sh.Shell git add goodbye.sh git commit -m "Add goodbye script" git push
git add goodbye.sh git commit -m "Add goodbye script" git push 
git add goodbye.sh git commit -m "Add goodbye script" git push
git add goodbye.sh
git commit -m "Add goodbye script"
git push
git commit -m "Add goodbye script" git push
git commit -m "Add goodbye script"
git push
Создание файла метаданных действия
- 
В репозитории
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: bashname: '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см. в разделе Доступ к контекстной информации о запусках рабочих процессов. - 
В окне терминала зарегистрируйте файл
action.yml.Shell git add action.yml git commit -m "Add action" git push
git add action.yml git commit -m "Add action" git push - 
В окне терминала добавьте тег. В этом примере используется тег под названием
v1. Дополнительные сведения см. в разделе Сведения о настраиваемых действиях.Shell git tag -a -m "Description of this release" v1 git push --follow-tags
git tag -a -m "Description of this release" v1 git push --follow-tags 
Тестирование действия в рабочем процессе
В следующем коде рабочего процесса используется завершенное действие hello world, которое вы сделали в Создание составного действия.
Скопируйте код .github/workflows/main.yml рабочего процесса в файл в другом репозитории, заменив OWNER владельца SHA репозитория и SHA фиксации, которую вы хотите использовать соответственно. Вы также можете заменить входное поле who-to-greet на свое имя.
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 }}
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.