GitHubのActionsについてまとめています。
GitHubのActionsとは
GitHubのActionsは、ツールと連携して開発ワークフローを自動化する仕組みです。
システムのビルドとデプロイを行うCI/CD(Continuous Integration/Continuous Delivery。継続的インテグレーション/継続的デリバリー)を自動化できるんですね。
フックイベントと呼ばれるトリガーが発生すると、あらかじめ定義しておいた処理が起動されます。GitHubのactionsではHCL(HashiCorp Configuration Language)ベースの言語でトリガーに対するジョブ設定を記述できます。
GitHubで用意されている「Java環境のセットアップをおこなう」「Python環境のセットアップをおこなう」「GitHubのリリース機能でファイルを公開」「リリースを作成」などのactionのほか、独自にactionを開発可能。マーケットプレイスでは、ユーザが定義した独自のactionが公開されています。
参考)GitHub Marketplace · to improve your workflow
GitHub Actionsの機能の例
例えば、Pythonの実行環境をセットアップするSetup Pythonは、PythonとPyPy(Pythonコードをコンパイルして高速化する)のバージョンを指定した実行環境をセットアップしたコンテナが起動します。
以下のようにジョブを記述することで、OSはubuntu、pythonのバージョンは2.x、3.x、pypy-2.7、pypy-3.6、pypy-3.7と順に実行環境を変えて、python my_script.pyを実行することができます。
jobs: build: runs-on: ubuntu-latest strategy: matrix: python-version: [ '2.x', '3.x', 'pypy-2.7', 'pypy-3.6', 'pypy-3.7' ] name: Python ${{ matrix.python-version }} sample steps: - uses: actions/checkout@v2 - name: Setup python uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} architecture: x64 - run: python my_script.py
my_script.pyで機能テスト用のスクリプトを記述しておけば、指定したpythonのバージョン全てで自動的にテストが実行できるんですね。結果として、python 3.xでは問題なく動くが、python2.xでは実行時にエラーになる、などといったことが自動テストでわかります。
Actionsをワークフローに組み込むことで、実行結果を一覧画面で確認できます。緑地にチェックの入ったアイコンは、ワークフローが問題なく実行されたことを表しています。
なお、ワークフローはテンプレートをベースにしてカスタマイズできます。デフォルトではubuntu最新版の環境を立ち上げ、「Hello world!」と表示する内容になっています。
# This is a basic workflow to help you get started with Actions name: CI # Controls when the action will run. on: # Triggers the workflow on push or pull request events but only for the master branch push: branches: [ master ] pull_request: branches: [ master ] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: # This workflow contains a single job called "build" build: # The type of runner that the job will run on runs-on: ubuntu-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 # Runs a single command using the runners shell - name: Run a one-line script run: echo Hello, world! # Runs a set of commands using the runners shell - name: Run a multi-line script run: | echo Add other actions to build, echo test, and deploy your project.
echo Add other actions to build, echo test, and deploy your project.の箇所に、自動ビルドや自動デプロイのためのアクションを記述します。
GitHubのActionsの利用制約
自由度が高いものの、同時実行できるワークフローや並列実行できるジョブ数、ジョブの実行時間に制限があります。
GitHub Actionsはパブリックリポジトリとセルフホストランナーでは利用無料。プライベートリポジトリの場合はプランによって制限が変わります。
- 各ジョブの実行時間は最大6時間まで
- 各ワークフローの実行時間は最大72時間まで
- APIリクエストは1時間に最大1,000回まで
- 並行ジョブの最大数はプランにより異なる。無料プランなら20、Enterpriseなら180
- ジョブマトリックスはワークフローごとに最大256ジョブ
- ワークフローのキューはリポジトリごとに10秒間隔、キューの最大数は100
GitHubのActionsのまとめ
- GitHubのActionsは、ソースコードのビルド、テストデプロイを自動化するためのしくみ
- Actionsには、GitHubが用意したもののほかに、ユーザが定義したものがマーケットプレイスで入手可能
- Actionsのワークフローやジョブには利用制限があり、利用プランにより制限が異なる