Terraform-aws-github-runner: オフラインランナーの作成を自動化する

作成日 2021年02月06日  ·  11コメント  ·  ソース: philips-labs/terraform-aws-github-runner

現在のアプローチでは、alwsysにオフラインランナーを登録する必要があります。 これらのオフラインランナーは、60日ごとにgithubによって削除されます。 したがって、プロセスを自動化して1つのオフラインランナーを維持し、0にスケールバックできるようにすると便利です。

考えられる解決策の方向性

ED2インスタンスを介して登録

構成ステップまでユーザーデータのみを実行する追加のラムダを使用してランナーをスピンアップするために使用するのと同じメカニズムを使用します。 また、ec2インスタンスが削除されていることを確認してください

egineergithub構成プロセスを逆にする

リバースエンジニアリングに基づいてgithubhttp呼び出しを使用するlamdaを作成します。https://github.com/actions/runner/issues/558を参照して

ラムダで設定を実行する

ラムダレイヤーを介して設定を実行できるラムダを作成します

enhancement help wanted

最も参考になるコメント

@npalmランナーの登録に関連するロジック、URLなどのほとんどを理解しました。 私は、Python3xとリクエストを使用してこれを処理するPythonモジュールを作成する予定です。 これはおそらく今週末、私が仕事を休んでいるときでしょう。

自分で実装したい場合は、それまでに収集したプロセスについてのメモを共有できます。

正直なところ、プロセス全体のトレースにもう少し時間をかけたいと思います。そうすれば、実際にワークフローをプルして実行することもできますが、新しいランナー登録は私にとって必須でした。

基本的に、私が見つけたプロセスは次のとおりです。
patまたはappcredsを使用してAPI経由でランナートークンを取得します
トークンをシークレットエンドポイントに投稿し、新しいシークレットエンドポイントとjwtを使用してjsonデータを受信します
jwtを使用して、認証ベアラーヘッダーを介して認証し、新しく表示されたエンドポイントを使用して、既存の「エージェント」(APIで呼び出される)をクエリしたり、新しいエージェントを追加したり、既存のエージェントを更新したりできます。

RSAキーの作成や一連のヘッダーなど、さらに詳細な情報が含まれていることは明らかです。 私はまだ登録以上に調べていません...

全てのコメント11件

@npalmランナーの登録に関連するロジック、URLなどのほとんどを理解しました。 私は、Python3xとリクエストを使用してこれを処理するPythonモジュールを作成する予定です。 これはおそらく今週末、私が仕事を休んでいるときでしょう。

自分で実装したい場合は、それまでに収集したプロセスについてのメモを共有できます。

正直なところ、プロセス全体のトレースにもう少し時間をかけたいと思います。そうすれば、実際にワークフローをプルして実行することもできますが、新しいランナー登録は私にとって必須でした。

基本的に、私が見つけたプロセスは次のとおりです。
patまたはappcredsを使用してAPI経由でランナートークンを取得します
トークンをシークレットエンドポイントに投稿し、新しいシークレットエンドポイントとjwtを使用してjsonデータを受信します
jwtを使用して、認証ベアラーヘッダーを介して認証し、新しく表示されたエンドポイントを使用して、既存の「エージェント」(APIで呼び出される)をクエリしたり、新しいエージェントを追加したり、既存のエージェントを更新したりできます。

RSAキーの作成や一連のヘッダーなど、さらに詳細な情報が含まれていることは明らかです。 私はまだ登録以上に調べていません...

@gertjanmaas上記のコメントが

@ miked63017うまくいかない場合は、お知らせください。 私たちはこれも探しているので、私はそれに取り組む時間があります。

編集:見たかどうかはわかりませんが、これはPython用に新しくリリースされました: https

@npalm @mcaulifnはリンクです。まだかなりベータ版であり、十分に文書化されていませんが、ランナー/アクションAPI全般について同じことが言えると思います:-)

https://github.com/miked63017/pyghrunner

ghapiモジュールへのREの@mcaulifnはかっこいいように見えますが、これらの呼び出しのほとんどはAPIの文書化されていない部分であり、おそらく変更される可能性があります。

全体的にはうまくいくようです。 このリポジトリに追加する予定はありますか?

@gertjanmaas何か意見はありますか?

@npalm @mcaulifnこのリポジトリに追加するコンテキストがあるかどうか

私はすぐにPythonコードをざっと読みましたが、しばらく前にリバースエンジニアリングを試みたときに見たものを確認しているようです。 これをここで実装できれば素晴らしいと思います。 手作業でオフラインランナーを追加するのにうんざりしている:P

私が(プライベートライブラリで)このコード(同等のもの)を実行している@gertjanmaasでは、いくつかのメソッドを定期的に、またはイベントに応答して実行し、前の「仮想ランナー」を上書きします。 基本的にはプレースホルダーとして使用しているため、ラベル付きのランナーが存在しないため、ジョブは失敗するのではなくキューに入れられます。 次に、ジョブの詳細を確認し、必要に応じて適切なラベルを付け、 --onceフラグを付けて、適切なランナーを起動します。

私はまだ、他の場所に埋め込むことができる完全なカスタムランナー(おそらくPythonで書かれている)を作成するためのさらなる調査の計画を持っています。 これは私にとってまだ優先度が高くありません。

ランナーの登録抹消はどうですか?

オフラインランナーは、組織内に0人のランナーが存在しないようにするために、基本的に30日ごとに再作成する必要があります。

これも自動化する必要があります。

このページは役に立ちましたか?
0 / 5 - 0 評価