BambooのDockerコンテナー上でのジョブ実行機能について

このエントリーは、Atlassian(Jira , Confuence, Trello, Bitbucket)のTips紹介 Advent Calendar 2018 の17日目エントリーです。

アトラシアン社の継続的インテグレーション(CI)製品であるBambooの6.4以降では、Dockerコンテナーを、Bambooのジョブの実行環境として使用することができます。本エントリーでは、この機能について紹介します。

Dockerコンテナーを、Bambooのジョブの実行環境として使用する機能 (Docker Runner)では、Dockerコンテナー上で、Bambooの各タスクを直接実行することが できます。次の画像の例では、Bamboo上で指定しているnode:10のコンテナー上で、 BambooのScriptタスクを設定して実行しています。

Bambooでのコンテナーの指定
Bambooのタスク設定
Bambooのコンテナー上でのタスク実行結果

この機能(Docker Runner)は、Bambooのジョブを実行するエージェント上のDockerエンジン 上で、Bambooのタスクを実行するものです。DockerのCapabilityを 有しているエージェント上でタスクを実行することによってこのことを可能にしているため、 この機能を使用するには、Bambooのエージェントのプロセスを実行しているユーザーが、 sudo なしでdockerコマンドを実行できる必要があります。

エージェント上でのDockerのCapabilityの指定

Bamboo上でビルドを実行するには、フロントエンドやアプリケーションなど、 ビルドに必要なライブラリーやツール群をセットアップする必要があります。 これらのビルドに必要な環境をDockerでコンテナー化することにより、Bambooおよびエージェントでの 環境が綺麗な状態を保ちながら、ビルドに必要なスクリプトをDockerfileの中でなくBambooの各タスク上で記述することができます。

なお、イメージのDockerfile上で、USERroot以外が指定されているDockerイメージを使用すると、以下のようなメッセージが出力されてジョブの実行が失敗します。 この問題はアトラシアン社に [BAM-19827] Docker Runner build will fail if the image used specifies a non-root user for the USER in the Dockerfileとしてチケットが作成されており、ステータスは解決になっているのですが、社内でBambooの最新版(7.3.2)で検証したところでは、同様の問題が発生しました。

command 14-12-2018 20:32:51 Beginning to execute external process for build 'docker - angluar - Default Job #3 (DOC-AN-JOB1-3)'\n ... running command line: \n/usr/bin/docker exec -u root ea161cb5-b22d-4a01-8f89-23546753a6f228082178 chown root:root /tmp/initialiseContainer.sh\n ... in: /var/bamboo-agent-home/bamboo-agent-home/xml-data/build-dir/DOC-AN-JOB1\n
error 14-12-2018 20:32:52 Error response from daemon: Container 9e17c1aedfa40845a881461711b5360642f5a1ef9f37fe9da4869d0f3d01dfc9 is not running
simple 14-12-2018 20:32:52 Exit code: 1, output: STDOUT: Beginning to execute external process for build 'docker - angluar - Default Job #3 (DOC-AN-JOB1-3)'\n ... running command line: \n/usr/bin/docker exec -u root ea161cb5-b22d-4a01-8f89-23546753a6f228082178 chown root:root /tmp/initialiseContainer.sh\n ... in: /var/bamboo-agent-home/bamboo-agent-home/xml-data/build-dir/DOC-AN-JOB1\nSTDERR: Error response from daemon: Container 9e17c1aedfa40845a881461711b5360642f5a1ef9f37fe9da4869d0f3d01dfc9 is not running

Dockerコンテナーを、Bambooのジョブの実行環境として使用する機能についての紹介でした。