Closed9

GitHub CI/CD実践ガイド まとめ

こたこた

中間環境変数

steps:
    - run: echo "${ACTOR}"

これでもいいが、特殊文字が含まれると意図しない動作になり得るためアンチパターン。
一旦環境変数に格納して使うのが良い。

env:
    ACTOR: ${{ github.actor }}
steps:
    - run: echo "${ACTOR}"
こたこた

Secretsの取り扱い

GitHub ActionsでのSecretsはログでもマスクされるが、回避する方法もある。
ので、安易にログにSecretsを吐かない。

env:
    PASSWORD: ${{ secrets.PASSWORD }}
steps:
    - run: echo "${PASSWORD}" # これはマスクされる
    - run: echo "${PASSWORD:0:1} ${PASSWORD#?}" # これはマスクされない
こたこた

PR時にコメントするActions

name: Comment
on: pull_request
jobs:
    job:
        name: comment
        runs-on: ubuntu-latest
        permissions:
            pull-requests: write
            contents: read
        steps:
            - users: actions/checkout@v4
            - run: gh pr comment "${GITHUB_HEAD_REF}" --body "Hello, ${GITHUB_ACTOR}"
              env:
                GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
こたこた

対象言語のファイルが更新されたときのみテストを実行

Goでの例

name: Test
on:
    pull_request:
        paths: ['./**/*.go']
こたこた

setup actionsのバージョン指定をバージョンファイルで

Goでの例

- uses: actions/setup-go@v5
  with:
    go-version-file: go.mod
こたこた

GitHub ActionsのLint

name: Actions Lint
on:
    pull_request:
        paths: ['.github/workflows/*.yaml']
defaults:
    run:
        shell: bash
concurrency:
    group: ${{ github.workflow}}-${{ github.ref }}
    cancel-in-progess: true
jobs:
    lint:
        runs-on: ubuuntu-latest
        timeout-minutes: 5
        steps:
            - uses: actions/checkout@v4
            - run: |
                docker run --rm -v #$(pwd):$(pwd)" -w "$(pwd)" rhysd/actionlint:latest
こたこた

シェルの指定

GitHub Actionsでは基本的にシェルを指定しなくても bash が使われるが、明示的に指定したときと動作が異なる。

  • 省略時: bash -e {0}
  • 記述時: bash --noprofile --norc -eo pipefail {0}

特に重要なのが pipefail で、これがないとパイプエラーが拾えない。
ので、明示的に記述すべき。

また、前ステップに書かなくても、デフォルトシェルとして定義してやれば良い。

defaults:
    run:
        shell: bash
このスクラップは1ヶ月前にクローズされました