Ручні робочі процеси спрацьовують у Github Actions


9

Я налаштовую дії Github для сховища проектів.

Робочий процес складається з наступних етапів:

  • Побудова образу докера
  • Натискання зображення на реєстр контейнерів
  • Розгортання розгортання 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, що я маю на увазі, ви можете робити кілька робочих процесів / завдань і фільтрувати за цільовими гілками чи подіями. Ви можете комбінувати кілька подій, наприклад, запустити робочий процес для натискання та з кроном у півночі.


7
Ха - ха, це здорово:> в repository_dispatchсторону, можна комбінувати watchз if: github.actor == 'hackerman'фільтрувати випадкових незнайомців. Або ще краще - if: github.actor == github.event.repository.owner.loginдля додаткової "безпеки": D
Саміра

1
Ха-ха, дякую! Так гарна ідея, я повинен спробувати це, коли встиг! : D
Сара Абдеремане

1
Ідеально. Я думаю, що це найкращий метод, поки офіційно не реалізовано щось.
Антуан К.

5

Оновлення : для рішення в стилі команд "Нарізка" див. Дію 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"}'

1
Для всіх, хто цікавиться, можна використовувати один робочий процес для декількох відправлень. Що надсилається як event_typeдоступно для робочого процесу github.event.action, тому конкретні завдання / кроки можна вмикати / вимикати за потреби. PS: PAT насправді не потрібен, починаючи curl з -u "[username]:[password]"або навіть -u "[username]"працює (також у другому випадку curl запитує користувача на пароль); простіший у використанні в деяких випадках (наприклад, при написанні скриптів, які використовують вхідні дані ім’я користувача, або сценарії, призначені для використання менш досвідченими користувачами).
Саміра

2

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

  • Робочий процес розвитку: спрацьовує при натисканні на devгілку:

    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!"

Ви можете створити подію відправки репозиторію, дотримуючись кроків, пояснених у Документації API GitHub v3 .

Спочатку створіть персональний маркер доступу (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.actionpanel.app/

ActionsPanel використовує цей самий repository_dispatchAPI, але робить це з маркером програми GitHub, щоб вам не потрібно було турбуватися про управління власним PAT. Це також значно спрощує ініціювання ваших дій у командах із кількома людьми.

На основі запитів користувачів та відгуків ми вбудували функції, щоб вказати, до якої гілки надсилати repository_dispatch , і ми навіть створили спосіб введення параметрів, коли потрібно виконати дію.

Ви налаштовуєте свої кнопки за допомогою декларативного файлу yaml, який ви залишаєте в репо, і ActionsPanel прочитає цей файл і динамічно створить ваш інтерфейс, щоб викликати ваші дії.


0

Ще один спосіб вирішити це за допомогою поточної пропозиції Github Action - створити productionгілку з головного, коли потрібно розгортання та запустити дії розгортання на productionгілці. productionГілки, по суті , дзеркало master.

on:
  push:
    branches:    
      - master

Будівництво / натискання Dev може відбуватися, коли є зобов'язання господаря.

on:
  push:
    branches:    
      - production

У якийсь момент у графіку випуску ви можете підняти PR до productionвідділення. Це забезпечить збірку / розгортання prod.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.