GitHub Action Setup List

date
May 30, 2024
slug
gitAction
status
Published
tags
GitHub Action
summary
git action command 中心にメモします
type
Post

git action

git action 利用時、一度作成して、あとから編集する時、よく忘れるので、メモを残す。
 
 

1. git action 各設定項目

  1. name: actionの名前
  1. on: どのタイミングで実行するか
      • 例: mainブランチにpushされた時, プルリクエストが作成された時
        • on: push: branches: - main
      イベント
      説明
      push
      プッシュされた時
      pull_request
      プルリクエストが作成された時
      release
      リリースされた時
      schedule
      スケジュールされた時
      workflow_dispatch
      手動で実行された時
      repository_dispatch
      リポジトリディスパッチイベントが発生した時
      page_build
      GitHub Pagesのビルドが完了した時
      status
      ステータスが変更された時
      check_run
      チェックランが完了した時
      check_suite
      チェックスイートが完了した時
      pull_request_target
      プルリクエストが作成された時
      push
      プッシュされた時
      workflow_run
      ワークフローランが完了した時
      delete
      ブランチが削除された時
      create
      ブランチが作成された時
      repository_dispatch
      リポジトリディスパッチイベントが発生した時
      watch
      スターがつけられた時
      fork
      フォークされた時
      issues
      issueが作成された時
      issue_comment
      issueにコメントがつけられた時
      pull_request_review
      プルリクエストレビューが作成された時
      pull_request_review_comment
      プルリクエストレビューコメントが作成された時
      project
      プロジェクトが作成された時
      project_card
      プロジェクトカードが作成された時
      project_column
      プロジェクトカラムが作成された時
      registry_package
      レジストリパッケージが作成された時
      release
      リリースが作成された時
  1. jobs: 実行するジョブ
      • jobs.job_id.job_name sample: 以下の場合、job_idはbuild, ジョブの名前はBuild
        • jobs: #jobs build: #ジョブ名job_id name: Build #ジョブの名前
  1. runs-on: ジョブを実行するランナー
      • sample: 以下の場合、Ubuntu 20.04で実行(osにより、料金が異なる)
        • runs-on: ubuntu-latest
          ランナー
          OS
          ubuntu-latest
          Ubuntu 20.04
          ubuntu-20.04
          Ubuntu 20.04
          ubuntu-18.04
          Ubuntu 18.04
          ubuntu-16.04
          Ubuntu 16.04
          windows-latest
          Windows Server 2019
          windows-2019
          Windows Server 2019
          windows-2016
          Windows Server 2016
          macOS-latest
          macOS Catalina 10.15
          macOS-10.15
          macOS Catalina 10.15
          macOS-10.14
          macOS Mojave 10.14
  1. steps: ジョブの手順
      • sample: 以下の場合、run: echo "Hello, World!" を実行
        • ジョブ実行の手順を記述する、複数のステップを記述することができる。 複数のstepはそれぞれ異なるプロセスで実行される。ステップ内部で環境変数変更しても、他のステップには影響を与えない。後のstepに環境変数を反映したい場合、set-envを利用する。
          steps: - name: Hello world run: echo "Hello, World!"
  1. uses: 使うアクション
    1. 使うアクションを指定する @以降は指定必要です。タグだけでなく、ブランチやコミットハッシュも指定できる。
      • バージョン指定
        • - uses: actions/checkout@v2
      • ブランチ指定
        • - uses: actions/checkout@main
      • コミットハッシュ指定
        • - uses: actions/checkout@f9d7efb
      • リポジトリ指定
        • - uses: owner/repo@main
      • サブディレクトリのアクションを使う
        • - uses: owner/repo/subdirectory@main
      • ローカルファイルのアクションを使う
        • - uses: ./path/to/action
      • dockerイメージのアクションを使う
        • - uses: docker://alpine:3.12
      • publicなDockerイメージのアクションを使う
        • - uses: docker://ghcr.io/owner/repo:tag
      • プライベートなDockerイメージのアクションを使う
        • - uses: docker://docker.pkg.github.com/owner/repo/image:tag
      以下の場合、actions/checkout@v2を使う
      name: "CI" on: push: branches: - main jobs: ut-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install dependencies run: npm install - name: Run tests - run: npm test
