Githuub Actionとは?
Github ActionsはGitHubが提供してくれる仮想のサーバーで、使っているレポジトリを利用していろいろな作業(バッチ・CI/CD・UnitTest・Buildその他)を行えるサービスである
紹介文を見るとソフトウェアWorkFlowを自動化できるようにサポートしてくれるツールて書かれてる
プラン
・Public Repositoryは条件付きの無料
・Private Repositoryはリンク参考
Github Actionsの基本概念
- WorkFlow
- 複数のJobで構成されてる、EventをCatchする
- YAMLで作成する
- Project Root Directoryの.github/workflows内に配置する
- Event
- WorkFlowを実行するトリガー
- Github内で発生してるほとんどのEventはトリガーにできる
- WebHook Event
- 特定ブランチを1個・複数指定可能
- Job
- 複数のStepで構成され、仮想環境のインスタンス内で実行されるもの
- 他のJobとの依存関係を作ったり、独立的に並列実行も可能
- Step
- Jobの中でSequentialに実行されるプロセス単位
- ファイルシステムを利用してお互いの情報が共有できる
- コマンドを叩いたり、Actionsを実行することが可能な単位
- Actions
- WorkFlowで一番小さいBlock(ブロック)
- Jobを作るためにはStepたちを組み合わせるのが買おう
- 再利用が可能なComponentと言える
- 個人的に作ったActionwo利用することも可能だし、MarketPlaceに共有されてる他人のActionsも利用可能
- Runner
- Github Action Runnerアプリケーションがインストールされたマシンで、WorkFlowが実行されるインスタンス
- GithubでHostingしてくれるGithub-hosted runnerと直接HostingするSelf-hosted runnerがある
- Github-hosted runnerはAzureのStandard_DS2_v2でvCPU 2,メモリは7GB、仮ストレジ14GB構成
- ubuntu(16.04LTS, 18.04LTS, 20.04LTS)
- Windows Server 2007
- Mac OS Catalina
サンプル
# .github/
# workflows/
# main.yml
name: my first workflow # workflow 名
on: push # event trigger on push
jobs:
build: # job id
name: Hello world action # job 名
runs-on: ubuntu-latest # 仮想環境指定(Windows Server, Ubuntu, Mac OSをサポートする)
steps:
- name: checkout source code # step 01 名
uses: actions/checkout@master # Source Code checkout
- name: say hello # step 02 名
run: echo "hello world" # linux command 実行
次のファイルを.github/workflows
ディレクトリ配下にmain.yaml
ていう名前で保存する。
一番基本になるWorkFlowである。
該当WorkFlowは簡単にUbuntu環境上で、該当されるGithubレポジトリをCheckoutしてHelloworldを標準出力する例文である。
git add .github/workflows/main.yml
git commit -m "my first actions workflow"
git push origin master
GithubのActionsタブを見たら、下記のようにWorkFlowが実行されることが確認できる
結局基本はWorkflowをどのように作るのかだ。より細かいWorkFlowの構成・作成方法についてはリンクを確認
自分のActionを作成してみよう!
先にhello-workd-docker-action
ていうGithubのPublicレポジトリを作成する。
そして、該当レポジトリをPullする。
git clone https://github.com/$USERNAME/hello-github-actions.git
cd hello-github-actions
該当レポジトリに entrypoint.sh
, Dockerfile
, action.yml
ファイル3個を作成する予定。
vi entrypoint.sh
## ===== file
#!/bin/sh -l
who=${1:-world}
echo "Hello" $who
利用者から標準入力していただいたものを標準出力でConsoleに出漁lする簡単なActionである。これを実行可能なScriptとして変換する。
chmod +x entrypoint.sh
そして、このScriptをDocker Containerで実行してくれるDockerfile
を作成する
vi Dockerfile
## ===== file
FROM alpine:3.10
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT [ "/entrypoint.sh" ]
これで準備は全部できた。次にGithub Actionsで該当DockerイメージをStepで活用できるようしてくれる action.ymlファイルを作成する
vi .github/workflow/action.yml
## === file
name: 'Hello World' # action 名
description: 'Greet someone' # 簡単な説明
inputs:
who-to-greet: # id of input
description: 'Who to greet'
required: true
default: 'World'
runs:
using: 'docker' # Dockerの利用を名詩
image: 'Dockerfile' # Dockerfileを利用してイメージを作成
args: # docker run に渡すパラメータ
- $
今まで作成したファイルのディレクトリの構成は下記のよう
hello-github-actions/
entrypoint.sh
Dockerfile
action.yml
このActionをWorkflowで接近するように作成したものをGithubにUpする
git add .
git commit -m "Testing my first GitHub Action"
git push origin master
これでhello-github-actions
レポジトリを含めどのGithub Action Workflowでも今回作成したActionを利用して使えるようになる。
on: push
jobs:
hello_world_job:
runs-on: ubuntu-latest
name: A job to say hello
steps:
- name: Hello world action step
id: hello
uses: $USERNAME/hello-world-docker-action@master
with:
who-to-greet: 'Mona the Octocat'
整理
個人的に
・GithubをメインのVCSで使ってる
・CI/CD環境の準備で悩んでる
・新しくCI/CD環境を作成する必要がある
ぐらいの悩みがあれば、Github Actionsは素晴らしいツールになると思います。
Pull Request内でコメントを自動で作成したり、Code Coverage結果をPull Requestページにファイルとしてアップロードしたり、AWS・GCP・K8sなど外部サービスとの連携、バッチなどのスケジューリングなどでいろいろな方法での使い方が存在し、market placeで自分たちのサービスで利用してるツールを探したり・自分が作成したものを共有したりするのができます。
ご検討中のであれば、ぜひ使ってみましょうー