###### tags: `ubuntu22.04` `arm64` `buildbot` # ARM64 環境向け Buildbot Docker コンテナ実行環境整備 ## 事前準備 - 以下の手順で ARM64 向けの buildbot の Docker イメージを作成しておく、サンプルのコンテナを動作させておく。 - https://hackmd.io/@yuzuafro/arm64-buildbot-docker-image ## ホスト環境に buildbot をインストールする `master.cfg` のチェックなどに使用するため、ホスト環境にも `buildbot` をインストールする。以下のドキュメントの内容を実行する。 - http://docs.buildbot.net/current/tutorial/firstrun.html ```bash $ apt install -y python3.10-venv $ cd buildbot-docker-example-config/simple $ python3 -m venv sandbox $ source sandbox/bin/activate (sandbox) $ apt-get install build-essential python3-dev libssl-dev libffi-dev (sandbox) $ pip install --upgrade pip (sandbox) $ pip install 'buildbot[bundle]' (sandbox) $ buildbot --version Buildbot version: 3.7.0 Twisted version: 22.10.0 (sandbox) $ buildbot checkconfig config/master.cfg Config file is good! ``` 使う時は、Python の仮想環境で実行する。 ## buildbot コンテナ実行サンプルをローカル実行可能にする ### BUILDBOT_CONFIG_URL を無効にする 公式ドキュメントのサンプル「[First Buildbot run with Docker](http://docs.buildbot.net/current/tutorial/docker.html)」の環境が動作できるようになっているが、このままだと `BUILDBOT_CONFIG_URL` に `master.tar.gz` の変更トリガでしか動作できないので、ローカルでの設定を実行できるようにする。 `buildbot-docker-example-config/simple/docker-compose.yml` を編集する。 - `BUILDBOT_CONFIG_URL` をコメントアウトする。 - `buildbot` コンテナの設定に `volumes` を追加する(`buildbot-docker-example-config/simple/config`以下がコンテナの`/buildbot`になる)。 ```bash #- BUILDBOT_CONFIG_URL=https://github.com/buildbot/buildbot-docker-example-config/archive/master.tar.gz volumes: - $PWD/config:/buildbot ``` config ディレクトリを作成する。 - `buildbot-docker-example-config/simple/config` ディレクトリを作成し、`buildbot-docker-example-config/master.cfg` をコピーする。 ```bash $ cd buildbot-docker-example-config/simple $ mkdir config $ cp ../master.cfg config/ ``` ### Title の変更 動作確認用に `config/master.cfg` の `title` を編集する。 ```python # c['title'] = "Pyflakes" c['title'] = "Test" ``` コンテナを起動する。 ```bash $ cd buildbot-docker-example-config/simple $ docker compose up ``` タイトルが Pyflakes から Test に変更される。 http://localhost:8010/#/waterfall ### Worker の変更 worker の名前を変更する。 - `simple/config/master.cfg` の `example-worker` の部分を `test-worker` に変更する。 ```python # c['workers'] = [worker.Worker("example-worker", 'pass')] c['workers'] = [worker.Worker("test-worker", 'pass')] #c['builders'].append( # util.BuilderConfig(name="runtests", # workernames=["example-worker"], # factory=factory)) c['builders'].append( util.BuilderConfig(name="runtests", workernames=["test-worker"], factory=factory)) ``` - `simple/docker-compose.yml` の `worker` の `WORKERNAME` を `test-worker` に変更する。 ```yaml worker: # WORKERNAME: example-worker WORKERNAME: test-worker ``` コンテナを起動する。 ```bash $ cd buildbot-docker-example-config/simple $ docker compose up ``` worker の名前が example-worker から test-worker に変更される。 http://localhost:8010/#/builders/1 ### BUILDBOT_WEB_URL の変更 `BUILDBOT_WEB_URL` を `http://localhost:8010` にしていると、仮想環境外のブラウザから IP アドレス指定でアクセスした際に、閲覧はできるが実行ができない。 仮想環境の IP アドレスは固定なので `BUILDBOT_WEB_URL` も固定のアドレスで設定する。 - `simple/docker-compose.yml` の `BUILDBOT_WEB_URL` を編集する。 ```yaml #- BUILDBOT_WEB_URL=http://localhost:8010/ - BUILDBOT_WEB_URL=http://192.168.64.4:8010/ ``` ### Builder の変更 Worker `test-worker` に Builder `test-builder` を追加する。 - `simple/config/master.cfg` の `SCHEDULERS` セクションに `test-builder` を追加する。 ```python c['schedulers'].append(schedulers.ForceScheduler( name="force", builderNames=["runtests"])) # ↓↓↓ 追加 c['schedulers'].append(schedulers.ForceScheduler( name="test-builder-force", builderNames=["test-builder"])) ``` - `simple/config/master.cfg` の `BUILDERS` セクションの `factory` を編集する。`repourl` と `ShellCommand` の内容を編集する。 ```python factory = util.BuildFactory() # check out the source factory.addStep(steps.Git(repourl='https://github.com/yuzuafro/pico-moisture.git', mode='incremental')) # run the tests (note that this will require that 'trial' is installed) factory.addStep(steps.ShellCommand(command=["echo", "test"])) #factory.addStep(steps.ShellCommand(command=["trial", "pyflakes"])) ``` - `simple/config/master.cfg` の `BUILDERS` セクションに `test-builder` を追加する。 ```python c['builders'].append( util.BuilderConfig(name="runtests", workernames=["test-worker"], factory=factory)) # ↓↓↓ 追加 c['builders'].append( util.BuilderConfig(name="test-builder", workernames=["test-worker"], factory=factory)) ``` `buildbot checkconfig` で `simple/config/master.cfg` の記述をチェックする。 ```bash $ cd buildbot-docker-example-config/simple $ buildbot checkconfig config/master.cfg Config file is good! ``` コンテナを起動する。 ```bash $ cd buildbot-docker-example-config/simple $ docker compose up ``` test-worker に test-builder が作成されて、`test-builder-force` で Force 実行できる。 http://192.168.64.4:8010/#/builders ## コンテナ実行中の master の再構成 `buildbot-master` のコンテナ内に入って、`buildbot reconfig` コマンドを実行できる。`/buildbot_venv/bin` 以下にコマンドがある。 ```bash $ docker exec -it $(docker ps --filter name=buildbot -q) bash (コンテナ内)$ /buildbot_venv/bin/buildbot reconfig /buildbot sending SIGHUP to process 7 Never saw reconfiguration finish. ``` 数秒待つと再構成できる。