Github CI/CD

主導実行はworkflow_dispatch
ブラウザorCLIからCLIから手動実行可能
schedule イベントで定期実行
タイムゾーンはUTC

環境変数
Variables(複数のワークフローで同じ値を使用する)
Secrets:機密情報 自動マスク、登録後に値が全く確認できなくなる
シェル shell
bash --noprofile --norc -eo pipefail {0}
Concurrency
多重起動を抑制する
cancel-in-progress:実行中ワークフローのキャンセルを有効化
CIの実行時間は最低10分以内

ステップデバッグログ
ACTIONS_STEP_DEBUGキーをtrueにすれば有効化できる
ランナー診断ログ
ACTIONS_RUNNER_DEBUGキーをtrueにすれば有効化できる
キャッシュ
actions/cache
アクションによりキャッシュの保存と復元が可能となる
キャッシュキーはキャッシュの生成と保存に使用する識別子
キャッシュ対象のパス:ディレクトリorファイルパスを指定する
リストアキー
・プラットフォームごとに異なるキャッシュを利用する
key: example-${{ runner.os }} - ${{ runner.arch }}
・依存関係を更新したときだけキャッシュも変更する
key: node-${{ runner.os }} - ${{ hashFiles('**/pachage-lock.json') }}
restore-keys: |
node-${{ runner.os }}-
キャッシュの削除
7日以上アクセスない場合は自動削除
手動削除可能
アーティファクト
Githubが管理するストレージへ、一時的に保存可能
ビルドしたバイナリファイルやメトリクスデータを保存できる
アクション内で生成されたファイルをアップロードすること
画面からダウンロードすることができる

クリーンリポジトリ
ブランチ保護
ブランチプロテクションルール
- マージ前のプルリクエスト作成を必須
- 他者の承認を必須
- 承認後に新しいコミットがプッシュされたら承認を取り消す
- マージ前のステータスチェックを必須にする
- 管理者のバイパスを許可しない
- 強制プッシュとブランチ削除の禁止
オーナーシップの維持
コードオーナー:ファイル・ディレクトリのオーナーを明示的に指定する
CODEOWNERSファイルへ記述する
.github
ディレクトリがおすすめ
クレデンシャルの混入防止
シークレットスキャン
プッシュプロテクション
ドキュメンテーション

Reusable Workflows
Reusable Workflowsの定義
種類 | 入出力ID | 概要 |
---|---|---|
inputs | pr-number | プルリクエスト番号 |
secrets | token | Githubトークン |
outputs | message | メッセージ |
Reusable Workflowsを起動するイベント
workflow_callイベントが定義されると、ワークフローがReusableWorkflowsとして自動的に認識される
Reusable Workflowsの呼び出し
call.yml→reusable-workflows.yml
Reusable Workflowsは、usesキーを指定することで実行する
uses: ./.github/workflows/reusable-workflows.yml
- リモートReusable Workflows:独立したリポジトリへ実装
- ローカルReusable Workflows:自リポジトリの別ファイルへ実装
別リポジトリへ独立させれば、Reusable Workflowは複数リポジトリで共有できる
Reusable Workflowsでは呼び出し側のワークフローのSecretsは直接参照できない
入力パラメータ経由で渡す
プライベートリポジトリで運用する場合は、アクセス許可設定が必要
プライベートアクションとプライベート Reusable Workflows
アクションやReusable Workflowの利用を閉じたい
前者をプライベートアクション、後者をプライベートReusable Workflowsと呼ぶ
Github Actions設定ページから設定可能
Accesible from repositories owned by user を選択