Триггеры ручного рабочего процесса в Github Actions

9

Я настраиваю Github Actions для репозитория проекта.

Рабочий процесс состоит из следующих шагов:

  • Создание образа докера
  • Перенос изображения в реестр контейнера
  • Развернуть развертывание Kubernetes.

Тем не менее, у меня есть два различных развертывания Kubernetes: один для разработки, а другой для производства. Следовательно, у меня также есть два рабочих процесса Github Action.

Рабочий процесс Github Action для разработки запускается при каждом нажатии коммита:

on:
  push:
    branches:
    - master

Но я не хочу этого для моего производственного процесса. Мне нужен ручной триггер, например, кнопка « Отправить в производство» . Я не видел ничего похожего в документах.


Есть ли способ запустить рабочий процесс вручную в Github Actions?

Как я могу разделить процессы разработки и производства для достижения того, чего я хочу, в Github Actions, Docker или Kubernetes?

Антуан С.
источник

Ответы:

9

Есть ли способ запустить рабочий процесс вручную в Github Actions?

У меня есть небольшой взлом, чтобы сделать это ...

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

on:
  watch
    types: [started]

Я знаю, что это странное дерьмо, но это работает! Тем не менее, это не лучший способ, если это публичное репо с потенциальными звездами.


Как я могу разделить процессы разработки и производства для достижения того, чего я хочу, в Github Actions, Docker или Kubernetes?

В Github Actions, я имею в виду, вы можете выполнять несколько рабочих процессов / заданий и фильтровать по целевым ветвям или событиям. Вы можете объединить несколько событий, например, запустить рабочий процесс для push и cron в полночь.

Сара Абдеремане
источник
7
Ха - ха, это здорово:> в repository_dispatchсторону, можно комбинировать watchс if: github.actor == 'hackerman'отфильтровывать случайных незнакомцев. Или еще лучше - if: github.actor == github.event.repository.owner.loginдля дополнительной «безопасности»: D
Самира
1
Хаха спасибо! Да, хорошая идея, я должен попробовать это, когда у меня будет время! : D
Сара Абдеремане
1
Идеально, я думаю, что это лучший метод, хотя официально ничего не реализовано.
Антуан С.
5

Обновление : для решения "ChatOps" в стиле команды слеша см. Действие slash-command-dispatch . Это может позволить вам запускать рабочие процессы с помощью команд косой черты (например /deploy) из комментариев по запросу и запросу.

Вот базовый пример для deployкоманды косой черты. REPO_ACCESS_TOKENявляется repoобластью видимости Личных Токенов доступа

name: Slash Command Dispatch
on:
  issue_comment:
    types: [created]
jobs:
  slashCommandDispatch:
    runs-on: ubuntu-latest
    steps:
      - name: Slash Command Dispatch
        uses: peter-evans/slash-command-dispatch@v1
        with:
          token: ${{ secrets.REPO_ACCESS_TOKEN }}
          commands: deploy

Команда может быть обработана в этом рабочем процессе.

name: Deploy Command
on:
  repository_dispatch:
    types: [deploy-command]

Есть еще много вариантов и различных настроек. Смотрите slash-command-dispatch для полной инструкции по использованию.

Оригинальный ответ : repository_dispatchрабочий процесс может быть запущен вручную с помощью вызова API GitHub следующим образом.

on:
  repository_dispatch:
    types: [production-deploy]
  • [username] такое имя пользователя GitHub
  • [token]является repoобластью видимости Личных Токенов доступа
  • [repository] Имя репозитория, в котором находится рабочий процесс.
curl -XPOST -u "[username]:[token]" \
  -H "Accept: application/vnd.github.everest-preview+json" \
  -H "Content-Type: application/json" \
  https://api.github.com/repos/[username]/[repository]/dispatches \
  --data '{"event_type": "production-deploy"}'
peterevans
источник
1
Для всех, кто хочет, можно использовать один рабочий процесс для нескольких отправок. То, что отправлено как event_type, доступно для рабочего процесса как github.event.action, поэтому определенные задания / шаги могут быть включены / отключены при необходимости. PS: PAT на самом деле не нужен, запуск curl с -u "[username]:[password]"или даже -u "[username]"работает (во втором случае curl запрашивает пароль у пользователя); в некоторых случаях проще в использовании (например, при написании сценариев, в которых вводится имя пользователя, или сценариев, предназначенных для использования менее технически подкованными пользователями).
Самира
2

Хотя сообщение Сары было самым близким и простым ответом на первоначальный вопрос, оно несколько хакерское, поэтому в итоге мы создали devветку, в которой использовались следующие триггеры:

  • Рабочий процесс разработки: запускается, когда в devветке делается push :

    on:
      push:
        branches:    
          - dev
    
  • Рабочий процесс производства: срабатывают , когда запрос тянуть / слияние сделано из devк master:

    on:
      pull_request:
        branches:    
          - master
    
Антуан С.
источник
1

Отредактировано для более подробной информации / объяснения.

Одна вещь, которую вы можете сделать, это позвонить repository_dispatch. Вы можете просмотреть документацию GitHub для использования repository_dispatch здесь .

Например, если у вас есть рабочий процесс GitHub Actions, который выглядит следующим образом:

on:
  repository_dispatch:
    types: [run_tests]
name: Run tests
jobs:
  test:
    name: Run your tests
    runs-on: ubuntu-latest
    steps:
      - run: |
          echo "I just ran all your tests!"

Вы можете создать событие отправки репозитория, выполнив шаги, описанные в документации по GitHub v3 API .

Сначала создайте личный токен доступа (PAT) на GitHub для аутентификации.

Затем вы можете запустить curlтак:

curl \
  -H "Authorization: token $YOUR_PAT" \
  --request POST \
  --data '{"event_type": "run_tests"}' \
  https://api.github.com/repos/$USER/$REPOSITORY/dispatches

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

https://www.actionspanel.app/

ActionsPanel использует тот же repository_dispatchAPI, но делает это с токеном GitHub App, так что вам не нужно беспокоиться об управлении собственным PAT. Это также упрощает запуск ваших действий в командах с несколькими людьми.

Основываясь на пользовательских запросах и отзывах, мы встроили функции, указывающие, в какую ветку отправлять repository_dispatch, и даже встроили способ ввода параметров, когда вы хотите выполнить действие.

Вы настраиваете свои кнопки с помощью декларативного файла yaml, который вы оставляете в репозитории, и ActionsPanel прочитает этот файл и динамически создаст ваш пользовательский интерфейс для запуска ваших действий.

aaronbatilo
источник
0

Другой способ решить эту проблему с помощью текущего предложения Github Action - создать productionветку из master, когда необходимо развертывание, и инициировать действие развертывания в productionветке. productionВетви, по существу , зеркало master.

on:
  push:
    branches:    
      - master

Dev builds / push может происходить всякий раз, когда есть коммит мастера.

on:
  push:
    branches:    
      - production

В какой-то момент в графике выпуска вы можете поднять PR в productionветке. Это позаботится о сборке / развертывании prod.

user1064504
источник