Note
個々のツールの GitHub Actions の実行方法はツールごとのドキュメント参照。
- リポジトリのActionsのページからCreate status badgeをクリックしてREADME.mdに貼り付ける。
Actionsに関係なくLICENSEファイルを配置しておけばよい
- フルコミットハッシュをつかうことでactionsで使うライブラリのバージョンを固定できる。
- 他の指定方法では想定外のCIが走る恐れがある。
- pinactを使うことで自動で数値のバージョンをフルコミットハッシュに変換できる。
# 良い例
uses: actions/setup-python@コミットハッシュ
# 悪い例
uses: actions/setup-python@master # ブランチの最新が走る
uses: actions/setup-python@v1 # 1系の最新が走る
uses: actions/setup-python@v1.1.1 # tagの切り直しで想定外のCIが走る恐れ
GUIの場合は公式ドキュメント参照。
- Environment Secret: Environmentを作成して値を区別して使用できる。Environmentはリポジトリに対して複数作成できる。
- Repository Secret: リポジトリで共通の値を使う。
GitHub CLIでリポジトリへsecretを設定する方法 GitHub ActionsでEnvironment Secretを扱うサンプル
- 個人的には.envから一括投入するのが使いやすそう。今回の例では--envを指定しているが指定しないとRepository Secretになる。
cat .env
API_TOKEN=xxxxxxxx
gh secret set --env environment名 --env-file .env
gh secret list --env development
- GitHub actionsのyamlから参照する。
jobs:
runs-on: ubuntu-latest
environment:
name: development # actionsのsecretの参照先を指定
steps:
-run: |
echo ${{ secrets.API_TOKEN }}
- 基本はsecretと同じでenvironment variablesとrepository variablesがある。
- secretと異なり,値を確認することができる。
environment=development
gh variable set --env $environment --env-file .env.$environment
gh variable list --env $environment
- デフォルト設定だと,どのファイルが修正されてもCIが走ってしまうので必要なファイルが更新された時だけCIが起動できるようにする。
name: run-jest
on:
push:
paths:
- "src/**.tsx"
- "src/**.ts"
- "public/**.html"
- GitHubのリポジトリの設定から編集可能。
- Branchのforce-pushを禁止する等ブランチ単位でルールを設定できる。
Require status checks to pass before merging
を有効にし,必要なjobを選択する。- yamlでいうところのjobs配下の要素が指定できる。
jobs:
frontend-jest: # ここが指定可能。
- TODO: Actionsが通っていてもチェックがRequiredから変更されないので謎。
Advanced Security must be enabled for this repository to use code scanning 403: GitHub Advanced Security is not enabled
-
publicリポジトリ以外で使用していると出るエラー。
-
公式ドキュメントを見ると
- code scanningが有効になっている
- GitHub Advanced Securityを実行しようとした場合 に出るエラーでcodd scanningが使えるのは無料ではpublicリポジトリのみ。
# reportsを生成(Actionsから確認できる)
- name: save report as pipeline artifact
uses: actions/upload-artifact@v4
with:
name: report.sarif
path: report.sarif
# scanの結果を解析。GithubのSecurity --> Code Scanning等でアラートが見られる。
- name: publish code scanning alerts
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: report.sarif
category: semgrep
jobs:
frontend-jest: # job id(typed by user)
runs-on: ubuntu-latest
permissions:
contents: read
# デフォルトのワーキングディレクトリのため設定不要だが,明示的に指定。
defaults:
run:
working-directory: /home/runner/work/devsecops-demo-aws-ecs/devsecops-demo-aws-ecs
strategy:
matrix:
node_version: [20, 22]
steps:
# checkout repository to runner
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: set up node
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version: ${{ matrix.node_version }}
成功すると以下のような感じになる。