先に結論だけ
GitHub Actionsでubuntu-18.04イメージの非推奨化と削除プロセスが始まりました。
スターターテンプレートから作成したGitHub Actionsのワークフローは、実行環境の自動更新によって失敗する可能性があります。Ubuntuのリリースサイクルを超えて運用し続けるワークフローは、実行環境をバージョン固定しdependabotでactionを更新すべきです。
はじめに
この記事は、GitHub Actionsの
- 実行環境の自動更新に関する情報
- 自動更新によって発生する問題
- 対処方法
について記録、共有するためのものです。
想定する環境
この記事は、2023/01/14時点のGitHub Actionsとubuntu-latest
を前提としています。
想定する読者
- すでにGitHub Actionsを使用している
- GitHub Actionsを使い始めたばかりだ
- 長期的に運用したい
すでにGitHub Actionsを使用しているユーザーを想定しているため、GitHub Actionsの紹介や、ツールのインストールについては解説しません。ご了承ください。
発生した問題
three.jsに依存したパッケージを開発しており、そのワークフローが失敗しました。エラーログを参照すると、WebGLの単体テストに必要なパッケージのインストールに失敗していました。
エラーログの全文
Run sudo apt-get install libxi-dev xvfb libgl1-mesa-dev
Reading package lists...
Building dependency tree...
Reading state information...
xvfb is already the newest version (2:21.1.3-2ubuntu2.5).
The following additional packages will be installed:
libegl-dev libegl-mesa0 libegl1 libgbm-dev libgbm1 libgl-dev libgl1-mesa-dri
libglapi-mesa libgles-dev libgles1 libgles2 libglvnd-core-dev libglvnd-dev
libglx-dev libglx-mesa0 libopengl-dev libopengl0 libxfixes-dev
Recommended packages:
libgl1-amber-dri
The following NEW packages will be installed:
libegl-dev libegl-mesa0 libegl1 libgl-dev libgl1-mesa-dev libgles-dev
libgles1 libgles2 libglvnd-core-dev libglvnd-dev libglx-dev libopengl-dev
libopengl0 libxfixes-dev libxi-dev
The following packages will be upgraded:
libgbm-dev libgbm1 libgl1-mesa-dri libglapi-mesa libglx-mesa0
5 upgraded, 15 newly installed, 0 to remove and 33 not upgraded.
Need to get 8324 kB of archives.
After this operation, 4155 kB of additional disk space will be used.
Get:1 http://azure.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgbm-dev amd64 22.0.5-0ubuntu0.3 [9274 B]
Get:2 http://azure.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgbm1 amd64 22.0.5-0ubuntu0.3 [32.7 kB]
Get:3 http://azure.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgl1-mesa-dri amd64 22.0.5-0ubuntu0.3 [7469 kB]
Ign:4 http://azure.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libglx-mesa0 amd64 22.0.5-0ubuntu0.3
Ign:5 http://azure.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libglapi-mesa amd64 22.0.5-0ubuntu0.3
Ign:6 http://azure.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libegl-mesa0 amd64 22.0.5-0ubuntu0.3
Ign:7 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libegl1 amd64 1.4.0-1
Ign:8 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libglx-dev amd64 1.4.0-1
Ign:9 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libgl-dev amd64 1.4.0-1
Ign:10 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libegl-dev amd64 1.4.0-1
Ign:11 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libgles1 amd64 1.4.0-1
Ign:12 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libgles2 amd64 1.4.0-1
Ign:13 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libgles-dev amd64 1.4.0-1
Ign:14 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libopengl0 amd64 1.4.0-1
Ign:15 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libopengl-dev amd64 1.4.0-1
Ign:16 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libxfixes-dev amd64 1:6.0.0-1
Ign:17 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libxi-dev amd64 2:1.8-1build1
Ign:18 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libglvnd-core-dev amd64 1.4.0-1
Ign:19 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libglvnd-dev amd64 1.4.0-1
Ign:20 http://azure.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgl1-mesa-dev amd64 22.0.5-0ubuntu0.3
Ign:4 http://azure.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libglx-mesa0 amd64 22.0.5-0ubuntu0.3
Ign:5 http://azure.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libglapi-mesa amd64 22.0.5-0ubuntu0.3
Ign:6 http://azure.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libegl-mesa0 amd64 22.0.5-0ubuntu0.3
Ign:7 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libegl1 amd64 1.4.0-1
Ign:8 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libglx-dev amd64 1.4.0-1
Ign:9 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libgl-dev amd64 1.4.0-1
Ign:10 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libegl-dev amd64 1.4.0-1
Ign:11 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libgles1 amd64 1.4.0-1
Ign:12 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libgles2 amd64 1.4.0-1
Ign:13 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libgles-dev amd64 1.4.0-1
Ign:14 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libopengl0 amd64 1.4.0-1
Ign:15 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libopengl-dev amd64 1.4.0-1
Ign:16 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libxfixes-dev amd64 1:6.0.0-1
Ign:17 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libxi-dev amd64 2:1.8-1build1
Ign:18 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libglvnd-core-dev amd64 1.4.0-1
Ign:19 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libglvnd-dev amd64 1.4.0-1
Ign:20 http://azure.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgl1-mesa-dev amd64 22.0.5-0ubuntu0.3
Ign:4 http://azure.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libglx-mesa0 amd64 22.0.5-0ubuntu0.3
Ign:5 http://azure.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libglapi-mesa amd64 22.0.5-0ubuntu0.3
Ign:6 http://azure.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libegl-mesa0 amd64 22.0.5-0ubuntu0.3
Ign:7 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libegl1 amd64 1.4.0-1
Ign:8 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libglx-dev amd64 1.4.0-1
Ign:9 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libgl-dev amd64 1.4.0-1
Ign:10 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libegl-dev amd64 1.4.0-1
Ign:11 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libgles1 amd64 1.4.0-1
Ign:12 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libgles2 amd64 1.4.0-1
Ign:13 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libgles-dev amd64 1.4.0-1
Ign:14 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libopengl0 amd64 1.4.0-1
Ign:15 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libopengl-dev amd64 1.4.0-1
Ign:16 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libxfixes-dev amd64 1:6.0.0-1
Ign:17 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libxi-dev amd64 2:1.8-1build1
Ign:18 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libglvnd-core-dev amd64 1.4.0-1
Ign:19 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libglvnd-dev amd64 1.4.0-1
Ign:20 http://azure.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgl1-mesa-dev amd64 22.0.5-0ubuntu0.3
Err:4 http://azure.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libglx-mesa0 amd64 22.0.5-0ubuntu0.3
Connection failed [IP: 52.252.75.106 80]
Err:5 http://azure.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libglapi-mesa amd64 22.0.5-0ubuntu0.3
Could not connect to azure.archive.ubuntu.com:80 (52.252.75.106), connection timed out [IP: 52.252.75.106 80]
Err:6 http://azure.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libegl-mesa0 amd64 22.0.5-0ubuntu0.3
Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
Err:7 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libegl1 amd64 1.4.0-1
Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
Err:8 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libglx-dev amd64 1.4.0-1
Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
Err:9 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libgl-dev amd64 1.4.0-1
Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
Err:10 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libegl-dev amd64 1.4.0-1
Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
Err:11 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libgles1 amd64 1.4.0-1
Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
Err:12 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libgles2 amd64 1.4.0-1
Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
Err:13 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libgles-dev amd64 1.4.0-1
Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
Err:14 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libopengl0 amd64 1.4.0-1
Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
Err:15 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libopengl-dev amd64 1.4.0-1
Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
Err:16 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libxfixes-dev amd64 1:6.0.0-1
Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
Err:17 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libxi-dev amd64 2:1.8-1build1
Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
Err:18 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libglvnd-core-dev amd64 1.4.0-1
Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
Err:19 http://azure.archive.ubuntu.com/ubuntu jammy/main amd64 libglvnd-dev amd64 1.4.0-1
Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
Err:20 http://azure.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgl1-mesa-dev amd64 22.0.5-0ubuntu0.3
Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
Fetched 7511 kB in 3min 38s (34.4 kB/s)
E: Failed to fetch http://azure.archive.ubuntu.com/ubuntu/pool/main/m/mesa/libglx-mesa0_22.0.5-0ubuntu0.3_amd64.deb Connection failed [IP: 52.252.75.106 80]
E: Failed to fetch http://azure.archive.ubuntu.com/ubuntu/pool/main/m/mesa/libglapi-mesa_22.0.5-0ubuntu0.3_amd64.deb Could not connect to azure.archive.ubuntu.com:80 (52.252.75.106), connection timed out [IP: 52.252.75.106 80]
E: Failed to fetch http://azure.archive.ubuntu.com/ubuntu/pool/main/m/mesa/libegl-mesa0_22.0.5-0ubuntu0.3_amd64.deb Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
E: Failed to fetch http://azure.archive.ubuntu.com/ubuntu/pool/main/libg/libglvnd/libegl1_1.4.0-1_amd64.deb Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
E: Failed to fetch http://azure.archive.ubuntu.com/ubuntu/pool/main/libg/libglvnd/libglx-dev_1.4.0-1_amd64.deb Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
E: Failed to fetch http://azure.archive.ubuntu.com/ubuntu/pool/main/libg/libglvnd/libgl-dev_1.4.0-1_amd64.deb Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
E: Failed to fetch http://azure.archive.ubuntu.com/ubuntu/pool/main/libg/libglvnd/libegl-dev_1.4.0-1_amd64.deb Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
E: Failed to fetch http://azure.archive.ubuntu.com/ubuntu/pool/main/libg/libglvnd/libgles1_1.4.0-1_amd64.deb Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
E: Failed to fetch http://azure.archive.ubuntu.com/ubuntu/pool/main/libg/libglvnd/libgles2_1.4.0-1_amd64.deb Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
E: Failed to fetch http://azure.archive.ubuntu.com/ubuntu/pool/main/libg/libglvnd/libgles-dev_1.4.0-1_amd64.deb Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
E: Failed to fetch http://azure.archive.ubuntu.com/ubuntu/pool/main/libg/libglvnd/libopengl0_1.4.0-1_amd64.deb Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
E: Failed to fetch http://azure.archive.ubuntu.com/ubuntu/pool/main/libg/libglvnd/libopengl-dev_1.4.0-1_amd64.deb Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
E: Failed to fetch http://azure.archive.ubuntu.com/ubuntu/pool/main/libx/libxfixes/libxfixes-dev_6.0.0-1_amd64.deb Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
E: Failed to fetch http://azure.archive.ubuntu.com/ubuntu/pool/main/libx/libxi/libxi-dev_1.8-1build1_amd64.deb Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
E: Failed to fetch http://azure.archive.ubuntu.com/ubuntu/pool/main/libg/libglvnd/libglvnd-core-dev_1.4.0-1_amd64.deb Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
E: Failed to fetch http://azure.archive.ubuntu.com/ubuntu/pool/main/libg/libglvnd/libglvnd-dev_1.4.0-1_amd64.deb Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
E: Failed to fetch http://azure.archive.ubuntu.com/ubuntu/pool/main/m/mesa/libgl1-mesa-dev_22.0.5-0ubuntu0.3_amd64.deb Unable to connect to azure.archive.ubuntu.com:http: [IP: 52.252.75.106 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
Error: Process completed with exit code 100.
原因
この問題はGitHub Actionsの実行環境イメージが更新されたため起きました。
ubuntu-latest
イメージの変更
GitHub Actionsの実行環境ラベルubuntu-latest
が、2022年10月からubuntu-22.04
に自動更新されました。
name: Node.js CI
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
^^^^^^^^^^^^^
node.jsでのテスト環境は、多くのユーザーがこのスターターテンプレートから構築を始めていると思います。このテンプレートでは、実行環境をラベルubuntu-latest
で指定していますが、このラベルでは実行環境が自動更新されます。
ワークフローが実行環境に依存していた
問題が発生したプロジェクトでは、WebGL単体テストのため仮想ディスプレイドライバーを追加でインストールしていました。該当するスクリプトは以下の通りです。
sudo apt-get install libxi-dev xvfb libgl1-mesa-dev
これらのパッケージはテスト環境を構築したubuntu-18.04
では必須でした。しかしubuntu-22.04
ではxvfb
がイメージに同梱されていて追加インストールが不要になりました。
対策
今回の問題はGitHub Actionsの実行環境が自動更新され、ワークフローのセットアップ処理が実行環境に依存したために起きました。この問題の再発を防ぐためにワークフローを修正します。
実行環境バージョンの固定
name: Build on Ubuntu
on: push
jobs:
build:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-22.04
CI環境の構築が終わり、動作が安定した段階で実行環境のバージョンを固定します。
仮に実行環境が非推奨や削除になった場合、GitHub Actionsのエラーログにそのことが表示されるでしょう。自動更新よりもバージョンを固定した方が問題の切り分けが楽になります。
どのバージョンに固定するかは、公式ドキュメントのイメージ一覧を見て検討してください。
actionの更新
ワークフロー内で利用されているactionも、指定方法によってはバージョンが自動更新されます。たとえばsetup-node
の場合
- uses: actions/setup-node@v3
- uses: actions/setup-node@v3.6
- uses: actions/setup-node@v3.6.0
というバージョンの指定方法があります。バージョン指定が省略された場合、その範囲で最新のactionを利用します。
GitHub Actionsのクイックスタートガイドではメジャーバージョンを指定し、マイナーバージョンの更新を自動化しています。頻繁にセキュリティーアップデートが入るため、actionは自動更新した方が安全だという方針です。しかしこの方針では、actionsの更新によってCIが失敗した場合、問題の切り分けが難しくなります。また可能性は低いですが、悪意あるactionがリリースされてしまった場合、あなたのワークフローはそのactionを使用してしまいます。
そうした問題を解決するため、DependabotがGithub Actionsの更新に対応しました。
▼.github/dependabot.yml
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
設定ファイル.github/dependabot.yml
を作成すると、定期的にDependabotがワークフローファイルを走査します。セキュリティパッチが公開されている場合、Dependabotはactionを更新するプルリクエストを作成します。プルリクエストのマージ前にテストをすれば、actionの更新がテストに影響を与えないとわかります。
apt-get update
テスト環境に追加パッケージが必要な場合は、インストールの前にapt-get update
コマンドを使うべきです。
name: Build on Ubuntu
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v3
- name: パッケージのインストール前にapt-get updateをあわせて実行する
run: |
- sudo apt-get install jq
+ sudo apt-get update
+ sudo apt-get install jq
Note: Always run sudo apt-get update before installing a package. In case the apt index is stale, this command fetches and re-indexes any available packages, which helps prevent package installation failures.
注意: パッケージをインストールする前には、必ず sudo apt-get update を実行してください。apt のインデックスが古くなっている場合、このコマンドは利用可能なパッケージを取得してインデックスを再作成し、パッケージのインストールに失敗するのを防ぐのに役立ちます。
実行環境イメージのインデックスファイルは最新のものとは限りません。実行前にインデックスファイルを更新すれば、インストールに関する失敗を防げます。
個人的な感想
GitHub Actionsが2019年に一般公開されてから、Ubuntuイメージの非推奨化と削除は初めての出来事だと思われます。今後も継続的なメンテナンスが必要になるという前提で、GitHub Actions運用のための時間を確保しなければいけません。
以上、ありがとうございました。
参考記事