🦔

GitHubのissueをCopilotに割り当ててDockerイメージのビルド時間を短縮してもらった話

に公開

概要

Dockerfileの更新時、GitHub ActionsでDockerイメージをビルドし、SyftでSBOMを作成、Grypeで脆弱性をスキャンしています。
しかし、Dockerイメージのビルドに時間がかかるという課題がありました。

GitHub Copilot Proを契約して、GitHubのissueをCopilotに割り当てて対応してもらえるようになったので、Dockerイメージのビルド時間短縮の対応をしてもらいました。

issueの内容

問題点と対策を記載したissueを作成し、Copilotにアサインしました。

作成したissue

Copilotによる修正内容

従来はdockerコマンドでビルドしていましたが、Copilotはdocker/build-push-actionを使うように修正してくれました。

-        run: |
-          docker build -f .devcontainer/Dockerfile -t dev-container:test .
+        uses: >-
+          docker/build-push-action@48aba3b46d1b1fec4febb7c167d2bc4827b15259
+        # v6.13.0
+        with:
+          context: .
+          file: .devcontainer/Dockerfile
+          tags: dev-container:test
+          load: true
+          cache-from: type=gha
+          cache-to: type=gha,mode=max

Copilotの修正内容にあった問題点

docker/build-push-actionのコミットハッシュが存在しない

ワークフロー内のアクションはバージョン固定のためコミットハッシュを指定しています。
Copilotは他の部分と整合性がとれるように追加したアクションのバージョンをコミットハッシュにしてくれましたが、存在しないコミットハッシュでした。

docker/build-push-actionのバージョンが古い

Copilotはv6.13.0を指定していましたが、実際にはv6.18.0が最新でした。
issue内で「最新安定版を使う」など、より具体的な指示が必要かもしれません。

最終的な修正内容

最終的には、正しいコミットハッシュと最新バージョンを指定しました。

-        run: |
-          docker build -f .devcontainer/Dockerfile -t dev-container:test .
+        uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83
+        # v6.18.0
+        with:
+          context: .
+          file: .devcontainer/Dockerfile
+          tags: dev-container:test
+          load: true
+          cache-from: type=gha
+          cache-to: type=gha,mode=max

Dockerイメージビルド時間の短縮結果

キャッシュなしの状態では2分6秒かかっていたDockerイメージのビルドが、キャッシュありでは25秒まで短縮されました。

  • 修正後の初回実行(キャッシュなし)
    キャッシュなしでの実行時間

  • キャッシュあり
    キャッシュありでの実行時間

気になった点・今後の課題

  • issueがアサインされたCopilotにMCPサーバを参照させる機能はない?
  • Copilotが作るプルリクの宛先はデフォルトブランチに固定?
    • issueでプルリク先のブランチを指定すれば、その通りに動くのかも

Discussion