イベント
GitHub、さまざまなワークフローを自動化するツール「GitHub Actions」を発表
GitHub Universe 2018レポート
2018年10月18日 06:00
コード共有サイトのGitHubは、年次イベント「GitHub Universe 2018」を10月16~17日に開催した。会場はサンフランシスコのパレス・オブ・ファイン・アート。
初日の基調講演では、テストやデプロイなどGitHubにホストされるコードのワークフローを自動化する機能「Actions(GitHub Actions)」など、いくつかの新機能が発表された。本記事では、このGitHub Actionsの発表についてレポートする。
CI/CDやissue対応などさまざまなワークフローを自動化
まずSam Lambert氏(Head of Platform)が背景として、大手サービスとのプラットフォーム連動機能を最近進めていることを紹介。7月にはGoogle Cloud Buildとの統合を、9月にはAzure Pipelinesとの統合を、つい最近ではイシュートラッカーのJiraとの統合を発表している。
そしてLambert氏は、「開発者は毎日、無駄なワークフローで時間と手間を費やしている」と語った。
これらを背景に、「Actions(GitHub Actions)」が紹介された。GitHub Actionを使うと、一連の作業を自動化するワークフローを、GUIでビジュアルに作成し、それをGitHub上で実行したりシェアしたりできる。これにより、CI/CDパイプラインのように一連の作業を自動化できるわけだ。
GitHub Actionsの具体的な機能については、Kyle Daigle氏(Director, Ecosystem)がデモをまじえて解説した。
Daigle氏による1つめの例は、npmモジュールにタグの打たれたコミットがプッシュされたら、自動的にテストを実行し、問題がなければnpmリポジトリで公開するワークフローを作成するデモだ。GUIのドラッグ&ドロップでアクションを1つずつ追加する。
まずGitHubのリポジトリからタグでフィルターするアクションを追加する。次に、テストを実行するアクションとして、npmコマンドを実行するアクションを追加してつなげ、引数として「test」を指定する。さらにnpmリポジトリに公開するアクションをつなげる。ちなみに、npmのシークレットトークンは暗号化されて、コードとは別に保存される。
これにより、ローカルのgitでタグを打ってgit pushすることで、テストが実行され、それが成功してnpmリポジトリに公開されるところがデモされた。
2つめの例は、issueに対してメッセージを送るワークフローが紹介された。重複したissueにその旨をコメントしたりできる。
3つめの例は、簡単なNode.jsアプリケーションからDockerイメージを作り、複数のクラウドに並列でデプロイするものだ。Zeit、Heroku、Azure、Google Cloud、AWSにデプロイするものだ。実際にデモがなされ、各サービスのURLで同じアプリケーションの画面が表示されるところが見せられた。
GitHub Actionsはベータバージョンとして公開を開始し、サイト上でベータテスターを募集している。すでに、さまざまなアクションや、ワークフローのサンプルがGitHubで公開されている。
ワークフローをコードで書く方法やアクションの作り方も解説
作成したワークフローは、HCL(HashiCorp Configuration Language)形式のテキストベースのコードで保存される。そのため、最初からGUIでなくコードで書くこともできる。
Gudmundur Olafsson氏(Software Engineer)によるブレークアウトセッションでは、この書き方も紹介された。基本的には各アクションを「action」で定義し、その中で「uses =」という文で実体する内容を指定する。そのほか、引数を指定する「args =」や、環境変数を指定する「env =」などがあるという。
なお、各アクションは、Dockerコンテナとして実行される。アクションの実体はDockerイメージに入っているLinuxコマンドであり、Actionの実行はそのコマンドを実行することになるわけだ。
このアクションの作り方として、アクションを作るためのDockerfileの書き方も解説された。実例は前述したGitHub上で公開されたアクションで見ることができる。
アクションのDockerfileでは、アクションを説明するさまざまな情報を「LABE」文で指定する。そのうえで、実行するLinuxコマンドを「ENTRYPOINT」で指定する。
コンテナには、環境変数によって実行環境にはさまざまな情報が渡ってくる。この環境変数には「immutable environment(不変の環境情報)」と「mutable environment(変わる環境情報)」の値がある。mutable environmentにはリポジトリ名やアクション名などのアクション共通の値が、mutable environmentには設定やクレデンシャル情報(認証のための情報)などがあるという。
なお、このセッションは「Connecting your software lifecycle with GitHub's platform」というタイトルだけ事前公開されていたが、基調講演でGithub Actionが公開された後は、多くの参加者でにぎわっていた。