LoginSignup
2
1

CircleCIでのパイプライン構築ではまったところと原因を共有

Posted at

背景

現在開発にかかわっているプロダクトの機能開発において、マイグレーション処理が必要なPRのマージをするときにステージング環境へのマイグレーション作業を自動でおこないたかった

アサインされた当時の計画

  1. 指定フォルダにマイグレーション用のファイルが追加されたことを検知する
  2. gcloudコマンドでsecret Managerからデータベースにパスワードを取得
  3. ステージング環境のCloudSQLに接続するためにcloudsql-proxyを起動(このときはdocker runで最新のコンテナイメージを取得し、軌道までを行っていた)
  4. sql-proxyのコンテナを通じてcloud sqlに接続を試みるが失敗

詰まったところ1:CircleCI上でcloudsql-proxyの起動がうまく行かなった。

公式ドキュメントを参考に以下のコマンドを実行するJobを作成しても Unable to load config file: error="read /config/config.json: is a directory"みたいなエラーでCIが落ちていた

docker run -d \
  -v <PATH_TO_KEY_FILE>:/path/to/service-account-key.json \
  -p 127.0.0.1:1433:1433 \
  gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.6.0 \
  --credentials-file /path/to/service-account-key.json <INSTANCE_CONNECTION_NAME>

原因と解決策

service-account-key.jsonで指定していたものが間違っていたのかと試行錯誤するもエラーは変わらず。

たどり着いたのがCircleCIのドキュメントで、どうやらフォルダーのマウントに問題があったらしい。

以下のように変更することで起動に成功した。

- run: |
    # 設定ファイルとボリュームを保持するダミー コンテナを作成します。
    docker create -v /cfg --name configs alpine:3.4 /bin/true
    # このボリュームに設定ファイルをコピーします。
    docker cp /path/to/service-account-key.json configs:/cfg
    docker run -d \
      --volumes-from configs \
      -p 127.0.0.1:1433:1433 \
      gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.6.0 \
      --credentials-file /cfg/service-account-key.json <INSTANCE_CONNECTION_NAME>

詰まったところ2:cloudsqlに接続できない

1つ目の問題が解決したところで次に行うのはデータベースへの接続だ。
参考にしたのは以下の記事。
CircleCIでCloud SQLに接続した時の問題と解決策 - Qiita

自分がまだCircleCIになれていないのもあって、とりあえずコピペでやってみたものの、connection refusedがつづいた

原因調査(まだ解決まで至っていないので参考になりそうなものをリストアップしていく)

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1