Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@KIMSeongJoo

Github Actionsを使ってみよう!

Githuub Actionとは?

Github ActionsはGitHubが提供してくれる仮想のサーバーで、使っているレポジトリを利用していろいろな作業(バッチ・CI/CD・UnitTest・Buildその他)を行えるサービスである

紹介文を見るとソフトウェアWorkFlowを自動化できるようにサポートしてくれるツールて書かれてる

プラン

・Public Repositoryは条件付きの無料
・Private Repositoryはリンク参考

Github Actionsの基本概念

  • Github ActionsはWorkFlow、Event、Job、Step、Actions、Runnerで構成されてる image.png
  • 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が実行されることが確認できる
image.png
結局基本は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で自分たちのサービスで利用してるツールを探したり・自分が作成したものを共有したりするのができます。

ご検討中のであれば、ぜひ使ってみましょうー

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
KIMSeongJoo
サーバーサイドエンジニアとして働いてます。 PHP/Python関連仕事を主にやってます。 Linux、WebFW,Javascriptなどに興味もって勉強してます。 GoなどのCompile言語も使っていきたいなと思ってます。
lifull
日本最大級の不動産・住宅情報サイト「LIFULL HOME'S」を始め、人々の生活に寄り添う様々な情報サービス事業を展開しています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?