Kekeの日記

エンジニア、読書なんでも

Github Actionsが使えるようになったので使ってみる

本記事

本記事では、少し前にアナウンスされたGithub ActionsというCIツールのようなものを実際に触ってみて、現時点での使い勝手をまとめてみようと思います。

実際に使えるようになると以下のようなタブが追加されています。

f:id:bobchan1915:20181202180405p:plain

初めて使ってみる

ActionページにいってWorkflowを作ってみる

Actionページに行くと以下のようなページでWorkflowを作り始められます。

f:id:bobchan1915:20181202180539p:plain

"Create a new workflow"を押して開始してみます。

Visual Editor

基本的なこと

以下のように設定できます。

f:id:bobchan1915:20181202180658p:plain

いくつものWorkflowを定義できるようです。

f:id:bobchan1915:20181202181620p:plain

一つ目のActionのEditをおしてみます。

f:id:bobchan1915:20181202180903p:plain

これはトリガーです。

どのようなことが起きればこのWorkflowが走るか

を定義するものです。

Runで定義するトリガーは以下のものがあります。

項目 トリガー条件
check_run Checkが走ってcreated, rerequested, requested_actionになったら
check_suite Check runの集合で、ステータスがcompleted, requested, rerequestedになったら
commit_comment コミットコメントがcreatedになったらトリガー
create ブランチやタグが作られたら
delete ブランチやタグが作られたら
deployment APIを通してデプロイメントが作られたら
deployment_status デプロイメントステータスが更新されたら
fork リポジトリがフォークされたら
gollum Wikiページがアップデートされたら
issue_comment Issueにコメントがcreatedediteddeletedされたら
issues Issueがassigned, unassigned, labeled, unlabeled, opened, edited, milestoned, demilestoned, closed, reopenedされたら
label ラベルがcreated, edited, deletedしたら
member メンバーが招待、削除に追加されたり権限が変わったら
milestone マイルストーンがcreated, closed, opened, editeddeleted`されたら
page_build ページサイトがbuiltされたり失敗されたら
project_card Project Cardがcreatededited, moved, Issueにconverteddeletedされたら
project_column Project Columnがcreated, edited, moveddeletedされたら
project Projectがcreated, edited, closedreopenend, deletedされたら
public リポジトリがPrivateからPublicに変わったら
pull_request_review_comment Pull requestにreviewコメントがついたら
pull_request_review Pull requestがreviewされたら
pull_request Pull requestがassigned, openedなどしたら(多すぎて省略します)
push tagやコミットがpushされたら
repository_vulnerability_alert vulnerability alertが通知されたら
release リリースが作成されたら
repository_dispatch 他のユーザーがアプリのイベントをトリガーしたら
status リポジトリステータスがAPIによって変更されたら
watch ユーザーがリポジトリがStarされたら

非常にトリガーが豊富ですね。

詳細はこちらをご覧ください。

developer.github.com

トリガーを組み立てる

次はトリガーをもらって、何をするかを定義します。

以下のようにトリガー枠の青い点を点線にドラッグしてつなぎます。

f:id:bobchan1915:20181202182131g:plain

ビルドインですでにいくつかActionがあります。 また、GCPを使う人は、かなり簡単にアクションを作ることができるとおもいます。

f:id:bobchan1915:20181202182204p:plain

適当に自前のRun Actionを定義します。

f:id:bobchan1915:20181202183611p:plain

環境変数を定義

また、環境変数を定義することができます。

f:id:bobchan1915:20181202183659p:plain

あとで解説しますが、再利用可能なActionsにすることができます。

Secretも定義

また、Secretも定義できます。

f:id:bobchan1915:20181202183843p:plain

Plain Textで保存するのはセキュリティ的にあれということがあればGoogle KMSなどを合わせて使うと安全でしょう。

www.1915keke.com

Workflowを保存する

あとで解説しますが./.github/以下にワークフローの設定ファイルが保存されます。

右上でコミットして保存します。

f:id:bobchan1915:20181202183924p:plain

ファイルで設定もできる

先ほどWorkflowを保存しましたが、同様に./.github/hogehoge.workflow.workflowがつく名前で定義することができます。

これによって宣言的にWorkflowを定義することができます。

このような感じで保存されています。

f:id:bobchan1915:20181202184135p:plain

そして、プレビューでVisual Modeでみることができます。

f:id:bobchan1915:20181202184221p:plain

実際は以下のようなファイルになっています。

workflow "New workflow" {
  on = "push"
  resolves = ["Hello World"]
}

action "Hello World" {
  uses = "./say_hello.sh"
  env = {
    MY_NAME = "KeisukeYamashita"
  }
  args = "\"Hello world, I'm $MY_NAME!\""
}
  • on: トリガーのイベント
  • resolves: Actionを解決する

ログも見れる

Check APIのようにログをみることができます。

f:id:bobchan1915:20181202184352p:plain

気になる点

Workflowの差分はどのように見れるのか?

試しにActionの名前をHello WorldからEnd Worldに変更し、プルリクを投げてみます。

f:id:bobchan1915:20181202184839p:plain

しかもresolve(=トリガーとAction)を繋げ忘れたことをCheckしてくれました。

f:id:bobchan1915:20181202184944p:plain

差分自体はPlain Textでみることになりそうです

Visual Editorで複雑なWorkflowは定義できるの

現時点ではできないようです。

新しいActionはPlain Textでしか作成できないみたいです。

f:id:bobchan1915:20181202191500p:plain

まとめ

まだまだドキュメントも豊富ではありませんが、Githubにソースコードを置かないチームはなかなかないので、Githubだけで完結してくれると非常に嬉しいです。

特にCIは種類も豊富で、できることできないことを把握して技術選定するのが面倒なので、GithubActionsがデフォルトスタンダードになってくれるといいなと思います。

参考文献

公式ドキュメント

developer.github.com