レガシー・コンビニエンス・イメージの廃止 (circleci イメージから cimg イメージへの移行)

(こちらはLegacy Convenience Image Deprecationの参考訳です)

2020 年より、CircleCI では CircleCI イメージの次世代版の展開を開始しました。 これらのイメージは、CircleCI 2.0 の発表時にリリースされた従来の CircleCI イメージに代わるものです。 次世代版は CI/CD 環境に合わせてゼロから設計されており、 従来よりもスピードと効率、そしてなによりも信頼性が大きく向上しています。 次世代 CircleCI イメージの特徴について詳しくは、こちらのブログ記事をご覧ください。 従来のイメージが今後廃止されることに伴い、ここでは新しいイメージへの移行プロセスについて説明します。

従来のイメージから次世代版に移行するには、名前空間を変更する必要があります。 イメージの Docker 名前空間について、従来のものはすべて circleci でしたが、次世代イメージでは cimg に変わります。 たとえば、従来の Ruby および Python のイメージを次世代版に移行するには、それぞれ次のように変更します。

circleci/ruby:2.3.0 → cimg/ruby:2.3.0
circleci/python:3.8.4 → cimg/python:3.8.4

目次

変更点

廃止されるイメージ

既存のイメージについて、今後いくつかの変更が行われる予定です。 以下のイメージは廃止され、次世代イメージへの置き換えは行われません。

  • buildpack-deps
  • JRuby
  • DynamoDB

buildpack-deps イメージを現在使用している場合は、新しい CircleCI ベース イメージ cimg/base に移行することをお勧めします。 他の 2 つのイメージについては、ベース イメージにソフトウェアをご自身でインストールするか、サードパーティのイメージを使用してください。

また、以下のイメージの名称が変更されます。

  • Go イメージ: golang から go に変更

従来版と次世代版のイメージの変更点は下表のとおりです。

従来版のイメージ 次世代版のイメージ
circleci/buildpack-deps cimg/base
circleci/jruby 対応イメージなし
circleci/dynamodb 対応イメージなし
circleci/golang cimg/go

ブラウザー テスト

従来のイメージでは、ブラウザー テストを行う場合、利用可能なバリアント タグが 4 種類存在していました。 たとえば、Python v3.7.0 イメージでブラウザー テストを行う場合、circleci/python:3.7.0-browsers という Docker イメージを使用していたかも知れません。 今後、これら 4 つのタグは、CircleCI Browser Tools Orb との併用を前提とした単一のタグに統合されます。

従来のバリアント タグ 次世代のバリアント タグ
-browsers -browsers + Browser Tools Orb
-browsers-legacy
-node-browsers
-node-browsers-legacy

ブラウザー テスト用の新しいバリアント タグには、Node.js およびブラウザー テスト用の一般的なユーティリティ (Selenium など) が含まれていますが、実際のブラウザーは含まれていません。 タグの統合に伴い、ブラウザーはプリインストールされなくなります。 代わりに、Google Chrome や Firefox などのブラウザー、および Chromedriver や Gecko などのドライバーは、browsers-tools Orb でインストールします。 これにより、CircleCI から提供されるツールに縛られることなく、ビルドで必要なブラウザーのバージョンを柔軟に組み合わせることができます。 この Orb の使用例については、こちらを参照してください。

ベース OS の Ubuntu への統一

従来のイメージでは、バリアント タグによってベース オペレーティング システム (OS) が異なっていました。 たとえば、Debian と Ubuntu のバージョンのイメージがある一方、別のイメージでは異なるベース OS が提供されていました。 こうした状態を解消するため、 次世代の CircleCI イメージはすべて、Ubuntu の最新 LTS リリースがベース OS となります。

ベース イメージでは、少なくとも 2 つ以上の LTS リリースと、EOL 前の標準リリースがサポートされます。

イメージ固有の変更点

PHP

2021年11月以降にリリースされるPHPでは、PHPや拡張機能の管理に apt-get を使用しなくなりました。 PHPはソースからコンパイルされており、拡張機能はPECLのようなツールでインストールする必要があります。 詳しくは、cimg/php のreadme をご覧ください。

Python

Python は pyenvでインストールされます。 これまでとほぼ同じように動作するはずですが、Python、および pip モジュールのインストール場所が異なります。 Python の site-package ディレクトリがどこに行ったか、気になりますか? pip のインストール先ディレクトリがどこにあるかを知るには、次のコマンドを実行してください: python -m site --user-site

