drone.io でARMビルド用agentを設定する
この記事は drone.io Advent Calendar 2017 - Adventar の24日目の記事です。
drone.io は Goで作られたオープンソースのCD (Continuous Delivery)環境です。
droneでのテストは通常x86、x64で動かしていると思いますが、場合によっては異なるアーキテクチャでのテストを実行したい場合もあるかもしれません。
droneではv0.8からarmおよびarm64がサポートされるようになりました。ARMはRaspberry Piや、Androidなどの携帯端末、IoT機器などでも用いられていますので、こういった組み込み機器の開発にもCI/CDを導入できるということは大きなメリットがあります。
本日はdroneでarmを利用する方法をご紹介します。
ARM版のAgentを導入する
ARMがサポートされましたが、drone serverはx64で構いません。というかx64のイメージしか用意されていませんので、すでに立てているserverがあればそれを利用してください。
ARMでビルドしたい場合はARMの環境でagentを立てます。Raspberry Piにdockerを入れてagentにするのがお手軽ですが、qemuでエミュレーションすることも可能です。 agentはarm, arm64用のイメージが提供されています。tagにlinux-arm
, linux-arm64
がありますので指定してください。環境変数にDOCKER_ARCH=arm
を追加してください。
version: '2' services: drone-agent: image: drone/agent:linux-arm command: agent restart: always volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - DRONE_SERVER=127.0.0.1:9000 - DRONE_SECRET=00e40bfb287a0a553c80297a - DOCKER_ARCH=arm
ARM版の.drone.yml
このままテストを実行するとアーキテクチャがわからず、droneがどのagentで実行したらいいかわからなくなります。
.drone.yml
に platform
を追加することでこれを指定することができます。Agentは自動で選ばれるため異なるプラットフォームのagentをひとつのserverに混在させても構いません。
platform: linux/arm pipeline: build: image: arm32v7/busybox:latest commands: - uname -a
ビルドを走らせると...
+ uname -a Linux 39737a2a3d25 4.13.9-300.fc27.armv7hl #1 SMP Mon Oct 23 15:02:20 UTC 2017 armv7l GNU/Linux
armv7で動きました!
ARMのテストにはARM用のイメージが必要ですが、いくつか公式のイメージが用意されていますのでこれをベースにカスタマイズするとよいでしょう。
対応版のプラグインについて
ARMで実行するときの注意としてARM対応版のプラグインを利用しなければならないことがあります。公式のプラグインはそこそこ対応されていますが、自作のプラグインはビルドし直さなければならないかもしれません。