マルチアーチビルド、トラビスはどうですか?

GitHub Actions を使用してマルチアーキテクチャイメージを構築する方法を見てきた 前回の記事 に続いて、別の CI を使用して同じことを行う方法を示します。 この記事では、このユースケースで使用するのが最も難しいものの1つであるTravisについて検討します。

Travis を使用してイメージの構築を開始するには、まずリポジトリのルートにファイルを作成する必要があります .travis.yml

languagebash
distbionic
services:
  - docker
script:
  - docker version

「バイオニック」を使用して、最新バージョンのUbuntuを利用できるように指定したことに気付くかもしれません– Ubuntu 18.04(バイオニックビーバー)。 今日 (2020 年 5 月) の時点で、このスクリプトを実行すると、提供されている Docker エンジンのバージョンが 18.06.0-ce であることがわかります これは古すぎてbuildxを使用できません。 したがって、Dockerを手動でインストールする必要があります。

language: bash
distbionic
before_install:
  - sudo rm -rf /var/lib/apt/lists/*
  - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  - sudo add-apt-repository "deb [arch=amd64] 
https://download.docker.com/linux/ubuntu $(lsb_release -cs) edge"
  - sudo apt-get update
  - sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
script:
  - docker version

前のスクリプトでわかるように、インストールプロセスでは、パッケージデータベースを同期し、Docker APTリポジトリから新しいパッケージをダウンロードできるようにするために、新しいキーを追加する必要があります。 その後、Ubuntu18.04で利用可能な最新バージョンのDockerをインストールできます。 これを実行すると、Dockerエンジンのバージョン19.03があることがわかります。

この時点で、Docker CLI と対話することはできますが、buildx プラグインはまだインストールされていません。 インストールするには、GitHubからダウンロードします。

language: bash
dist: bionic
before_install:
  - sudo rm -rf /var/lib/apt/lists/*
  - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) edge"
  - sudo apt-get update
  - sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
  - mkdir -vp ~/.docker/cli-plugins/
  - curl --silent -L "https://github.com/docker/buildx/releases/download/v0.3.0/buildx-v0.3.0.linux-amd64" > ~/.docker/cli-plugins/docker-buildx
  - chmod a+x ~/.docker/cli-plugins/docker-buildx
script:
  - docker buildx version

これで buildx を使用できるようになりました。 これは冗長であり、Travis の動作と基になっているバージョンのために、 CircleCI のように Docker イメージを使用して短縮することはできません。 この大きな定型文をスクリプトの先頭に置き、ビルドを実行するたびに約1.5分のビルドを要できるようにする必要があります。

次に、複数のアーキテクチャのイメージを構築します。 前の記事で使用したのと同じ Dockerfile と同じビルド コマンドを使用します。

FROM debian:buster-slim
RUN apt-get update \
  && apt-get install -y curl \
  && rm -rf /var/lib/apt/lists/*
ENTRYPOINT [ "curl" ]

Travis 構成ファイルを変更して、「スクリプト」セクションに次のようにします。

script:
  - docker buildx build --platform linux/arm/v7,linux/arm64/v8,linux/amd64 --tag your-username/multiarch-example:buildx-latest .

このように起動すると、次のエラーが表示されます。

multiple platforms feature is currently not supported for docker driver. Please switch to a different driver (eg. "docker buildx create --use")

これは、ビルドキットドライバがまだ起動されていないためです。 したがって、その行を設定ファイルに追加して再度実行すると、buildxはビルドキットのインスタンスを実行してマルチアーキテクチャイメージをビルドできるようになります。

Travis ダッシュボードに移動すると、次の結果が表示されます。

トラビス1はどうですか

最後の手順では、イメージを Docker ハブに保存します。 これを行うには、書き込みアクセスを取得するために Docker Hubからのアクセストークン が必要になります。

アクセス トークンを作成したら、[設定] セクションのプロジェクト設定に追加する必要があります。

その後、後でログインするための変数を作成できますDOCKER_USERNAMEDOCKER_PASSWORD

これが完了したら、次のようにログインステップとオプションを --push buildxコマンドに追加できます。

script:
  - docker login -u "$DOCKER_USERNAME" -p "$DOCKER_PASSWORD"
  - docker buildx create --use
  - docker buildx build --push --platform
linux/arm/v7,linux/arm64/v8,linux/amd64 --tag
your-username/multiarch-example:buildx-latest .

そして出来上がり、コードベースに変更を加えるたびにマルチアーチイメージを作成できるようになりました。