1台のマシンでJenkinsをdocker-composeで立ち上げて自分自身を slaveに追加する

昔々、あるところにUbuntu20.04が動いている1台のNUCがいました。
おじいさんはこんなdocker-compose.ymlを書いてJenkinsおじさんを召喚しました。

version: "3"
services:
  jenkins1:
    container_name: master
    image: jenkins/jenkins:lts
    environment:
      TZ: Asia/Tokyo
    ports:
      - 8080:8080
    volumes:
      - ./jenkins_home:/var/jenkins_home
    restart: always

さて、これでcrontabで動いてたバッチをJobに移行できるぞい。
しかし、JenkinsのJobを作って実行したところ、/usr/bin/dateがありませんと言われてしまった。
なるほど、Jenkinsコンテナの中でシェルスクリプトを実行してしまってるのか。
じゃあsshするslaveとしてホストマシン自身を追加しよう。そう思ったおじいさんはおもむろにこんなymlを書いてJenkinsコンテナを立ち上げ直したぞ。

  • docker-compose.override.yml
version: "3"

services:
  jenkins1:
    extra_hosts:
      - "host.docker.internal:host-gateway"

これでコンテナからhost.docker.internaの名前でホストマシンにsshできるぞい。
無事slaveも追加して、と。
おや、slave起動したらjavaがないと怒られた。
仕方ないホストマシンにjdkインストールじゃ。

sudo apt install default-jdk

再度slaveを起動して、、、、っと。

無事成功じゃ。

こうしておじいさんはJenkinsコンテナとJobが動く1台のNUC環境を手に入れたのでした。

めでたしめでたし。

MySQLでdbのスキーマの差分を比較したい.

開発用ブランチを使っているテスト環境で、migrateに失敗した時に手動解決(schema_migrationsをいじいじとか)したせいで、初回migrate時とバックアップからリストアしたdbで差分が出てしまっているようなのでスキーマだけ比較したくなった。

sqlのdiff用のツールとかもあるが結局以下の方法でdumpしたファイルを見るのが一番早かった。修正は手作業になるが仕方あるまい。

mysqldump -u user -p passwd -h 127.0.0.1 --all-databases --no-data --skip-create-options > schema_dump.sql

これで比較したいdumpファイルを初期状態dbとリストアしたdbの2つ用意して、VSCodeなりなんなりで差分を見ればよい。

以上。

localstackコンテナのdocker-entrypoint-initaws.dの挙動について

以下の設定をしたlocalstackコンテナを立ち上げても、.shが実行されないことがある現象に出くわした.

    volumes:
      - ./localstack:/docker-entrypoint-initaws.d

調べた結果initaws.dで実行したsh内でエラーがあるとそれ以降の処理が継続されないというものだった.
上記機能でコンテナ立ち上げ時にバケットを作成する処理を入れていたのだが、既にバケットが作成済みの場合にalready exitstsと言われてエラーになるため2度目の起動以降バケット作成処理が走らないという感じである.
ということで以下のようにして同名バケット作成済みの場合はなにもしないようにした.

make_buckets.sh

target_buckets=("bucket1"
                "bucket2")

current_buckets=$(aws s3 ls --endpoint-url=http://localhost:4566)

for bucket in "${target_buckets[@]}"; do
  if [ -z "`echo $current_buckets | grep $bucket`" ]; then
    aws s3 mb s3://${bucket} --region ap-northeast-1 --endpoint-url http://localhost:4566
    echo "s3://${bucket} created."
  fi
done

VSCodeを使う前に必ず設定すること

以下記事の設定をして、ファイル監視をオフにする。
やらないと、ssh接続先でファイル監視が大量のリソースを使ってろくに接続先が動かなくなる。
業務でEC2接続中になんかスペック高いのにレスポンス悪いなーと言ってて、まさかVSCodeが原因とは。。。ってなった。
必ず設定すること。

blog.masuyoshi.com

中古のIntel NUC DC3217IYE を 手に入れた!

タイトルの通り、メルカリで中古のIntel NUC DC3217IYE を購入した。
いろんなものを自前で立ち上げて遊ぶ環境が欲しかったので、VPSやEC2よりはスペックに対して割安になりそうな中古マシンでいいや、となった。

TDPが17Wもあるが、Atom系よりはパワーがあるしどんなことに使うかも明確になってないから別に省電力に拘らなくてもいいかなとおもってi3が載ってるものにした。

とりあえずUbuntu20.04で動いている。

pc.watch.impress.co.jp

以上。