branch10480’s blog

Topics that I've learned.

GitHub Actions を使う前のメモ書き

GitHub Actions まとめ

  • ワークフローは1つ以上のジョブを持つ
  • ジョブは直列もしくは並列で実行できる
  • ジョブは1つ以上のステップを持ち、ステップはスクリプト、もしくはアクションを実行する
  • ステップは繰り返し使えるもの

Workflows

  • yamlで定義する
  • 1つ以上のジョブを持っている
  • トリガーは3種類
    • イベントによるトリガー
    • 手動でのトリガー
    • スケジュールによるトリガー
  • .github/workflows/に保存する

Events

イベントとはリポジトリがトリガーする特定のアクティビティのこと。

  • PRを作ったとき
  • issueを開いたとき
  • リポジトリにコミットをプッシュしたとき ...etc

Jobs

ジョブは同じランナー上にあるワークフロー上にある処理のこと。 - 実態は2種類 - シェエルスクリプト - 実行されるアクションのこと - 同じランナー上で実行されるのでそれぞれのステップでデータがシェアされる - ビルドのジョブでビルドしたあとにテストジョブが走る - 依存関係についてカスタマイズできる - デフォルトだと依存関係はなく、並列に実行される

Actions

アクションはGitHub Actionsプラットフォームのためのアプリケーションのこと。 複雑だけどよく使うタスクを処理する。 - アクションはGitHubのgitリポジトリをpullできる - 自分のビルド環境に適切なツールチェーンをセットアップする - クラウドプロバイダへの認証をセットアップする

Runners

  • ランナーはサーバのこと
  • ランナーはトリガーに応じてワークフローを走らせる。
  • 1つのランナーが一度に実行できるジョブは1つだけ
  • 提供しているランナーは3種類
    • Ubuntu Linux
    • Microsoft Windows
    • macOS
  • 上記以外にも自分でホストしたものを独自に定義できる模様

構造例

  • Workflow
    • Runner1
      • Job1
        • Step1
        • Step2
      • Job2
        • Step1
        • Step2
    • Runner2
      • Job1
        • Step1
        • Step2
      • Job2
        • Step1
        • Step2

ワークフローを作成する

  1. リポジトリに .github/workflows/ フォルダを作成する
  2. .github/workflows/ フォルダに learn-github-actions.yml を追加する

中身は以下

name: learn-github-actions
on: [push]
jobs:
  check-bats-version:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: '14'
      - run: npm install -g bats
      - run: bats -v
  1. 変更をコミットしてpushする

Workflowファイルについて理解する

以下のWorkflowファイルについて理解する

name: learn-github-actions
on: [push]
jobs:
  check-bats-version:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: '14'
      - run: npm install -g bats
      - run: bats -v

以下に詳しく書いてある https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions

name: learn-github-actions

[任意] Workflow名

on: [push]

トリガーの設定。 詳しくはGitHub Actions トリガーを参照。

jobs:

learn-github-actions ワークフロー内のジョブを記載する。

check-bats-version:

ジョブ名の定義。

runs-on: ubuntu-latest

ジョブが実行されるマシンの指定。

steps:

check-bats-versionジョブ内のステップを定義する。
ステップになるのは

  1. アクション
  2. シェエルスクリプト
- uses: actions/checkout@v3

v3のactions/checkoutアクションを実行する。 チェックアウトはリポジトリをランナーの上にpullする。 ビルドやテストのために使う。

- uses: actions/setup-node@v3
  with:
    node-version: '14'

特定のバージョンのnode.jsをインストールする。

- run: npm install -g bats

ランナー上でコマンドを実行する。

GitHub Actionsの請求について

  • パブリックリポジトリ、self-hosted runner での利用は無料
  • プライベートリポジトリでは制限がある

使用制限について

詳しくはこちら

https://docs.github.com/en/actions/learn-github-actions/usage-limits-billing-and-administration#usage-limits

再利用可能なWorkflowの請求について

ワークフローを再利用するとき、請求は常に呼び出し側のワークフローに関連付けられる。

アーティファクトとログのリテンションポリシー

アーティファクトとログのリテンション期間を設定することができる。 デフォルトでは90日間保持される。

  • パブリックリポジトリでは1 - 90日で指定できる
  • プライベートリポジトリでは1 - 400日で指定できる

リテンション機関を変更した場合は、新しいアーティファクトとログに対して適用される。

アクションの探し方、カスタマイズの仕方

アクションはコミュニティで作られたものや、自分で作ってリポジトリに作ったものを使うことができる。

https://docs.github.com/en/actions/learn-github-actions/finding-and-customizing-actions

マーケットプレイスからの探し方

  1. リポジトリ内のワークフローファイルを探す
  2. 右上の編集ボタンをクリック
  3. エディタの右側に「マーケットプレイス」タブがあるのでそこを選択

※ チェックバッジがついているものはGitHubがパートナー組織として認定しているところが作ったもの

自分のワークフローへのアクションの追加の仕方

  1. マーケットプレイスで見つけたアクションのページを開く
  2. 「Installation」の下にあるコピーボタンをクリック
  3. ワークフローファイルの新しいステップとしてコピーしたコードを貼り付ける

※ Dependabotでアクションをアップデートすることもできる

同じリポジトリにあるアクションの追加方法

2通りの書き方で指定できる

  1. {owner}/{repo}@{ref}
  2. ./path/to/dir

書き方の例

ファイル構造

|-- hello-world (repository)
|   |__ .github
|       └── workflows
|           └── my-first-workflow.yml
|       └── actions
|           |__ hello-world-action
|               └── action.yml

ワークフローファイルの書き方例

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      # This step checks out a copy of your repository.
      - uses: actions/checkout@v3
      # This step references the directory that contains the action.
      - uses: ./.github/actions/hello-world-action

GitHub-hosted runners でサポートされているソフトウェア

以下を参照。

https://docs.github.com/ja/actions/using-github-hosted-runners/about-github-hosted-runners#supported-software