Linux Docker 用のランナーをセットアップする

ランナーを使用すると、独自のインフラストラクチャ上の Pipelines でビルドを実行でき、自社ホストのランナーで使用するビルド時間に対して課金されなくなります。

前提条件

  • ランナー用のホストとして少なくとも 8GB の RAM を持つ 64 ビット Linux インスタンス。

    • 2 つ以上のステップまたはビルド サービスによるビルドでは、より多くの RAM が必要になる場合があります。

  • Docker v19.03 以上 - Docker をインストールする


べスト プラクティス

スワップを無効化して vm.swappiness を設定することを強くお勧めします。スワップを有効化すると、メモリと OOM に関して決定的でないビルドが生じる可能性があります。つまり、十分なスワップが利用可能であればビルドが渡されますが、十分なスワップが利用できないと同じビルドで OOM が生じることがあります。

Linux 環境でスワップを無効にする

ほとんどの Linux ディストリビューションでスワップを無効にする手順を次に示します。次のコマンドがインストールされていない場合は、それらをインストールする必要があります。スワップを設定する場合は、ディストリビューションのドキュメントをご参照ください。

  1. スワップが有効になっているかどうかを確認するには、次のコマンドを使用します。

    1 sudo swapon -sv

    スワップが有効な場合は、次のような出力が表示されます。

    1 2 NAME TYPE SIZE USED PRIO /dev/sda3 partition 2G 655.2M -1
  2. スワップが有効な場合は、次のプロセスを使用して無効にする必要があります。

    1. 次のコマンドを実行して、すべてのスワップを無効にします。

      1 sudo swapoff -av
    2. /etc/fstab を開いて、構成されているすべてのスワップ パーティションまたはファイルを削除します。

    3. マシンを再起動します。

    4. 次のコマンドをもう一度実行して、次の出力がないことを確認します。

      1 sudo swapoff -sv
    5. 出力がある場合はステップ 2 を繰り返して、すべてのスワップ ファイルが /etc/fstab から削除されていることを確認します。

Linux 環境で vm.swappiness を構成する

ほとんどの Linux ディストリビューションで vm.swappiness を構成する手順を次に示します。次のコマンドがインストールされていない場合は、それらをインストールする必要があります。スワップを設定する場合は、ディストリビューションのドキュメントをご参照ください。

  1. vm.swappiness の値を確認するには、次のコマンドを使用します。

    1 sudo sysctl -n vm.swappiness

    値が 1 以外の場合は、スワップ動作がまだ有効になっていることを意味します。

  2. swappiness の値が 1 以外の値である場合は、次のプロセスで設定します。

    1. /etc/sysctl.conf を開いて、vm.swappiness = 1 をファイル自体の行に追加します。

    2. マシンを再起動します。

    3. 次のコマンドを実行して、出力が 1 になることを確認します。

      1 sudo sysctl -n vm.swappiness
    4. 1 以外の出力がある場合は、ステップ 2 を繰り返して、/etc/sysctl.conf が正しく構成されていることを確認します。

Docker イメージのクリーン アップをスケジュールする

We recommend setting up a process to automatically remove docker images to avoid running out of disk space. You can create a cron job using the command docker system prune -af to remove all unused images. The schedule depends on the size of images you use, disk space available, and how often you run builds on a runner.

たとえば、週に 1 回、日曜日の午前 0 時にイメージをクリーン アップするには、次の手順に従います。

  1. Use the crontab -e command to open your user account’s crontab file.

  2. Append the following entry 0 0 * * 0 docker system prune -af

  3. ファイルを保存して閉じます。

詳細については、crontab のドキュメントをご確認ください。


ランナーを始める

  1. ランナー ページに移動します。

    • ワークスペース ランナーについては、[ワークスペース設定] > [ワークスペース ランナー] の順に移動してご確認ください。

    • リポジトリ ランナーについては、[リポジトリ設定] > [ランナー] の順に移動してご確認ください。

  2. [ランナーを追加] を選択します。

  3. [ランナー インストール] ダイアログの [システムとアーキテクチャ] で [Linux Docker (x86_64)] を選択します。

  4. [ランナー インストール] ダイアログの実行ステップで提供される事前設定された Docker コマンドによって、ランナーを実行します。

    • ランナー実行が 1 回目の場合は、イメージをプルします。

    • ランナーを再開する、またはランナーを更新する場合は、次のコマンドを使用する前にランナーを手動でプルして、常に最新のランナーを実行するようにしてください。

      1 docker image pull docker-public.packages.atlassian.com/sox/atlassian/bitbucket-pipelines-runner:1
    • 次のエラーが発生した場合は、以下の「docker container rm -f runner」コマンドを実行してランナーを削除します。
      エラー

      1 2 docker: Error response from daemon: docker: Error response from daemon: Conflict. The container name "/runner-76b247e7-b925-5e7b-9da2-1cda14c4ff2c" is already in use by container "c3403236e3af5962ed3a9b8771561bd2021974941cc8a89a40c6c66cecb18f53". You have to remove (or rename) that container to be able to reuse that name. See 'docker run --help'.

      docker container rm -f runner コマンド

      1 docker container rm -f runner-76b247e7-b925-5e7b-9da2-1cda14c4ff2c

ランナーの作業ディレクトリを変更する

ランナーがホスト マシンで使用する作業ディレクトリを変更する場合は、ランナーを起動するときに docker run コマンドに次の 2 つのフラグを追加します。

1 docker run [all existing parameters] -v /mydir:/mydir -e WORKING_DIRECTORY=/mydir

In this command, the first value in -v parameter will be the local directory on your machine that will serve as the working directory. The second value will be the directory inside the runner. It can be anything you like, it just needs to match the value specified in the WORKING_DIRECTORY environment variable.

作業ディレクトリはランナーのログが永続的に格納されますが、ステップの実行中に一時ファイルを保存するためにも使用されます。

その他のヘルプ