Github Actions 入門 ~概要・競合比較・おすすめの書き方など~
次世代システム研究室の Y.I です。開発/運用を行っているとどのPJでもCI/CDの構築は必要となります。自分で構築する場合はJenkins、サービスを利用するならば、CircleCIやGithub Actoinsを使うことが多いと思います。今回はCircleCIとの比較も交えてGithub Actionsについてまとめます。 2024/04/08
まとめ
今回のまとめです。
- できること
- Github社提供のワークフローでCI/CDの実現などに利用できる
- Githubに対するさまざまなイベントをトリガーとして実行できる
- yamlファイルを記載するだけでワークフローを実現できる
- Marketplaceが用意されており、さまざまな機能(コンポーネントのようなもの)が提供されていてフローを構築できる
- 料金
- Public Repositoryは完全無料
- Private Repositoryは無料枠があり低コストで利用できる
- CircleCIとの比較
- Github利用者はトータルコストが安くなる
- さまざまなGithubイベントをきっかけに Github Actions を実行できる
- workflowの書き方
- トリガー条件は否定を最後に指定する
- 手動実行はGithub defaultブランチにマージされていないと実行ボタンが表示されない
- 可能な限りMarketplaceで提供されているactionを利用しましょう
- 共通処理と個別処理を別ファイルに分ける
Github Actionsについて
Github ActionsはGithub社が提供するワークフローでCI/CDなどの実現に利用できます。Githubに対するイベントをきっかけに何か処理を行わせることができます。
Github Actionsはyamlファイルを記載するだけで利用可能です。処理の記載は、Marketplaceで提供されている機能を指定するだけで実現できます。実現したい機能がない場合は、Shellで処理を記載することも可能です。
name: Sample Github Action # push event triggers the workflow on: [push] jobs: sample_job: # latest Ubuntu コンテナで以下の処理を実行する runs-on: ubuntu-latest steps: # repositoryをcheckoutするMarketpalceのコンポーネントを利用 - name: Checkout repository uses: actions/checkout@v2 # shell commandの実行 - name: Run echo command run: echo "This is a sample Github Action" # マルチラインshell commandの実行 - name: Run a multi-line script run: | echo Add another echo statement # Add another echo statement echo Hello from a multi-line script!公式ページ Github actions Marketplace
料金
Github の Public Repository での利用は完全無料となっています。
Private Repositoryでの利用は、Github Freeプランとして 2000分(33時間)まで無料で利用できます。Gtihub Teamプラン($4/月)利用している場合、無料利用枠が増え 3000分(50時間)の実行が可能です。無料枠を超えても分単位での支払いで利用可能です。
CircleCIとの比較
Github ActionsがCircleCIと比較して優れていると思う点をまとめます。
- Github利用者はトータルコストが安くなる
- さまざまなGithubイベントをきっかけに実行できる
もともとGithubを利用しているPJでしたら、追加費用なしで利用も可能なため、CircleCIよりも安く利用するケースが多くなります。
以前参加していたPJでは、Githubでコード管理、CircleCIを利用してCI/CDを行っていましたが、コスト削減のためにGithub Actionsへ移行しました。
CircleCIは、Githubのプッシュイベントで実行されますが、Github Actionsでは、Github に対するさまざまイベント(プッシュ、issue作成、pull request作成、レビューコメントなど他多数)をきっかけに実行可能です。
workflowの注意やおすすめの書き方
Github Actionsのworkflowの注意やおすすめの書き方を紹介します。
トリガー条件は条件が重なった際に最後の指定が有効になるため、否定を最後にしておいた方が間違いが少ないです。
# 例 feature/developブランチ以外をトリガーにする on: push: branches: - develop - 'feature/*' - '!feature/develop'
手動実行は workflow_dispatch を使うことで実現できます。ただし、Githubのdefaultブランチ(mainやmaster)に workflow_dispatch するworkflowファイルがコミットされていないと実行ボタンが表示されません。
default branchにコミットされている場合、
Github画面
> Acrionsタブ
> (左のメニュー)workflow名を選択
> 画面に「Run workflow」ボタンが表示されます。
shellで記述するよりも action を利用することで、可読性が高くなります。また、actionはGithub社が提供しているものが多いため、信頼性も高いです。
developやprodcutionなど環境によって指定を変える際には、ファイルを分けるのがおすすめです。1つのファイルで書くよりも可読性が高くシンプルに記載できます。workflow_callトリガーを使ってファイルを呼び出して実行することができます。
# callerサンプル workflow_call_develop: name: Call a develop workflow if: input.environment == 'develop' uses: ./.github/workflows/called_workflow_production.yml@main with: environment: production secreeats: secret1: ${{ secrets.secret1 }} workflow_call_production: name: Call a production workflow if: input.environment == 'production' uses: ./.github/workflows/called_workflow_production.yml@main with: environment: production secreeats: secret1: ${{ secrets.secret1 }} # calledサンプル(called_workflow_develop.yml) // This is the called workflow name: Called Workflow on: workflow_call: inputs: environment: required: true type: string secrets: secret1: required: true jobs: called_job: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 # calledサンプル(called_workflow_production.yml) // This is the called workflow name: Called Workflow on: workflow_call: inputs: environment: required: true type: string secrets: secret1: required: true jobs: called_job: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2
最後に
グループ研究開発本部では、グループ全体のインテグレーションを支援してくれるアーキテクトを募集しています。アプリケーション開発の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ募集職種一覧からご応募をお願いします。