Reference: https://booth.pm/ja/items/1865906
-
npm-scriptsには自前で設定をする
npm test
:mocha
npm run lint
:eslint .
-
CIで利用するnodeコマンドのアクションは
v2
以降を利用する(基本的にlatestで良い)
- キャッシュの保存は該当ジョブが成功したときのみ保存される
- キャッシュの無効化はできないので、新しいキーでキャッシュを作成しなおすことになる
- プレフィックスでバージョン情報を付与すると管理がしやすい
- キャッシュ情報の閲覧が可能なため秘密情報はキャッシュしない
- TTLは7日間、サイズ上限は5GBで、超過時は古いものから削除される
ワークフローによってもキャッシュ探索は異なるが、基本は keyで完全一致キャッシュを探し、なければ restore-keysで前方一致検索となる
- push: 現在のブランチ => デフォルトブランチ
- pull_request: 現在のブランチ => ベースブランチ => デフォルトブランチ
ref: https://github.com/actions/cache/blob/master/examples.md
- パラメータ
- path: キャッシュを保存・復元するパス情報
- key: 複合キー
- restore-keys: keyに完全一致するキャッシュが存在しなかった時に使われるキー一覧
- アウトプット
- cache-hit: keyに完全一致するキャッシュが存在したかどうか
- restore-keysでマッチングしてもfalse
- cache-hit: keyに完全一致するキャッシュが存在したかどうか
ビルド後のバイナリやアーカイブ・カバレッジ情報等を保存したい時に利用する機能 90日後にリセットされる
- パラメータ
- name: アーティファクト名
- path: アーティファクトとしてアップロードするファイル(ディレクトリ)
アーティファクトをダウンロードする ワークフローで複数ジョブ間でアーティファクト経由でファイルの受け渡しが可能
- パラメータ
- name: アーティファクト名(省略時は全てのアーティファクトがダウンロード対象)
- path: ダウンロードして展開先のパス(省略時はworkspace下に展開)
キャッシュは、ジョブやワークフローの複数の実行の間でファイルを再利用することが目的 基本的には、依存パッケージのような、たまにしか変更されないようなファイルに対して使用する
アーティファクトは、ワークフローの一回の実行内でファイルを複数のジョブ間で受け渡したり、 ワークフロー完了後に利用するファイルを保存するために使用する
次のアクティビティ以外だと typesを追記し、反応するアクティビティを追加する
# e.g.
on:
pull_request:
types: [labeled, unlabeled]
- opened: PR作成時
- synchronize: 既存PRがpush更新時
- reopened: リオープン時
- push時: pushされたコミットのSHA
- issue_comment: デフォルトブランチの最新コミット ...
外部からGithubActions(ワークフロー)を実行させる時のイベント
ワークフロー内部で文字列を出力することでコマンドを実行出来る
set-env
: 環境変数の設定set-output
: アウトプットの設定add-path
: PATH の追加debug|warning|error
: メッセージの出力- デバッグメッセージは
ACTIONS_STEP_DEBUG
をtrueに設定しないと表示されない
- デバッグメッセージは
add-mask
: ログのマスク (※秘密情報で扱うべき)stop-commands
: コマンド実行の停止・再開
$ echo "::<COMMAND> <PARAM1>=<VALUE1>,<PARAM2>=<VALUE2>::<COMMAND VALUE>"
# TZ環境変数に Asia/Tokyo の値を設定
$ echo "::set-env name=TZ::Asia/Tokyo"
# steps.<step_id>.outputs.result に true を設定
$ echo "::set-output name=result::true"
# PATHの先頭に追加される、add-pathを実行したstepでは反映されていない
$ echo "::add-path:${{ github.workspace }}"
# メッセージ出力
$ echo "::debug::Debug Message"
$ echo "::warning::Warning Message"
# プルリクエストのファイル差分上に警告メッセージを表示
$ echo "::warning file=README.md,line=1,col=1::Warning Message"
# 特定の文字列(password)をマスクしてログに出ないようにする
$ echo "::add-mask::password"
# このコマンド実行後はコマンドが処理されなくなる
$ echo "::stop-commands:stop"
# 処理されなくなっていたものを再度有効化
$ echo "::stop::"
飛ばす。 自分で用意したVM上等でワークフローを実行させる
ref: https://developer.github.com/v3/actions/
- アーティファクトの情報取得、ダウンロード、削除
- 秘密情報の設定、削除
- セルフホストランナーのステータスの取得
- ワークフローの実行情報の取得、再実行、キャンセル
JavaScript/Dockerと種別がある ※ JavaScriptのほうが直接実行できる関係で速いが、Dockerはコンテナとして同一の環境を構築可能
public: 別repoとして作成する
private: .github/actions/action-a
などのようにリポジトリ内でディレクトリを掘って管理することを推奨
外部公開されているpublicなアクションは uses:
を使って定義する
actions/setup-node@v1.4.0
バージョンは、commit SHA/タグ/ブランチから設定可能
- slackに通知:
rtCamp/action-slack-notify
- ssh接続:
mxschmitt/action-tmate
- DockerイメージをGithub Packages公開:
docker/build-push-action
- reviewdogでLint結果をWEB内に表示:
reviewdog/action-eslint
- TerraformでAWSにデプロイ:
hashicorp/terraform-github-actions