のべラボ.blog

Tech Blog | AWS や サーバーレスやコンテナ などなど

今さらながら GitHub Actions をさわってみる: (入門編)

これまで GitHubリポジトリとしてのみ活用することがほとんどでしたが、GitHub Actions のワークフローを触ってみようと思い至りました。

なぜそう思ったかというと、Amazon CodeCatalyst を触ってみたからです。

aws.amazon.com

Amazon CodeCatalyst を触っていくうちに、「これはどうも GitHub の全体的な機能と似ているんじゃないかな」と個人的な感触を得ました。

Amazon CodeCatalyst のさらなる理解を深めるためには、GitHub の様々な機能を理解しておくのがよいのでは、と思ったわけです。

Amazon CodeCatalyst だけを Dive Deep するのではなく、また、GutHub だけを Dive Deep するのではなく、これら 2 つのサービスを理解し、比較していくことでさらなる理解や知見を深めることができそうだと感じています。

ということで、ひとまず GitHub Actions でワークフローを使って CI/CD 関連の機能を試していきたいと思います。

個人的には CI/CD の環境は、これまでほとんど AWS CodeBuild や AWS CodePipeline を使ってきたのですが、GitHub Actions のワークフローではどんなことができるか、AWSクラウドのリソースと連携できるのか、などを実際に触って確認してみるつもりです。

今回は、全然知識がない中からのスタートなので、入門編 として簡単なワークフローを動かすところまでやって、その時に気づいたこと、思ったことを書いていきたいと思います!

(なお、この記事の内容は 2023 年 2 月時点で触ってみた結果に基づいています。)


クイックスタートを触ってみる

GitHub Actions を入門する上では、まず下記を試してみるのが良さそうです。

docs.github.com

このクイックスタートは、「細かいことはさておき、ひとまず動かしてみよう!」という位置づけのようです。

ふむふむ、GutHub のリポジトリ.github/workflows フォルダをつくって、そこに YAML ファイルを作成すればよさそうです。

ただ、このクイックスタートの 手順は、Web ブラウザで GitHub のページからファイルを編集しているようですが、今回は手元の PC のローカルのリポジトリを編集して、リモートに反映させる形で試していきます。

まずは適当な名前で GitHubリポジトリを作成して、git clone を実行します。

git clone https://github.com/tetsuo-nobe/test.git

そして .github/workflows フォルダ を作成し、クイックスタートに記載されている通りに github-actions-demo.yml というファイルを作成します。ファイル名は任意ですが、今回はクイックスタート通りにしておきました。

内容は下記です。

name: GitHub Actions Demo
run-name: ${{ github.actor }} is testing out GitHub Actions 🚀
on: [push]
jobs:
  Explore-GitHub-Actions:
    runs-on: ubuntu-latest
    steps:
      - run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
      - run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"
      - run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
      - name: Check out repository code
        uses: actions/checkout@v3
      - run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner."
      - run: echo "🖥️ The workflow is now ready to test your code on the runner."
      - name: List files in the repository
        run: |
          ls ${{ github.workspace }}
      - run: echo "🍏 This job's status is ${{ job.status }}."

上記がワークフローの内容を示すものですね。ざっとみると、どんなことが記述されているかが何となくわかります。

例えば、namerun-name は名前に関する定義だな、とか、時々出てくる ${{ }} は事前定義済の変数の内容を出力するのだろうな、とか...

さらに、steps: 以下に記載されている内容がワークフローとして実行すべき処理なのだろうな、とか...

run: は OS に対するコマンドっぽいけど、use: actions/checkout@v3 は何か違うようだ... でも、その下の echo コマンドをみると、どうもリポジトリから clone するためのもののようだ... などとボンヤリわかります。 

ともあれ、クイックスタートでは、ひとまず動かしてみる ことが目的なので、このファイルを保存してリモートに push します。

実際のクイックスタートから少し手順を変えてますが、ブランチに push することにより ワークフローが実行されるはずです。

git  add .
git commit -m "1st commit"
git push

Webブラウザから GitHubリポジトリのページで Actions タブを選択します。

ページ左側に GitHub Actions Demo と表示されています。 YAML ファイルの冒頭にある name: で指定した名前ですね!

これが ワークフローの名前のようです。

それをクリックすると、右側にこのワークフローが実行された履歴の一覧が表示されます。

履歴の一覧の中で xxxx is testing out GitHub Actions 🚀 のリンクをクリックします。(xxxx は環境に応じて読み替えて下さい。)

緑色のチェックマークのアイコンが表示されているので、ワークフローが成功したようです。ちなみに失敗すると 赤色の × アイコンが表示されます。

ワークフローのページが表示されるので、その中の Explore-GitHub-Actions をクリックします。

これは、ワークフローの YAML の中の jobs: で指定したジョブ名のようですね。

クリックすると、ワークフローのログが参照できます。

ログを見ると、ワークフローの YAML ファイルの中で steps: として定義した処理が実行されている様子がわかりますね。

ほとんど echo コマンドを実行する内容でしたが、無事にクイックスタートのワークフローは動かせたようです!


ワークフローの基本を理解する。

さて、クイックスタートでは「細かいことはさておき、とりあえず動かしてみよう」という位置づけでワークフローを実行してみましたが、もう少し体系的にワークフローの基本を理解していきたいですよね。

そこで、下記のページを読んで、さらにサンプルのワークフローを動かしてみました。

docs.github.com

このページでは、クイックスタートと異なり、サンプルのワークフローを取り上げつつ、基本概念やワークフローの YAML の各構成要素を解説してくれています。

例えば「ワークフロー」、「ジョブ」、「ステップ」、「ランナー」という基本概念も、このページで説明されています。

また、クイックスタートで出てきた uses: actions/checkout@v3 が何だったのかがわかりますね。

actions/checkout は 複雑で頻繁に繰り返されるタスクを実行するための「アクション」であり、@v3 はバージョンの指定、use: はそのアクションをジョブのステップとして実行するキーワードであることがわかりました。

ここで、ふと疑問がわきました。クイックスタートの YAMLファイルを .github/workflows フォルダ に置いたまま、上記ページのサンプルのワークフローの YAML ファイルを追加してもいいのかな?という疑問です。

早速試してみましたが、2つの ワークフローが push をトリガーに正常に動作することを確認できました。

今回は 2つのワークフローは push をトリガーのイベントとしていますが、ワークフローの YAML の中の on: で イベントを変更することもできるようですね。


今回の所感

クイックスタートや、サンプルのワークフローを簡単に、問題なく実行できたのは嬉しいですね。

ワークフローの YAML の書き方を一度に全部覚えるのは無理があるので、色々試しながら、調べながら記憶に定着させていきます。

まだ基本中の基本の「小さな成功」でしかありませんが、この小さいな成功を積み上げていきたいです。

次回は、シンプルなアプリケーションのビルドを行うワークフローを試して記事にするつもりです!

/* -----codeの行番号----- */