6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GitHub Actionsがなにもしてないのにこわれた時の対処法

Last updated at Posted at 2023-01-19

先に結論だけ

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運用のための時間を確保しなければいけません。

以上、ありがとうございました。

参考記事

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?