Open6

Github CI/CD

philosophynotephilosophynote

主導実行はworkflow_dispatch
ブラウザorCLIからCLIから手動実行可能

schedule イベントで定期実行 
タイムゾーンはUTC

philosophynotephilosophynote

環境変数
Variables(複数のワークフローで同じ値を使用する)
Secrets:機密情報 自動マスク、登録後に値が全く確認できなくなる

シェル shell

bash --noprofile --norc -eo pipefail {0}

Concurrency
多重起動を抑制する
cancel-in-progress:実行中ワークフローのキャンセルを有効化

CIの実行時間は最低10分以内

philosophynotephilosophynote

ステップデバッグログ
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が管理するストレージへ、一時的に保存可能
ビルドしたバイナリファイルやメトリクスデータを保存できる

アクション内で生成されたファイルをアップロードすること
画面からダウンロードすることができる

philosophynotephilosophynote

クリーンリポジトリ

ブランチ保護

ブランチプロテクションルール

  • マージ前のプルリクエスト作成を必須
  • 他者の承認を必須
  • 承認後に新しいコミットがプッシュされたら承認を取り消す
  • マージ前のステータスチェックを必須にする
  • 管理者のバイパスを許可しない
  • 強制プッシュとブランチ削除の禁止

オーナーシップの維持

コードオーナー:ファイル・ディレクトリのオーナーを明示的に指定する
CODEOWNERSファイルへ記述する
.githubディレクトリがおすすめ

クレデンシャルの混入防止

シークレットスキャン
プッシュプロテクション

ドキュメンテーション

philosophynotephilosophynote

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 を選択