LoginSignup
30
21

More than 1 year has passed since last update.

Github Action の作り方メモ

Last updated at Posted at 2020-01-27

Github Actionを作る側のメモ。
ワークフローの中で使う側のメモはこちら => Github Actionsの使い方メモ

ドキュメント

パブリックなアクション

パブリックなリポジトリを Github に作り、リポジトリのルートに action.yaml または action.yml という名前のファイルを作って次のドキュメントを参考にメタデータを記述してアクションを定義する。
他のリポジトリでも利用できる形式だけど、前述のようにリポジトリをパブリックにする必要がある。

アクションの実行環境は大きく分けて2種類ある

  • Javascript アクション
  • Docker コンテナアクション

Javascript アクション

Node.jsをランタイムにするアクション。
action.yamlruns.using'node16'を指定する(ドキュメントによると node12 も指定できそうだけど、流石にもう古すぎるだろう)。

次のリポジトリにアクションの開発をサポートするツールが公開されている

Docker コンテナアクション

Docker コンテナで処理を実行するアクション。
コンテナで実行するので、実装言語は何でも使える。
action.yamlruns.using'docker' を指定し、runs.imageに次のいずれかを指定する

  • Dockerfile
  • Dockerhubなどパブリックなレジストリで公開されている Docker イメージ
  • Github謹製のDockerコンテナ (GitHub Actionsで公開されているやつかな)

Dockerイメージを指定すると、ワークフローの実行ごとにビルドが走るので、イメージを作ってそれを利用したほうがワークフローの実行時間は短くできる。

コンポジットアクション

前述の2種類とは異なり、Githubワークフローの様に step: 以下に run:use: で実行したい処理ステップを定義するアクション。
use: が使えるということは別の Github Action を呼び出すこともできるということ。
後述するが、プライベートアクションで共通処理をくくりだすのに便利。

マーケットプレイスへの登録

パブリックなアクションで、Releaseを作成すると、このリリースをマーケットプレイスで公開するか? と聞かれるので指示に従えば、GitHub Marketplace · Actions to improve your workflowで公開することができる。

別にマーケットプレイスで公開しなくても、他のリポジトリでパブリックなアクションは利用できる。

プライベートなアクション

プライベートなアクションはそれを利用するリポジトリで定義する。
パブリックなアクションと同じく action.yaml というファイルを作ってアクションを定義する。

action.yamlの置き場所はどこでも構わない。例えば、*.github/actions/<アクション名>/action.yml* でアクションを定義したら、それを利用するワークフロー定義で`use: .github/actions/<アクション名>` の様に action.yaml を置いたディレクトリをリポジトリのルートからの相対パスで指定すればよい。

プライベートアクションの使い所

プライベートなアクション内で実行することはワークフロー内に実装してもできるだろう。
ワークフロー内で run: を使えば、少々複雑なこともできてしまう。なんならスクリプトを書いてそのファイルを run: で叩けばワークフローが肥大したり、煩雑になることも避けられる。

とするとプライベートアクションはどこで使うのが効果的か?
例えばほとんど同じなのだけど、CI/CDの都合で環境ごとにちょっとづつ処理を変えたいが、if: で分岐するのもいまいち見通しが悪い。
そういうときに共通部分をプライベートアクションにくくりだしてコンポジットアクションを作って、呼び出すようにすれば良い。
そうすれば、run:だけでなくuse:で他の Github Action も利用した処理ステップを共通化できる。

30
21
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
21