🙆

【インフラ_16日目】CI/CD_1冊目【完結】

2024/08/17に公開

こんにちは投資ロウトです。

背景

・CI/ CDをシステムに導入していかなければならない背景があります。

プルリクエストアクション

# 実在するボットアカウントで、GitHub Actionsでよく利用されるとのこと
github-actions[bot]
# プルリクエスト作成コマンド
gh pr create --head "${BRANCH_NAME} --title "${TEXT}" --body "${TEXT}"

またこれらのアクションもテストコードを書くことは可能とのことで、以下の順番に実施をしていけばいいとのこと。
・テストの準備
・テスト対象のコードを実施
・実施した結果が問題ないか確認
・テスト後の対応

またテストで作成したプルリクエストは最後のクローズしないと残り続けてしまうために、必ず削除することが大事とのことがありました。

メンテナンスしやすいアクション

・いきなりアクションを実装せずに、最初はワークフローへ直接記載すること
→アクションの実装が早すぎると、過度な抽象化が発生してしまうとのことでした。

・共通化の検討
→利用方法が異なるなら、共通化はしてはいけないとのこと。

Reusable Workflows

Reusable Workflows・・・ワークフロー全体を丸ごとカプセル化すること。

# Reusable Workflowsを起動するには、以下のonイベントを用意する必要がある
on:
    workflow_call:

# Reusable Workflowsの出力値が必要な時は
outputs:
    出力値名:
        value: ${{ jobs.comment.outputs.出力する値 }}
        description: コメント

外部で定義したReusable Workflowsを呼び出す

# 呼び出すファイル
...
jobs:
    call:
        use: ./.github/workflows/呼び出したいファイル名.yml

# Resable Workflowsから値を取得
${{ needs.call.outputs.message }}

その他型変換

# 物によってはstringではなく、number型に変換が求められるケースがあるとのこと。
# 以下でbooleanやnumber型に変換されるとのこと
${{ fromJSON(string型の値) }}

例外

# 以下のように「continue-on-error: true」を記載すると、例外が起きても、後続を実施してくれるとのこと。
    steps:
        - run: 例外が起きる処理
          continue-on-error: true
        - run: 例外を握りつぶして後続を実施してくれる

ただ上記のようにエラーを握りつぶすと、ログを見ないと、エラーが起きたことに気づけないというデメリットがあるそうです。

セキュリティー

GitHub Actionsは様々なシステムにアクセスできるため、強力な権限が集中してしまうとのことです。

【セキュリティで意識すること】
・適切な人に適切なデータへのアクセス等を許可すること
・不正に更新や削除などは行わせないように権限管理を行う
・他者から不正に利用させられず、問題なく使える状態を保つ

【守らないといけないもの】
・ソースコード
・秘匿情報(クレデンシャル)
・DockerImageや実行ファイル

スクリプトインジェクション

スクリプトインジェクション・・・GitHub等のCI等にスクリプトを入れ込んで、重要情報を盗み取ろうとする行為

# これらを実行すると、ワークフローで実行可能な文字を入れ込み、環境変数を出力されたりなどの危険性を出してしまう恐れがあるとのこと。
- run: echo "${{ github.event.pull_request.title }}"

その危険性があるのが以下などのコマンドとのことでした。
・Issueのタイトル
・プルリクエストの本文
・ブランチ名

またこういった事を起こさないように、ShellCheckという静的解析を行えるツールがあるとのことでした。

- run: shellcheck script.sh

その他用語等

・シフトレフト・・・セキュリティーなど後回しにせずに早めに取り組むこと
→後でやるなどはできないので、最初にやっておく必要があるとのことでした。

・シークレットスキャン・・・クレデンシャル情報が含まれていないかのチェックツール
→Secretlintなどがおすすめとのこと。

# 以下のようにDocker上で動作させることも可能とのこと
docker run --rm -v "$(pwd):$(pwd)" -w "$(pwd)"  \
secretlint/secretlint/secretlint secretlint '**/*'
# ※GitHub Actions上で動かすことも可能

またソースをプッシュする前に、GitHubへコミットする段階で静的解析を入れることも効果的とのこと。

# コンテナイメージに脆弱性が含んでいないかどうかで、「Trivy」を使って検証も可能とのこと。
steps:
    - uses: aquasecurity/trivy-action@0.19.0
      with:
        image-ref: nginx:1.11.0
        severity: CRITICAL, HIGH
        exit-code:1

と以上でCI/CDであるGitHub Actionsの学習を終えたいと思います。どうしても緊急でCI/CDを理解する必要がありましたが、学習を通してCI/CDを導入する上で何をしなければいけないのか、またどうしていけばそれを実現できるかも理解できました。これからも焦らずコツコツ頑張っていきたいと思います。ご精読ありがとうございました。

Discussion