μログ

ゆるく日常と技術について書きたい

GitHub ActionsでDockerイメージをビルドしてDockleを実行するようにした

 GitHub ActionsでDockerイメージをビルドして、コンテナイメージのセキュリティ診断ツールDockleを実行するようにしました。
 GitHub Actionsの設定ファイルは下記になります(Docker BuildとDockleの実行部分のみ抜粋)。

env:
  TEST_TAG: textlint-articles:1.0.0

jobs:
  dockle:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - uses: docker/setup-buildx-action@v2

      - name: Cache Docker layers
        uses: actions/cache@v3
        with:
          path: /tmp/.buildx-cache
          key: ${{ runner.os }}-buildx-${{ github.sha }}
          restore-keys: |
            ${{ runner.os }}-buildx-
            
      - name: Only docker build
        uses: docker/build-push-action@v3
        with:
          context: .
          load: true
          tags: ${{ env.TEST_TAG }}
          cache-from: type=local,src=/tmp/.buildx-cache
          cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max

      - name: Move cache
        run: |
          rm -rf /tmp/.buildx-cache
          mv /tmp/.buildx-cache-new /tmp/.buildx-cache

      - uses: hands-lab/dockle-action@v1
        with:
          image: ${{ env.TEST_TAG }}
          exit-code: '1'
          exit-level: WARN

 ちなみに設定ファイル全体は下記の通りで、Dockerfile自体のLintツールであるhadolintも実行するようにしています(記事管理用のリポジトリなのでtextlintも)。

github.com

 Dockleを実行するうえでの工夫点は2つあります。
 1つ目は、docker/build-push-action@v3を使ってイメージをビルドしたあとにloadオプションでDockerイメージとして出力するようにしている点です。

https://github.com/docker/build-push-action/blob/master/docs/advanced/export-docker.md

 2つ目は、hands-lab/dockle-action@v1exit-codeオプションに1を設定している点です。これにより、DockleのチェックでWARNレベル以上の項目に引っかかればCIが失敗します。

参考