当ブログではPRや広告を掲載しています

【初心者向け】GitHub Actionsの仕組みをエンジニアが解説!

プログラミング
この記事は…
  • GitHub Actionsで何が出来るかをざっくり解説
  • 試しにサーバーに対してActionを実行する手順を紹介
  • サンプルコード有り
スポンサーリンク

GitHub Actions について

まず何が出来るのか

GitHub Actionsというものを知ったときに、真っ先に考えるのがコレですよね。

結論から言うと、だいたいのことは何でも出来ます!
※コードが書ければね。

ということで詳しく解説していきます。

仕組み

上の図は1例ですが、Gitに対する何かしらのアクション(pushなど)をトリガーにして、任意のコマンドを実行できる、これが GitHub Actions です。

任意のコマンドとは、リポジトリ毎にyml形式のファイルを作成し、そこに記述したものが実行される仕組みです。

CI/CD に用いられることが多いイメージですね。

例えば mainブランチへのpushをトリガーに、サーバー側へ以下のコマンド発行を命令します。

  • git pull
  • マイグレーションなどの実行
  • アプリケーションプロセスの再起動

この仕組みで、開発者は mainブランチへpushしただけで、あとは自動でデプロイが進むんです!

設定(実装)手順

ymlファイルを作成

今回の GitHub Actions は、mainブランチへのpushをトリガーにしたいと思います。

まず最初に、任意のブランチを作成し、以下のようにymlファイルを作成します。

.github/workflows/任意の名称.yml
name: "CICD test"
on:
  push:
    branches: [ "main" ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Deploy
      env:
        PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
        USER_NAME: ${{ secrets.USER_NAME }}
        HOST_NAME: ${{ secrets.HOST_NAME }}
      run: |
        echo "$PRIVATE_KEY" > private_key && chmod 600 private_key
        ssh -o StrictHostKeyChecking=no -i private_key ${USER_NAME}@${HOST_NAME} 'cd the-app &&
        git pull origin main
        touch log/ga-$(git rev-parse --short HEAD)'

もうお気づきの方もいるかもしれませんが、run句の箇所で”ssh”や”git”などのコマンドを書いています。

つまり、これがActionとして実行される訳なんです。
(他の色々なコマンドも実行可能なので、割となんでも出来てしまうんですよね)

コードの解説

まず最初の on の部分がトリガーを指定してます。
「mainブランチにpushされたら」という指定になっています。

次に jobs ですが、ひとまずname以外はそう書くものなのだと理解しておいてください。
nameは任意の文字列で大丈夫です。

env は環境変数を表しており、後ほど解説します。

run が実際に実行するコマンドを書いている箇所です。
ざっくりは、「サーバーにssh」→「git pull」→「最新コミットハッシュ名のファイルを作成」という流れにしています。

環境変数を設定する

上のコードで出てきた “${{ secrets.PRIVATE_KEY }}” のようなものは、環境変数と呼ばれ、GitHubの画面上で定義します。

ymlファイルを作成したリポジトリで、「Settings」タブ→「Secrets」→「Actions」と進んでください。

右上の「New repository secret」ボタンから環境変数を新規作成できます。
画像の通り3つ作成します。

ちなみに、AWSのEC2を使う場合は以下の通りです。

HOST_NAMEパブリックIPアドレス
PRIVATE_KEY.pemファイルの中身
USER_NAMEec2-user

これで準備はOKです!

GitHub Actions を動かしてみる

想定

先ほどのコードで、mainブランチにpushすると、EC2のlogフォルダに新しくファイルが作成されるはずです。
これを確認していきましょう!

まずはEC2のlogフォルダを事前に見ておきます。

lsコマンドで、logフォルダは空っぽであることが確認できました。

いざpush

ではmainブランチにpushします。
push完了すると、GitHubの画面上からでもActionsの進行状況が確認できます。

チェックマークになっているので、正常に終了したようですね。

しっかりファイルが作成されているか、EC2のlogフォルダを見てみます。

ファイルも作成されていました!
これで無事GitHub Actionsが組めました!

まとめ

GitHub Actions ではgitの行動をトリガーに様々なコマンドを実行できることをご紹介しました。

設定方法は大きく2つで、

  • .github/workflows/xxx.yml を作成
  • GitHubの画面にて環境変数を定義

というステップでした。

今回ご紹介したActionでは、ただ単にファイルを作成するのみでしたが、git pull の後に普段やっているようなデプロイコマンドを書けば自動デプロイも可能となります。

少し触って理解できたら色々と試してみましょう。

コメント