廃止までのタイムライン

(Clojure、MariaDB、MySQL、Redis、MongoDBを除く) すべてのイメージ

  • 2021年1月1日 - レガシー・コンビニエンス・イメージはメンテナンスモードになり、 アップストリームイメージから24時間ごとに再構築されます。
  • 2021年8月9日 - レガシー・コンビニエンス・イメージはメンテナンスモードになり、 アップストリームイメージから毎週月曜日に(つまり7日ごとに)再構築されます。 つまり、新しいソフトウェアのリリースなど、アップストリームの変更が利用可能になるまでに、最大で7日間かかる、ということになります。
  • 2021年9月20日 - レガシー・コンビニエンス・イメージはメンテナンスモードになり、 アップストリームイメージから隔週月曜日に(つまり14日ごとに)再構築されます。 つまり、新しいソフトウェアのリリースなど、アップストリームの変更が利用可能になるまでに、最大で14日間かかる、ということになります。
  • 2021年8月18日 - レガシー・コンビニエンス・イメージはメンテナンスモードになり、 アップストリームイメージから毎月18日に(つまり月に一度)再構築されます。 つまり、新しいソフトウェアのリリースなど、アップストリームの変更が利用可能になるまでに、最大で30日間かかる、ということになります。
  • 2021年12月31日 - レガシー・コンビニエンス・イメージはこの日以降、サポートされません。 したがって、翌日以降はイメージがリリースされることはありません。 既存のタグはDocker Hub上に残りますが、更新されることはありません。 既存のタグに対しては、バグの修正やセキュリティの修正は行われません。 また、この日以降、新たなタグが発行されることはありません。

Clojure、MariaDB、MySQL、Redis、MongoDBの各イメージ

  • 2021年1月1日 - レガシー・コンビニエンス・イメージはメンテナンスモードになり、 アップストリームイメージから24時間ごとに再構築されます。
  • 2021年8月9日 - レガシー・コンビニエンス・イメージはメンテナンスモードになり、 アップストリームイメージから毎週月曜日に(つまり7日ごとに)再構築されます。 つまり、新しいソフトウェアのリリースなど、アップストリームの変更が利用可能になるまでに、最大で7日間かかる、ということになります。
  • 2021年9月20日 - レガシー・コンビニエンス・イメージはメンテナンスモードになり、 アップストリームイメージから隔週月曜日に(つまり14日ごとに)再構築されます。 つまり、新しいソフトウェアのリリースなど、アップストリームの変更が利用可能になるまでに、最大で14日間かかる、ということになります。
  • 2021年12月13日 - レガシー・コンビニエンス・イメージはメンテナンスモードになり、 アップストリームイメージから毎月6日に(つまり月に一度)再構築されます。 つまり、新しいソフトウェアのリリースなど、アップストリームの変更が利用可能になるまでに、最大で30日間かかる、ということになります。
  • 2022年2月7日 - レガシー・コンビニエンス・イメージはこの日以降、サポートされません。 したがって、翌日以降はイメージがリリースされることはありません。 既存のタグはDocker Hub上に残りますが、更新されることはありません。 既存のタグに対しては、バグの修正やセキュリティの修正は行われません。 また、この日以降、新たなタグが発行されることはありません。

トラブルシューティング

次世代イメージへの移行では、ソフトウェア関連の問題が発生することがあります。 よくある問題を以下に示します。

  • 使用していたライブラリのバージョンが変わる
  • apt パッケージがプリインストールされなくなる。 この場合は、次のコマンドでパッケージをインストールしてください。
sudo apt-get update && sudo apt-get install -y <パッケージ名>

各イメージには、構築元となる GitHub リポジトリが用意されており、 こちらから参照可能です。 これらのリポジトリでは、各イメージの詳細や構成内容を確認できるほか、GitHub 上で Issue の報告やプルリクエストの投稿を行えます。 イメージに関して、特に移行に関する問題がある場合は、GitHub 上で Issue をオープンし、問題を報告してください。 サポートリクエストを送信いただいたり、このポストにコメントを付けていただいても構いません。


本記事の内容が自分に関係しそうであれば、ブックマークしておくことをおすすめします。 本記事は今後も追加情報があるたびに、更新を行なっていきます。