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 各設定項目
- name: actionの名前
- 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 | リリースが作成された時 |
- jobs: 実行するジョブ
- jobs.job_id.job_name sample: 以下の場合、job_idはbuild, ジョブの名前はBuild
jobs: #jobs build: #ジョブ名job_id name: Build #ジョブの名前
- 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 |
- steps: ジョブの手順
- steps.name: ステップの名前
- sample: 以下の場合、run: echo "Hello, World!" を実行
ジョブ実行の手順を記述する、複数のステップを記述することができる。 複数のstepはそれぞれ異なるプロセスで実行される。ステップ内部で環境変数変更しても、他のステップには影響を与えない。後のstepに環境変数を反映したい場合、set-envを利用する。
steps: - name: Hello world run: echo "Hello, World!"
- uses: 使うアクション
- バージョン指定
- ブランチ指定
- コミットハッシュ指定
- リポジトリ指定
- サブディレクトリのアクションを使う
- ローカルファイルのアクションを使う
- dockerイメージのアクションを使う
- publicなDockerイメージのアクションを使う
- プライベートなDockerイメージのアクションを使う
使うアクションを指定する @以降は指定必要です。タグだけでなく、ブランチやコミットハッシュも指定できる。
- 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
- uses: docker://alpine:3.12
- uses: docker://ghcr.io/owner/repo:tag
- 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: ラベルを追加する
- with: アクションに渡す引数
- jobs.job_id.steps.with
- アクションに渡す引数を指定する
- キーと値のペアで指定する
- キーと値はスペースで区切る
- jobs.job_id.steps.with.entorypoint とjobs.job_id.steps.with.args
- エントリーポイントを指定する
sample: 以下の場合、actions/checkout@v2に引数を渡す
- uses: actions/checkout@v2 with: ref: main #ブランチを指定 - uses: setup-node@v2 with: node-version: '14' #Node.jsのバージョンを指定
dockerイメージの場合、エントリーポイントと引数を指定する
sample: 以下の場合、actions/checkout@v2にエントリーポイントを指定
- uses: docker://alpine:3.12 with: entrypoint: /bin/sh args: -c echo "Hello, World!"
- 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
- 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 #ワーキングディレクトリを指定
- shell: シェルを指定
- jobs.job_id.steps.shell
- 指定しない場合、デフォルトのシェルが使われる
- 指定可能なシェル
- sample: 以下の場合、シェルを指定
シェル | 説明 |
bash | Bash |
pwsh | PowerShell |
python | Python |
sh | sh |
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 #シェルを指定
- timeout-minutes: タイムアウト時間
- jobs.job_id.steps.timeout-minutes : stepsのタイムアウト時間
- タイムアウト時間を指定する
- タイムアウト時間を超えると、ジョブがキャンセルされる
- sample: 以下の場合、タイムアウト時間を指定
- jobs.job_id.timeout-minutes : ジョブのタイムアウト時間
- タイムアウト時間を指定する
- タイムアウト時間を超えると、ジョブがキャンセルされる
- 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 #タイムアウト時間を指定
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
- continue-on-error: エラーが発生しても処理を続行するか
- jobs.job_id.steps.continue-on-error
- エラーが発生しても処理を続行するか指定する
- エラーが発生しても処理を続行する場合、trueを指定する
- sample: 以下の場合、エラーが発生しても処理を続行
- jobs.job_id.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 #エラーが発生しても処理を続行
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
- default: デフォルト値
ワークフロー全体やジョブ内のステップでデフォルト適用する値を指定する ワークフロー全体していした場合、ワークフロー全ての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!"
- 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 }}
- 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 }}
- イベントフィルタ
- ブランチとタグを指定して、イベントをフィルタリングする
- 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
- 特定のファイルが変更された時にのみワークフローを実行する
- 特定の種類のアクティビティのみをトリガーする
keyword | 説明 |
branches | ブランチ名 |
branches-ignore | ブランチ名を無視 |
tags | タグ名 |
tags-ignore | タグ名を無視 |
paths | パス |
paths-ignore | パスを無視 |
types | イベントのタイプ |
on: push: branches: - main tags: - v1 paths: - 'docs/**' - '!docs/README.md'
on: push: paths: - 'docs/**'
on: push: types: [created, edited]
- 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
- 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 }}
- matrix: マトリックスビルドの設定
- 複数のOSやプログラミング言語のバージョンを組み合わせで行う場合
- jobs.job_id.strategy.matrix
- sample: 複数OSとNode.jsのバージョンを組み合わせでビルド
- include: マトリックスビルドの設定
- 特定の変数の組み合わせ時だけ、新しい変数を追加する
- sample: 以下の場合、マトリックスビルドの設定を指定
- exclude: マトリックスビルドの設定
- 特定の変数の組み合わせ時、マトリクスを除外する
- sample: 以下の場合、マトリックスビルドの設定を指定
- fail-fast: マトリックスビルドの設定
- 特定の変数の組み合わせ時、エラーが発生した場合、他の組み合わせのビルドをキャンセルする
- sample: 以下の場合、マトリックスビルドの設定を指定
- max-paralle: マトリックスビルドの設定
- マトリクス同時に実行するジョブの最大数を指定する
- sample: 以下の場合、マトリックスビルドの設定を指定
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
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
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
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
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
- スケジュールで定期実行
- 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
- コンテキスト
- ワークフロー実行時の情報 コンテキスト情報
コンテキスト | 説明 |
github | GitHubの情報 |
runner | ランナーの情報 |
job | ジョブの情報 |
steps | ステップの情報 |
secrets | シークレットの情報 |
env | 環境変数の情報 |
strategy | マトリックスビルドの情報 |
matrix | マトリックスビルドの情報 |
needs | 依存関係の情報 |
- 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
- ジョブのコンテナ内の実行
- 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
- ジョブのサービスの実行
- 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
- キャッシュ
- 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
- アーティファクト
- 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
- ログにより、コマンドを実行
- echoで特定のフォーマットの文字列を出力することで、下記のようなコマンドを実行できます
- echo "::[command] [arguments]::"
- set-env: 環境変数を設定
- set-output: 出力を設定
- add-path: PATHを追加
- debug: デバッグメッセージを出力
- warning: 警告メッセージを出力
- error: エラーメッセージを出力
- group: グループ化
- command: コマンドを実行
- mask: マスク
- stop-commands: コマンドの実行を停止
- 以下の例は、環境変数を設定(
環境変数は次のステップから利用可能
) - 以下の例は、出力を設定(
出力は次のステップから利用可能
) - 以下の例は、PATHを追加(
PATHは次のステップから利用可能
) - 以下の例は、デバッグメッセージを出力
- 以下の例は、警告メッセージを出力
- 以下の例は、エラーメッセージを出力
- 以下の例は、グループ化
- 以下の例は、コマンドを実行
- 以下の例は、マスク
- add-mask: マスクを追加
- 以下の例は、コマンドの実行を停止
- name: Set the output run: echo "::set-env name=ACTIONR_ID::123"
- name: Set the output run: echo "::set-output name=ACTIONR_ID::123"
- 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"
- name: Set the output run: echo "::add-mask::secret"
- name: Set the output run: echo "::stop-commands::"