GitHub Actions 初めてのワークフロー作成

GitBeginner
オンラインで実践に進む

はじめに

GitHub Actions は、ビルド、テスト、デプロイのパイプラインを自動化できる継続的インテグレーション/継続的デリバリー (CI/CD) プラットフォームです。リポジトリへのすべてのプルリクエストに対してビルドとテストを実行したり、マージされたプルリクエストを本番環境にデプロイしたりするワークフローを作成できます。

この実験 (Lab) では、最初のシンプルなワークフローを作成します。GitHub Actions が必要とする標準的なディレクトリ構造、ワークフロー名の定義方法、ワークフローをトリガーするイベントの指定方法、およびコマンドを実行するためのジョブの定義方法について学習します。

この実験 (Lab) は、前の実験 (Lab) で作成したリポジトリを基盤とします。github-actions-demo リポジトリを LabEx 環境にクローンし、最初のワークフローファイルを追加します。

.github/workflows 内に hello-world.yml という名前の新しい YAML ファイルを作成する

このステップでは、前の実験(Lab)で作成したリポジトリをクローンし、最初のワークフローファイルを作成します。

  1. github-actions-demo の GitHub リポジトリページで、緑色の Code ボタンをクリックします。
  2. HTTPS タブが選択されていることを確認し、URL をコピーします。URL は https://github.com/your-username/github-actions-demo.git のような形式になります。
  3. LabEx 環境でターミナルを開きます。デフォルトのパスは ~/project です。
  4. git clone コマンドを使用してリポジトリをダウンロードします。your-username は実際の GitHub ユーザー名に置き換えてください。
cd ~/project
git clone https://github.com/your-username/github-actions-demo.git

出力例:

