Githubアクションの手動ワークフロートリガー


9

プロジェクトリポジトリのGithubアクションを設定しています。

ワークフローは次のステップで構成されています。

  • Dockerイメージの作成
  • イメージをコンテナーレジストリにプッシュする
  • Kubernetesデプロイメントをロールアウトします。

ただし、私は2つの異なるKubernetesデプロイメントを使用しています。1つは開発用、もう1つは本番用です。したがって、2つのGithubアクションワークフローもあります。

開発用のGithubアクションワークフローは、コミットがプッシュされるたびにトリガーされます。

on:
  push:
    branches:
    - master

しかし、私はそれを自分の制作ワークフローに使いたくありません。Send to productionボタンのような手動トリガーが必要です。私はそれの近くに何もドキュメントで見ませんでした。


Githubアクションでワークフローを手動でトリガーする方法はありますか?

Github Actions、Docker、またはKubernetesのいずれかで、開発ワークフローと本番ワークフローをどのように分割して、私が望むことを達成できますか?

回答:


9

Githubアクションでワークフローを手動でトリガーする方法はありますか?

私はそうするために少しハックを持っています...

監視イベントを使用すると、手動でアクションをトリガーして、レポにスターを付けたり外したりできます。ワークフロー内のイベントのコードは次のとおりです。

on:
  watch
    types: [started]

私はそれが奇妙なたわごとであることを知っていますが、それはうまくいきます!それにもかかわらず、それが潜在的なスターを持つ公的レポである場合、それは最良の方法ではありません。


Github Actions、Docker、またはKubernetesのいずれかで、開発ワークフローと本番ワークフローをどのように分割して、私が望むことを達成できますか?

つまり、Githubアクションでは、複数のワークフロー/ジョブを実行し、対象のブランチまたはイベントでフィルタリングできます。たとえば、プッシュのワークフローをトリガーしたり、深夜にcronを使用たりするなど、複数のイベントを組み合わせることができます。


7
はは、これは素晴らしいです:> repository_dispatch余談ですが、watchと組み合わせif: github.actor == 'hackerman'てランダムな見知らぬ人を除外することができます。またはさらに良い- if: github.actor == github.event.repository.owner.login追加の「セキュリティ」のため:D
サミラ

1
はははありがとう!はい、いいアイデアです。時間があるときに試してみます。:D
サラ・Abderemane

1
パーフェクト正式に実装されているものはありませんが、これが最良の方法だと思います。
アントワーヌC.

5

更新:スラッシュコマンドスタイルの「ChatOps」ソリューションについては、slash-command-dispatchアクションを参照してください。これにより/deploy、発行およびプルリクエストのコメントからスラッシュコマンド(例:)を使用してワークフローをトリガーできます。

以下は、deployslashコマンドの基本的な例です。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ワークフローは、次のようにGitHub APIの呼び出しによって手動でトリガーできます。

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
興味のある方は、1つのワークフローを複数のディスパッチに使用することができます。送信されるものevent_typeはとしてワークフローで利用できるためgithub.event.action、必要に応じて特定のジョブ/ステップを有効/無効にすることができます。PS:PATは実際には必要ありません。curlを開始する-u "[username]:[password]"か、または-u "[username]"機能します(2番目のケースでは、curlがユーザーにパスワードを要求します)。場合によっては使いやすい(たとえば、入力としてユーザー名を使用するスクリプトを書く場合や、技術にあまり詳しくないユーザーが使用することを目的としたスクリプト)。
Samira

2

が、サラの投稿は元の質問に最も近いと最も簡単な答えだった、我々が最終的に作成することで、終わったので、多少ハックされdev、次のトリガを使用するように枝を:

  • 開発ワークフロー:devブランチでプッシュが行われるとトリガーされます:

    on:
      push:
        branches:    
          - dev
    
  • 生産ワークフロー:プルリクエスト/マージがからdevに行われたときにトリガーされますmaster

    on:
      pull_request:
        branches:    
          - master
    

1

詳細/説明のために編集。

できることの1つは、への呼び出しrepository_dispatchです。repository_dispatch hereを使用するためのGitHubドキュメントを表示できます。

たとえば、次のようなGitHubアクションワークフローがあるとします。

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ドキュメントで説明されている手順に従って、リポジトリディスパッチイベントを作成できます。

まず、GitHubに認証用のパーソナルアクセストークン(PAT)作成します

その後、次の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がそのファイルを読み取り、アクションをトリガーするためのUIを動的に作成します。


0

現在のGithubアクションオファリングでこれを解決する別の方法はproduction、デプロイが必要なときにマスターからブランチを作成し、ブランチでデプロイアクションをトリガーすることproductionです。productionブランチは、本質的に鏡ですmaster

on:
  push:
    branches:    
      - master

マスターへのコミットがあるときはいつでも、開発ビルド/プッシュが発生する可能性があります。

on:
  push:
    branches:    
      - production

リリーススケジュールのある時点で、PRをproductionブランチに上げることができます。これにより、prodのビルド/デプロイが処理されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.