よく使うアクション
  • actions/checkout@v2: リポジトリをチェックアウトする
  • actions/setup-node@v2: Node.jsのバージョンをセットアップする
  • actions/cache@v2: キャッシュを利用する
  • actions/upload-artifact@v2: アーティファクトをアップロードする
  • actions/download-artifact@v2: アーティファクトをダウンロードする
  • actions/github-script@v3: GitHub APIを利用する
  • actions/create-release@v1: リリースを作成する
  • actions/upload-release-asset@v1: リリースアセットをアップロードする
  • actions/labeler@v2: ラベルを追加する
  1. with: アクションに渡す引数
    1. jobs.job_id.steps.with
        • アクションに渡す引数を指定する
        • キーと値のペアで指定する
        • キーと値はスペースで区切る
        sample: 以下の場合、actions/checkout@v2に引数を渡す
        - uses: actions/checkout@v2 with: ref: main #ブランチを指定 - uses: setup-node@v2 with: node-version: '14' #Node.jsのバージョンを指定
    2. jobs.job_id.steps.with.entorypoint とjobs.job_id.steps.with.args
      1. dockerイメージの場合、エントリーポイントと引数を指定する
        • エントリーポイントを指定する
        sample: 以下の場合、actions/checkout@v2にエントリーポイントを指定
        - uses: docker://alpine:3.12 with: entrypoint: /bin/sh args: -c echo "Hello, World!"
  1. run: シェルスクリプトを実行する
      • jobs.job_id.steps.run
      • sample: 以下の場合、run: echo "Hello, World!" を実行
        • name: "CI" on: push: branches: - main jobs: ut-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: Install dependencies #依存関係をインストール run: npm install - name: Build run: | #複数行のシェルスクリプトを実行 npm run build npm run test
  1. working-directory: run 実行時のワーキングディレクトリ
      • jobs.job_id.steps.working-directory
      • sample: 以下の場合、ワーキングディレクトリを指定
        • name: "CI" on: push: branches: - main jobs: ut-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: Install dependencies #依存関係をインストール run: npm install working-directory: ./app #ワーキングディレクトリを指定 - name: Build run: | #複数行のシェルスクリプトを実行 npm run build npm run test working-directory: ./app #ワーキングディレクトリを指定
  1. shell: シェルを指定
      • jobs.job_id.steps.shell
      • 指定しない場合、デフォルトのシェルが使われる
      • 指定可能なシェル
        • シェル
          説明
          bash
          Bash
          pwsh
          PowerShell
          python
          Python
          sh
          sh
      • sample: 以下の場合、シェルを指定
      name: "CI" on: push: branches: - main jobs: ut-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: bash script run: | echo "Hello, World!" shell: bash -eux {0} #シェルを指定 - name: python script run: | python -c "print('Hello, World!')" shell: python #シェルを指定 - name: sh script run: | echo "Hello, World!" shell: sh #シェルを指定 - name: pwsh script run: | Write-Host "Hello, World!" shell: pwsh #シェルを指定
  1. timeout-minutes: タイムアウト時間
    1. jobs.job_id.steps.timeout-minutes : stepsのタイムアウト時間
        • タイムアウト時間を指定する
        • タイムアウト時間を超えると、ジョブがキャンセルされる
        • sample: 以下の場合、タイムアウト時間を指定
        name: "CI" on: push: branches: - main jobs: ut-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: Install dependencies #依存関係をインストール run: npm install timeout-minutes: 5 #タイムアウト時間を指定 - name: Build run: | #複数行のシェルスクリプトを実行 npm run build npm run test timeout-minutes: 10 #タイムアウト時間を指定
    2. jobs.job_id.timeout-minutes : ジョブのタイムアウト時間
        • タイムアウト時間を指定する
        • タイムアウト時間を超えると、ジョブがキャンセルされる
        • sample: 以下の場合、タイムアウト時間を指定
        name: "CI" on: push: branches: - main jobs: ut-test: runs-on: ubuntu-latest timeout-minutes: 10 #タイムアウト時間を指定 steps: - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: Install dependencies #依存関係をインストール run: npm install - name: Build run: | #複数行のシェルスクリプトを実行 npm run build npm run test
  1. continue-on-error: エラーが発生しても処理を続行するか
    1. jobs.job_id.steps.continue-on-error
        • エラーが発生しても処理を続行するか指定する
        • エラーが発生しても処理を続行する場合、trueを指定する
        • sample: 以下の場合、エラーが発生しても処理を続行
        name: "CI" on: push: branches: - main jobs: ut-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: Install dependencies #依存関係をインストール run: npm install - name: Build run: | #複数行のシェルスクリプトを実行 npm run build npm run test continue-on-error: true #エラーが発生しても処理を続行
    2. jobs.job_id.continue-on-error
        • エラーが発生しても処理を続行するか指定する
        • エラーが発生しても処理を続行する場合、trueを指定する
        • sample: 以下の場合、エラーが発生しても処理を続行
        name: "CI" on: push: branches: - main jobs: ut-test: runs-on: ubuntu-latest continue-on-error: true #エラーが発生しても処理を続行 steps: - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: Install dependencies #依存関係をインストール run: npm install - name: Build run: | #複数行のシェルスクリプトを実行 npm run build npm run test
  1. default: デフォルト値
    1. ワークフロー全体やジョブ内のステップでデフォルト適用する値を指定する ワークフロー全体していした場合、ワークフロー全てのJOBに適用される
      defaults: run: shell: bash # デフォルトのshellを指定 working-directory: ./app # デフォルトのワーキングディレクトリを指定
      特定のジョブに適用する場合、ジョブ内に指定する
      jobs: build: defaults: run: shell: bash # job のdefault shell を指定 working-directory: ./app # job のdefault working-directory を指定 runs-on: ubuntu-latest steps: - run: echo "Hello, World!"
  1. env: 環境変数
      • ワークフロー、特定のJob、特定のステップに環境変数を設定する
      • ワークフロー全体に適用する場合、ワークフローのenvに設定する
      • 特定のJobに適用する場合、Jobのenvに設定する
      • 特定のステップに適用する場合、ステップのenvに設定する
      • 優先的に設定される順番は、ステップ > Job > ワークフロー
      • ワークフロー実行時、defaultで設定された環境変数一覧
        • 環境変数
          説明
          HOME
          ユーザーのホームディレクトリ
          GITHUB_WORKFLOW
          ワークフローの名前
          GITHUB_RUN_ID
          ワークフローの実行ID
          GITHUB_RUN_NUMBER
          ワークフローの実行番号
          GITHUB_ACTION
          アクションの名前
          GITHUB_ACTIONS
          固定true
          GITHUB_ACTOR
          GitHubのユーザー名
          GITHUB_REPOSITORY
          リポジトリの名前
          GITHUB_EVENT_NAME
          イベントの名前
          GITHUB_EVENT_PATH
          イベントのパス
          GITHUB_WORKSPACE
          ワークスペースのパス
          GITHUB_SHA
          コミットのSHA
          GITHUB_REF
          ブランチ名
          GITHUB_HEAD_REF
          プルリクエストのヘッドブランチ名
          GITHUB_BASE_REF
          プルリクエストのベースブランチ名
          GITHUB_SERVER_URL
          GitHubのサーバーURL
          GITHUB_API_URL
          GitHubのAPIのURL
          GITHUB_GRAPHQL_URL
          GitHubのGraphQLのURL
          GITHUB_REPOSITORY_OWNER
          リポジトリの所有者
          GITHUB_RUN_ATTEMPT
          ワークフローの実行回数
          GITHUB_JOB
          ジョブの名前
          GITHUB_ACTION_REPOSITORY
          アクションのリポジトリ
          GITHUB_ACTION_REF
          アクションのリファレンス
          GITHUB_ACTION_SHA
          アクションのSHA
          GITHUB_PATH
          パス
          GITHUB_ENV
          環境変数ファイルのパス
          RUNNER_OS
          ランナーのOS
          RUNNER_TOOL_CACHE
          ツールのキャッシュディレクトリ
          RUNNER_TEMP
          ランナーの一時ディレクトリ
          RUNNER_WORKSPACE
          ランナーのワークスペース
          ACTIONS_RUNTIME_URL
          アクションのランタイムURL
          ACTIONS_RUNTIME_TOKEN
          アクションのランタイムトークン
      sample: 以下の場合、ワークフロー全体に適用する環境変数と、Jobに適用する環境変数を設定
      name: "CI" on: push: branches: - main env: NODE_VERSION: 14 # ワークフロー全体に適用する環境変数 jobs: ut-test: runs-on: ubuntu-latest env: # Jobに適用する環境変数 NODE_ENV: test steps: - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: Install dependencies #依存関係をインストール run: npm install env: # ステップに適用する環境変数 CI: true - name: Build run: | #複数行のシェルスクリプトを実行 npm run build npm run test env: # ステップに適用する環境変数 NODE_ENV: ${{ NODE_ENV }}
  1. secrets: シークレット
      • ワークフロー全体、特定のJob、特定のステップにシークレットを設定する
      • ワークフロー全体に適用する場合、ワークフローのsecretsに設定する
      • 特定のJobに適用する場合、Jobのsecretsに設定する
      • 特定のステップに適用する場合、ステップのsecretsに設定する
      • 優先的に設定される順番は、ステップ > Job > ワークフロー
      • ワークフロー実行時、defaultで設定されたシークレット一覧
      • シークレットの設定方法
        • リポジトリのSettings > Secrets > New repository secret からシークレットを設定する
        • ワークフローのsecretsに設定する
        • シークレットの値は暗号化されて保存される
        • シークレットの値はワークフロー内で参照することができる
        • シークレットの値は環境変数として参照することができる
        • シークレットの値はGitHub Actionsのログには表示されない sample: 以下の場合、ワークフロー全体に適用するシークレットと、Jobに適用するシークレットを設定
      name: "CI" on: push: branches: - main secrets: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # ワークフロー全体に適用するシークレット jobs: ut-test: runs-on: ubuntu-latest secrets: # Jobに適用するシークレット NODE_ENV: ${{ secrets.NODE_ENV }} steps: - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: Install dependencies #依存関係をインストール run: npm install secrets: # ステップに適用するシークレット CI: ${{ secrets.CI }} - name: Build run: | #複数行のシェルスクリプトを実行 npm run build npm run test secrets: # ステップに適用するシークレット NODE_ENV: ${{ secrets.NODE_ENV }}
      • 秘密情報をワークフロー内で使用
      steps: - name: Use a secret run: echo ${{ secrets.MY_SECRET }}
      • アクションにパラメータ経由で、シークレットを渡す
      - uses: actions/checkout@v2 with: token: ${{ secrets.GITHUB_TOKEN }}
      • シークレットを環境変数として渡す
      - name: Use a secret run: echo ${{MY_SECRET}} env: MY_SECRET: ${{ secrets.MY_SECRET }}
  1. イベントフィルタ
      • ブランチとタグを指定して、イベントをフィルタリングする
      keyword
      説明
      branches
      ブランチ名
      branches-ignore
      ブランチ名を無視
      tags
      タグ名
      tags-ignore
      タグ名を無視
      paths
      パス
      paths-ignore
      パスを無視
      types
      イベントのタイプ
      • branchesとbranches-ignore同時に指定することはできない
      • tagsとtags-ignore同時に指定することはできない
      • 利用可能なパターンマッチ
        • \: 0文字以上の任意の文字: 例: feature/
        • \: 0文字以上の任意の文字列: 例: feature//main
        • ?: 1文字の任意の文字: 例: feature/?/main
        • [set]: 指定された文字のいずれか: 例: feature/[0-9]*
        • [!set]: 指定された文字以外のいずれか : 例: feature/[!0-9]*
        • {p,q}: pまたはq: 例: feature/{main,develop}
        • \: エスケープ文字: 例: feature/\*
        • |: 複数のパターン: 例: feature/main|develop
        • !: 否定: 例: !feature/main
        • on: push: branches: - main tags: - v1 paths: - 'docs/**' - '!docs/README.md'
      • 特定のファイルが変更された時にのみワークフローを実行する
        • on: push: paths: - 'docs/**'
      • 特定の種類のアクティビティのみをトリガーする
        • on: push: types: [created, edited]
  1. needs: ジョブ間の依存関係を制御
      • ワークフロー特定のジョブ成功した後、他のジョブを実行する場合
      • jobs.job_id.needs
      • sample: 以下の場合、ut-testジョブが成功した後、deployジョブを実行
      name: "CI" on: push: branches: - main jobs: ut-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: Install dependencies #依存関係をインストール run: npm install - name: Build run: | #複数行のシェルスクリプトを実行 npm run build npm run test deploy: runs-on: ubuntu-latest needs: ut-test #ut-testジョブが成功した後、deployジョブを実行 steps: - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: Deploy run: npm run deploy
  1. outputs: 出力
      • ジョブの出力を他のジョブで利用する
      • jobs.job_id.outputs
      • 定義;${{ steps.step_id.outputs.output_id }}
      • step側変数定義:echo "::set-output name=output_id::value"
      • sample: 以下の場合、ut-testジョブの出力をdeployジョブで利用
      name: "CI" on: push: branches: - main jobs: ut-test: runs-on: ubuntu-latest outputs: test-result: ${{ steps.test.outputs.result }} steps: - name: Test id: test run: echo "::set-output name=result::success" deploy: runs-on: ubuntu-latest needs: ut-test steps: - name: Deploy run: echo ${{ needs.ut-test.outputs.test-result }}
  1. matrix: マトリックスビルドの設定
      • 複数のOSやプログラミング言語のバージョンを組み合わせで行う場合
      • jobs.job_id.strategy.matrix
      • sample: 複数OSとNode.jsのバージョンを組み合わせでビルド
      name: "CI" on: push: branches: - main jobs: ut-test: strategy: matrix: os: [ubuntu-latest, windows-latest, macOS-latest] node: [14, 16] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: setup Node.js uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} - name: Install dependencies run: npm install - name: Build run: | #複数行のシェルスクリプトを実行 npm run build npm run test
      • include: マトリックスビルドの設定
        • 特定の変数の組み合わせ時だけ、新しい変数を追加する
        • sample: 以下の場合、マトリックスビルドの設定を指定
        • name: "CI" on: push: branches: - main jobs: ut-test: strategy: matrix: os: [ubuntu-latest, windows-latest, macOS-latest] include: - os: ubuntu-latest node: 14 - os: windows-latest node: 16 - os: ubuntu-18.04 # 存在しない組み合わせも指定可能 node: 10 runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: setup Node.js uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }}§ - name: Install dependencies run: npm install - name: Build run: | #複数行のシェルスクリプトを実行 npm run build npm run test
      • exclude: マトリックスビルドの設定
      • 特定の変数の組み合わせ時、マトリクスを除外する
      • sample: 以下の場合、マトリックスビルドの設定を指定
      name: "CI" on: push: branches: - main jobs: ut-test: strategy: matrix: os: [ubuntu-latest, windows-latest, macOS-latest] exclude: - os: windows-latest node: 14 - os: ubuntu-latest node: 16 runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: setup Node.js uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }}§ - name: Install dependencies run: npm install - name: Build run: | #複数行のシェルスクリプトを実行 npm run build npm run test
      • fail-fast: マトリックスビルドの設定
      • 特定の変数の組み合わせ時、エラーが発生した場合、他の組み合わせのビルドをキャンセルする
      • sample: 以下の場合、マトリックスビルドの設定を指定
      name: "CI" on: push: branches: - main jobs: ut-test: strategy: matrix: os: [ubuntu-latest, windows-latest, macOS-latest] fail-fast: true runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: setup Node.js uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }}§ - name: Install dependencies run: npm install - name: Build run: | #複数行のシェルスクリプトを実行 npm run build npm run test
    1. max-paralle: マトリックスビルドの設定
      • マトリクス同時に実行するジョブの最大数を指定する
      • sample: 以下の場合、マトリックスビルドの設定を指定
      name: "CI" on: push: branches: - main jobs: ut-test: strategy: matrix: os: [ubuntu-latest, windows-latest, macOS-latest] max-parallel: 2 runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: setup Node.js uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }}§ - name: Install dependencies run: npm install - name: Build run: | #複数行のシェルスクリプトを実行 npm run build npm run test
  1. スケジュールで定期実行
      • cron: スケジュールを指定
      • sample: 以下の場合、スケジュールで定期実行
      name: "CI" on: schedule: - cron: '0 0 * * *' jobs: ut-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: Install dependencies #依存関係をインストール run: npm install - name: Build run: | #複数行のシェルスクリプトを実行 npm run build npm run test
  1. コンテキスト
      • ワークフロー実行時の情報 コンテキスト情報
      コンテキスト
      説明
      github
      GitHubの情報
      runner
      ランナーの情報
      job
      ジョブの情報
      steps
      ステップの情報
      secrets
      シークレットの情報
      env
      環境変数の情報
      strategy
      マトリックスビルドの情報
      matrix
      マトリックスビルドの情報
      needs
      依存関係の情報
  1. if: 条件分岐
      • jobs.job_id.if : 条件一致時、ジョブを実行
      • jobs.job_id.steps.if : 条件一致時、ステップを実行
      • if: ${{ condition }} if 時は ${{ }} 省略は可能です。
      • リテラル
        • 種類
          説明
          boolean
          true か false
          number
          数値
          string
          文字列
          null
          null
      • 演算子
        • 演算子
          説明
          ==
          等しい
          !=
          等しくない
          >
          より大きい
          >=
          以上
          <
          より小さい
          <=
          以下
          &&
          AND
          ||
          OR
          !
          NOT
      • 関数
        • 関数
          説明
          contains
          文字列が含まれているか
          startsWith
          文字列が先頭にあるか
          endsWith
          文字列が末尾にあるか
          fromJson
          JSON文字列をオブジェクトに変換
          toJson
          オブジェクトをJSON文字列に変換
          hashFiles
          ファイルのハッシュ値を取得
          format
          文字列をフォーマット
          join
          配列を結合
      • ジョブのステータスを参照
        • ジョブのステータス
          説明
          success
          成功
          failure
          失敗
          cancelled
          キャンセル
      name: "CI" on: push: branches: - main jobs: ut-test: runs-on: ubuntu-latest if: github.event_name == 'push' && github.ref == 'refs/heads/main' steps: - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: Install dependencies #依存関係をインストール run: npm install - name: Build run: | #複数行のシェルスクリプトを実行 npm run build npm run test deploy: runs-on: ubuntu-latest steps: if: github.event_name == 'push' && github.ref == 'refs/heads/main' - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: Deploy run: npm run deploy
  1. ジョブのコンテナ内の実行
      • jobs.job_id.container : コンテナを指定,コンテナ指定時、全てのステップはコンテナ内で実行
      • ホストのホームディレクトリとワークスピースのディレクトリをマウント
      name: "CI" on: push: branches: - main jobs: ut-test: runs-on: ubuntu-latest container: image: node:14 env: NOED_ENV: test ports: - 3000 options: --cpus 1 --memory 1g -v /tmp:/tmp steps: - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: Install dependencies #依存関係をインストール run: npm install - name: Build run: | #複数行のシェルスクリプトを実行 npm run build npm run test
  1. ジョブのサービスの実行
      • jobs.job_id.services : サービスコンテナ起動できます(例:MySQL、Postgres、MongoDB、Redis、etc)
      • 複数サービス定義可能
      • サービス公開したポートを利用可能 (${{ job.services.<service-name>.ports.<port> }})
      name: "CI" on: push: branches: - main jobs: ut-test: runs-on: ubuntu-latest services: mysql: image: mysql:5.7 env: MYSQL_ROOT_PASSWORD: password ports: - 3306 options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 redis: image: redis ports: - 6379 options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3 steps: - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: Install dependencies #依存関係をインストール run: npm install - name: Build run: | #複数行のシェルスクリプトを実行 npm run build npm run test
  1. キャッシュ
      • jobs.job_id.steps.uses.cache : キャッシュを指定
      • キャッシュが保存されるのは、ジョブ成功時のみで、ジョブが失敗した場合、キャッシュは保存されない
      • 異なるビルド間でダウンロードしたパッケージを使い回して、高速化することができます。
      • 制限事項
        • キャッシュは最大5GBまで
        • キャッシュは最大7日間保存
        • キャッシュは最大1000ファイルまで
      • path: キャッシュするディレクトリを指定
      • key: キャッシュのキーを指定
      • restore-keys: キャッシュを復元するキーを指定
      • key マッチ順番:
        • キャッシュキーが指定されている場合、キャッシュキーを使用
        • キャッシュキーが指定されていない場合、restore-keysを使用
        • キャッシュキーとrestore-keysが指定されていない場合、デフォルトキーを使用
      name: "CI" on: push: branches: - main jobs: ut-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: Get NPM cache directory id: npm-cache run: echo "::set-output name=dir::$(npm config get cache)" - name: Cache node modules uses: actions/cache@v2 with: path: ${{ steps.npm-cache.outputs.dir }} key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node- - name: Install dependencies #依存関係をインストール run: npm install - name: Build run: | #複数行のシェルスクリプトを実行 npm run build npm run test
  1. アーティファクト
      • jobs.job_id.steps.uses.actions/upload-artifact : アーティファクトをアップロード
      • 生成したファイルや情報を保存して利用したい場合(例:ログやテス地結果、ビルドファイル)
      • name: アーティファクト名を指定
      • path: アーティファクトのパスを指定
      name: "CI" on: push: branches: - main jobs: ut-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 #リポジトリをチェックアウトする with: ref: main #ブランチを指定 - name: Install dependencies #依存関係をインストール run: npm install - name: Build run: | #複数行のシェルスクリプトを実行 npm run build npm run test - name: Archive production artifacts uses: actions/upload-artifact@v2 with: name: build-artifact path: dist
  1. ログにより、コマンドを実行
      • echoで特定のフォーマットの文字列を出力することで、下記のようなコマンドを実行できます
      • echo "::[command] [arguments]::"
      • set-env: 環境変数を設定
      • set-output: 出力を設定
      • add-path: PATHを追加
      • debug: デバッグメッセージを出力
      • warning: 警告メッセージを出力
      • error: エラーメッセージを出力
      • group: グループ化
      • command: コマンドを実行
      • mask: マスク
      • stop-commands: コマンドの実行を停止
      • 以下の例は、環境変数を設定(環境変数は次のステップから利用可能)
      - name: Set the output run: echo "::set-env name=ACTIONR_ID::123"
      • 以下の例は、出力を設定(出力は次のステップから利用可能)
      - name: Set the output run: echo "::set-output name=ACTIONR_ID::123"
      • 以下の例は、PATHを追加(PATHは次のステップから利用可能)
      - name: Set the output run: echo "::add-path::/path/to/add"
      • 以下の例は、デバッグメッセージを出力
      - name: Set the output run: echo "::debug::This is a debug message"
      • 以下の例は、警告メッセージを出力
      - name: Set the output run: echo "::warning::This is a warning message"
      • 以下の例は、エラーメッセージを出力
      - name: Set the output run: echo "::error::This is an error message"
      • 以下の例は、グループ化
      - name: Set the output run: echo "::group::This is a group message"
      • 以下の例は、コマンドを実行
      - name: Set the output run: echo "::command::echo Hello, world!"
      • 以下の例は、マスク
      - name: Set the output run: echo "::mask::secret"
      • add-mask: マスクを追加
      - name: Set the output run: echo "::add-mask::secret"
      • 以下の例は、コマンドの実行を停止
      - name: Set the output run: echo "::stop-commands::"
記事に関する疑問があればお気軽にご連絡ください。