Cloning into 'github-actions-demo'...
remote: Enumerating objects: X, done.
remote: Counting objects: 100% (X/X), done.
remote: Total X (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (X/X), done.
  1. クローンしたリポジトリ内に移動します:
cd ~/project/github-actions-demo
  1. .github/workflows ディレクトリは、前の実験(Lab)ですでに存在しているはずです。存在を確認します:
ls -R .github
  1. .github/workflows ディレクトリ内に hello-world.yml という名前の新しいファイルを作成します。このファイルにはワークフローの設定が含まれます:
touch .github/workflows/hello-world.yml

ファイルが正常に作成されたことを確認できます:

ls -R .github

workflows ディレクトリ内に、(前の実験(Lab)からの) main.yml と新しく作成した hello-world.yml の両方が表示されるはずです。

YAML ファイルに 'Hello World Workflow' という値を 'name' キーとして追加する

このステップでは、ワークフローを定義するために YAML ファイルの編集を開始します。最初に追加する要素は、ワークフローの name です。この名前は GitHub リポジトリの Actions タブに表示され、識別が容易になります。

WebIDE エディタを使用してファイル hello-world.yml を開きます。ファイルは、左側のファイルエクスプローラーの project/github-actions-demo/.github/workflows/ の下にあります。

ファイルに以下の内容を追加します。

name: Hello World Workflow

このキーと値のペアは、ワークフローに人間が読める名前を割り当てます。

内容を追加した後、ファイルを保存します(Ctrl+S または Cmd+S)。

ターミナルでファイルの内容を確認できます。

cat .github/workflows/hello-world.yml
Verify workflow name

プッシュ時にトリガーするための push イベントを伴う on キーを追加する

このステップでは、ワークフローをいつ実行するかを定義します。これは on キーワードを使用して行います。ここでは、コードがリポジトリにプッシュされるたびにこのワークフローが実行されるようにしたいとします。

.github/workflows/hello-world.yml を再度開き、name キーの下に以下の行を追加してください。

on: [push]

ファイルは次のようになります。

name: Hello World Workflow
on: [push]

on: [push] の設定は、リポジトリ内のいずれかのブランチに対して git push が行われるたびに、GitHub Actions にこのワークフローをトリガーするように指示します。

注記: GitHub Actions は、他にも多くのトリガーイベントをサポートしています。例えば、以下のようなものがあります。

  • pull_request: プルリクエストが開かれた、同期された、またはクローズされたときにトリガーされます。
  • workflow_dispatch: GitHub Actions タブから手動でトリガーすることを可能にします。
  • schedule: cron 構文を使用してスケジュールに基づいて実行されます。
  • release: リリースが公開されたときにトリガーされます。
  • その他、issuespull_request_review などの多くのイベントがあります。

この実験(Lab)では、最もシンプルで一般的なトリガーである on: [push] を使用します。GitHub Actions の学習を進めるにつれて、他のトリガータイプを探索することができます。

変更を加えたらファイルを保存してください。

'build' という名前のジョブを持つ jobs セクションを追加する

このステップでは、ワークフローが実行する実際の作業を定義します。ワークフローの実行は、1 つ以上のjobsで構成されます。ジョブはデフォルトで並列に実行されます。

jobsセクションを追加し、buildという名前の単一のジョブを含めます。このジョブは Ubuntu 環境で実行され、単純なコマンドを実行します。

.github/workflows/hello-world.ymlファイルに以下の内容を追記してください。

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Say Hello
        run: echo "Hello, World!"

これが何をするのかを分解してみましょう。

  • jobs:: ジョブセクションを開始します。
  • build:: ジョブの ID です。
  • runs-on: ubuntu-latest: ジョブを実行するマシンの種類(ランナー)を指定します。
  • steps:: ジョブ内で実行するタスクのリストです。
  • run: echo "Hello, World!": 実行するシェルコマンドです。

完全なファイルは次のようになります。

name: Hello World Workflow
on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Say Hello
        run: echo "Hello, World!"

ファイルを保存してください。

git コマンドを使用してワークフローファイルをコミットしプッシュする

このステップでは、新しく作成したワークフローファイルをコミットし、GitHub にプッシュします。これにより、作成したワークフローがトリガーされます。

  1. リポジトリのディレクトリにいることを確認します。
cd ~/project/github-actions-demo
  1. リポジトリのステータスを確認し、未追跡のファイルを確認します。
git status
  1. 新しいファイルをステージングエリアに追加します。
git add .github/workflows/hello-world.yml
  1. わかりやすいメッセージを付けて変更をコミットします。
git commit -m "Add hello world workflow"

出力例:

[main ... ] Add hello world workflow
 1 file changed, X insertions(+), X deletions(-)
 create mode 100644 .github/workflows/hello-world.yml
  1. 変更を GitHub 上のリモートリポジトリにプッシュします。
git push

認証に関する注意:
git pushを実行すると、WebIDE が自動的に認証を求めます。以下の詳細な手順に従ってください。

  1. "The extension 'GitHub' wants to sign in using GitHub." というメッセージが表示されたポップアップが表示されたら、Allow をクリックします。
  2. 新しい通知が表示されます。"Copy&Continue to GitHub" をクリックし、次のプロンプトで "Open" をクリックします。
  3. 開いたブラウザウィンドウで GitHub アカウントにログインし、コピーされた認証コードを入力します。認証を確認した後、ページは自動的に閉じます。
  4. 数秒待つと、ターミナルでプッシュ操作が正常に完了したことが表示されます。

プライバシーに関する注意: WebIDE は認証目的で GitHub アカウントへのフルアクセスを要求します。プライバシーの懸念については心配する必要はありません。現在の実験(Lab)が完了すると、LabEx VM は直ちに破棄され、資格情報や認証情報は保持されません。

この認証プロセスでは、ユーザー名や Personal Access Token を手動で設定する必要はありません。

認証手順に従った後、以下のような出力が表示されます。

出力例:

Enumerating objects: X, done.
Counting objects: 100% (X/X), done.
Delta compression using up to 4 threads
Compressing objects: 100% (X/X), done.
Writing objects: 100% (X/X), XXX bytes | XXX.00 KiB/s, done.
Total X (delta X), reused X (delta X), pack-reused 0
To https://github.com/your-username/github-actions-demo.git
   XXXXXXX..XXXXXXX  main -> main
  1. Web ブラウザで GitHub 上のリポジトリにアクセスし、Actions タブに移動します。ここで、「Hello World Workflow」が実行中または完了しているのを確認できるはずです。
Verify workflow run

注意: コードをプッシュすると、リポジトリ内に複数のワークフローファイルがある場合、複数の Actions がトリガーされることがあります。左側のサイドバーでワークフロー名を確認するか、右側のワークフロー実行リストを使用して、目的のワークフロー実行を特定してください。

  1. ワークフローの実行をクリックして、詳細な実行ログを表示します。以下が表示されます。
    • ワークフロー名: 上部に「Hello World Workflow」
    • ジョブ名: 左側のサイドバーに「build」
    • ステップの実行: 「build」ジョブをクリックして展開し、次に「Say Hello」ステップをクリックします。
    • 出力: ログに Hello, World! という出力が表示されているはずです。
Verify workflow run logs

これにより、ワークフローがどのように実行されたか、どのステップが正常に実行され、どのような出力が生成されたかについての完全なビューが得られます。これは、デバッグやワークフローの動作を理解する上で非常に役立ちます。

まとめ

この実験(Lab)では、初めての GitHub Actions ワークフローを正常に作成しました。以下の方法を学習しました。

  1. 必要な .github/workflows ディレクトリ構造を作成する方法。
  2. YAML 構文を使用してワークフローを定義する方法。
  3. name とトリガーイベントを on を使用して設定する方法。
  4. コマンドを実行するための jobssteps を定義する方法。
  5. ワークフローをコミットし、リポジトリにプッシュする方法。

これらは、ソフトウェアのビルド、テスト、デプロイを自動化する複雑な CI/CD パイプラインを作成するための基本的な構成要素です。